如何确定WebGL和GLSL版本?

如何确定WebGL和GLSL版本?,glsl,webgl,Glsl,Webgl,我可以打什么电话来确定当前浏览器中的WebGL版本支持(如1对2)和SL规范版本(如1.x对3.x) 您知道我必须使用GL api进行哪些调用吗?或SL中的宏来检查WebGL2 const gl = someCanvas.getContext("webgl2"); if (!gl) { .. no webgl2 } 要检查WebGL1 const gl = someCanvas.getContext("webgl"); if (!gl) { ... no webgl } GLSL没有什么可检

我可以打什么电话来确定当前浏览器中的WebGL版本支持(如1对2)和SL规范版本(如1.x对3.x)

您知道我必须使用GL api进行哪些调用吗?或SL中的宏来检查WebGL2

const gl = someCanvas.getContext("webgl2");
if (!gl) { .. no webgl2 }
要检查WebGL1

const gl = someCanvas.getContext("webgl");
if (!gl) { ... no webgl }
GLSL没有什么可检查的。WebGL1支持。WebGL2支持和期间

如果您想编写一个同时在GLSL ES 1.0和GLSL ES 3.0中编译的着色器,那么实际上,如果没有JavaScript中的字符串操作,您就无法编写,因为GLSL ES 3.0着色器中的第一行必须是

#version 300 es
换句话说,您不能检查“if GLSL VERSION=3”,因为您需要声明正在使用的版本作为第一行

可能也没有太多理由编写在这两种情况下都能工作的着色器。因为如果希望着色器同时在WebGL1和WebGL2中运行,则只需使用GLSL ES 1.0,因此选择使用GLSL ES 3.0的原因是使用GLSL ES 1.0中不存在的功能

如果您真的想这样做,我建议您在JavaScript中使用字符串操作。如果要在GLSL中执行此操作,则可以使用中的
\uuu VERSION\uu

#if __VERSION__ == 300
  ...glsl es 3.00 code ...
#else
  ...glsl es 1.00 code ...
#

但当然,您仍然需要在顶部手动预编
#version 300 es
,才能真正获得GLSL es 3.0

我也想在这里添加一些我自己的发现,以防它们对其他人有用:

您可以按如下方式查询支持的着色器语言:

gl.getParameter(gl.SHADING_LANGUAGE_VERSION);
"WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)"
如果您有一个上下文,但不知道如何获得它,您可以使用以下方法进行查询:

gl.getParameter(gl.VERSION);
"WebGL 1.0 (OpenGL ES 2.0 Chromium)"