如何确定 WebGL 和 GLSL 版本?
How to determine WebGL and GLSL version?
我可以进行哪些调用来确定当前浏览器中的 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 支持 GLSL ES 1.0. WebGL2 supports both GLSL ES 1.0 and GLSL ES 3.0 句点。
如果你想编写一个在 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 中这样做,那么你可以使用 __VERSION__
宏,如
#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)"
我可以进行哪些调用来确定当前浏览器中的 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 支持 GLSL ES 1.0. WebGL2 supports both GLSL ES 1.0 and GLSL ES 3.0 句点。
如果你想编写一个在 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 中这样做,那么你可以使用 __VERSION__
宏,如
#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)"