【发布时间】:2014-01-13 22:30:26
【问题描述】:
类似问题: No uniform with name in shader , Fragment shader: No uniform with name in shader
LibGDX:libgdx.badlogicgames.com
LibOnPi:www.habitualcoder.com/?page_id=257
我正在尝试在 Raspberry Pi 上运行 LibGDX,但运气不佳。经过一些试验和错误后,我最终开始抛出错误“在着色器中没有名称为'mvp'的制服”。这个问题很像类似的问题,但是在我看来,着色器实际上正在使用“mvp”来设置位置。
真正奇怪的部分是它可以在 PC 上运行(Eclipse ADT 中的 Windows 7 x64)很好,但不能在 Pi 上运行。 pi 是否以不同的方式处理着色器,如果没有,是什么导致此错误仅在 pi 上抛出?
Vertex_Shader =
"attribute vec3 a_position; \n"
+ "attribute vec4 a_color; \n"
+ "attribute vec2 a_texCoords; \n"
+ "uniform mat4 mvp; \n"
+ "varying vec4 v_color; \n" + "varying vec2 tCoord; \n"
+ "void main() { \n"
+ " v_color = a_color; \n"
+ " tCoord = a_texCoords; \n"
+ " gl_Position = mvp * vec4(a_position, 1f); \n"
+ "}";
Fragment_Shader =
"precision mediump float; \n"
+ "uniform sampler2D u_texture; \n"
+ "uniform int texture_Enabled; \n"
+ "varying vec4 v_color; \n"
+ "varying vec2 tCoord; \n"
+ "void main() { \n"
+ " vec4 texColor = texture2D(u_texture, tCoord); \n"
+ " gl_FragColor = ((texture_Enabled == 1)?texColor:v_color); \n"
+ "}";
...
shader = new ShaderProgram(Vertex_Shader, Fragment_Shader);
...
shader.setUniformMatrix("mvp", camera.combined);
我也注意到了这个问题: c++ OpenGL glGetUniformLocation for Sampler2D returns -1 on Raspberry PI but works on Windows 这非常相似,但是实施将“#version 150”放在着色器顶部的建议解决方案也只是在PC上破坏了它。 (表示没有名为“mvp”的制服)
编辑:
1 - 应 keaukraine 的要求添加了片段着色器
2 - Keaukraine 和 ArttuPeltonen 发现的修复程序。 Raspberry Pi 需要着色器中的版本号。 OpenGL-ES 2.0 使用版本 100
【问题讨论】:
-
能否请您也提供片段着色器的代码?
-
@keaukraine - 当然!更新了 OP。
-
#version 100将是 OpenGL ES 2.0 的正确语句,而不是 150。您可以尝试一下。 -
正如您所说,添加无效指令也会在 PC 上导致同样的错误。正如我所看到的,在着色器无法编译/链接后,应用程序无法获得着色器的第一个统一(它是
mvp)。您应该检查是否存在一些着色器编译/链接错误 - 在创建着色器的过程中每次调用 GL 函数后检查 GL 错误。应该有一些着色器编译错误,这是导致此错误的主要原因。 -
@ArttuPeltonen - 不幸的是,它似乎与使用 150 或任何其他数字的结果相同。
标签: opengl-es-2.0 libgdx raspberry-pi