t2k*_*316 2 android opengl-es glsl glsles
我正在使用 GLES 2.0 ( http://maninara.blogspot.com/2012/09/render-camera-preview-using-opengl-es.html )渲染相机预览。它工作得很好,直到我从其他地方复制了一些 GLSL 着色器代码并注意到它不起作用并且我收到此错误:
error C7502: OpenGL does not allow type suffix 'f' on constant literals in versions below 120
Run Code Online (Sandbox Code Playgroud)
因此,要查看问题是否出自我复制的着色器代码,我将顶点着色器示例(请参见上面的链接)中的这一行从
gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0, 1.0 )
Run Code Online (Sandbox Code Playgroud)
到
gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0f, 1.0f )
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的错误。我已经通过输出 GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) 来确认 GLSL 的版本足够高,它给出:
GLSL Version = OpenGL ES GLSL ES 3.10
Run Code Online (Sandbox Code Playgroud)
我是否错误地设置了 OpenGL ES 上下文?这里发生了什么?
更新:如果我添加“#version 120”,我会收到这个错误:
error C0201: unsupported version 120
Run Code Online (Sandbox Code Playgroud)
你为什么要添加的f后缀时,编译没有告诉你,这是不支持?这些后缀实际上在 GLSL 中没有任何意义,并且文字在默认情况下是单精度的 - 有lf双精度的后缀。
该f着色器中的其他地方似乎有一些后缀,并且在删除该后缀之前它不会编译。
我已经通过输出 > GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) 来确认 GLSL 的版本足够高,它给出:
GLSL 版本 = OpenGL ES GLSL ES 3.10
这只是说该实现最多支持 GLSL ES 3.10,而不是您正在使用它。如果#version着色器源中没有指令,#version 100 ES则将使用默认值。
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |