尽管我搜索了几个小时,似乎找不到一个清晰的答案。有人能告诉我到底发生了什么吗?我遇到了错误消息,例如“不支持版本140”。这是我的设备(Kindle Fire)还是GL ES 2.0的问题?我需要添加库或其他东西吗?
尽管我搜索了几个小时,似乎找不到一个清晰的答案。有人能告诉我到底发生了什么吗?我遇到了错误消息,例如“不支持版本140”。这是我的设备(Kindle Fire)还是GL ES 2.0的问题?我需要添加库或其他东西吗?
OpenGL ES 2.0规范提到了GLSL ES,它与GLSL不同。
GLSL ES规范如下:
该语言的版本基于桌面GLSL的1.10版本。但是,它包括一些在1.10版本中没有但在1.20版本中有的功能。
请查阅规范以了解支持哪些功能。
OpenGL ES 不是 OpenGL,因此 OpenGL ES 的着色器语言也不同于 OpenGL 的着色器语言。它们是相似的,但并不完全相同。因此,没有任何桌面 GLSL 版本与 GLSL ES 版本匹配。
实际上你不需要添加任何库,140 对于 Kindle Fire 来说是太新了。要么删除版本规范,要么将其递减直到着色器编译通过。由于语言的各个版本确实存在一些差异,您可能需要修复着色器中的其他错误。
您还可以使用 glGetString()
查询 GL_SHADING_LANGUAGE_VERSION
以获取设备支持的 GLSL 版本(至少保证为100—ES 2.0 是第一个具有着色语言的版本)。
另外,正如其他人所提到的,OpenGL ES GLSL 不是与 OpenGL ES 相同的语言(我认为这是相当明显的,OpenGL ES 不是 OpenGL),因此版本号不会匹配。然而,有 GL_ARB_ES2_compatibility 及其扩展到 ES3、ES3.1 和 ES3.2,其中描述了 ES / 非 ES GLSL 语言的映射,并且使用这些技术可以在非 ES 上下文中获得类似 ES 的功能。
#version ...
指令就立刻认为苹果(桌面GLSL)与橙子(嵌入式GLSL)是可以相互比较的。它们在许多方面相似,但在更多方面不同(版本编号是其中一个明显的不同之处)。请参阅:http://www.opengl.org/registry/gles/ - 如果您查看“OpenGL ES 2.0 Specific”下面的内容,那将告诉您关联的GLSL ES版本。 - Andon M. Coleman140
;我们在ES 2.0中有100
,而ES 3.0的草案规范提供了300
。在2.0和3.0之间没有发布新的语言规范版本。 - Andon M. Coleman首先你需要明确:
如果你的系统使用的是 OpenGL ES 2.0,则必须使用 GLSL ES 1.0(着色器预处理器:#version 100)
这里有一个技巧,如果你使用 #version 110 或 #version 120,那么机器会理解你想要使用 GLSL 而不是 GLSL ES。以下来自 Wikipedia 的表格将帮助你明确。
在OpenGL 3.3之前,版本命名对它们两个都很混乱,但从OpenGL 3.3开始,命名开始变得清晰