Android 上的 OpenGL ES GLSL 着色器未加载正确版本?
OpenGL ES GLSL shader on Android not loading correct version?
我按照这个示例使用 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
因此,为了查看问题是否出自我复制的着色器代码,我将顶点着色器示例中的这一行(参见上文 link)从
更改为
gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0, 1.0 )
到
gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0f, 1.0f )
但我仍然遇到同样的错误。我已经通过输出 GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) 确认 GLSL 的版本足够高,它给出:
GLSL Version = OpenGL ES GLSL ES 3.10
我是否错误地设置了 OpenGL ES 上下文?这是怎么回事?
更新:如果我添加“#version 120”,我会收到此错误:
error C0201: unsupported version 120
当编译器确实告诉您不 支持时,您为什么添加 f
后缀?这些后缀实际上在 GLSL 中没有任何意义,无论如何默认情况下文字都是单精度的 - 双精度有 lf
后缀。
似乎在该着色器的其他地方有一些 f
后缀,并且在删除后才能编译。
I've confirmed GLSL's version is high enough by outputting > GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) which gives:
GLSL Version = OpenGL ES GLSL ES 3.10
这只是说该实现最多支持 GLSL ES 3.10,并不是说您正在 使用 它。如果您的着色器源代码中没有 #version
指令,将使用默认的 #version 100 ES
。
我按照这个示例使用 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
因此,为了查看问题是否出自我复制的着色器代码,我将顶点着色器示例中的这一行(参见上文 link)从
更改为gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0, 1.0 )
到
gl_Position = vec4 ( vPosition.x, vPosition.y, 0.0f, 1.0f )
但我仍然遇到同样的错误。我已经通过输出 GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) 确认 GLSL 的版本足够高,它给出:
GLSL Version = OpenGL ES GLSL ES 3.10
我是否错误地设置了 OpenGL ES 上下文?这是怎么回事?
更新:如果我添加“#version 120”,我会收到此错误:
error C0201: unsupported version 120
当编译器确实告诉您不 支持时,您为什么添加 f
后缀?这些后缀实际上在 GLSL 中没有任何意义,无论如何默认情况下文字都是单精度的 - 双精度有 lf
后缀。
似乎在该着色器的其他地方有一些 f
后缀,并且在删除后才能编译。
I've confirmed GLSL's version is high enough by outputting > GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION) which gives:
GLSL Version = OpenGL ES GLSL ES 3.10
这只是说该实现最多支持 GLSL ES 3.10,并不是说您正在 使用 它。如果您的着色器源代码中没有 #version
指令,将使用默认的 #version 100 ES
。