在着色器中没有专门在Raspberry Pi上使用名称的制服

时间:2014-01-13 22:30:26

标签: opengl-es-2.0 libgdx raspberry-pi

类似的问题: No uniform with name in shaderFragment 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

1 个答案:

答案 0 :(得分:2)

keaukraine和ArttuPeltonen提供的答案

Raspberry Pi在着色器中需要版本号。 OpenGl-ES 2.0使用版本100.由于忘记添加空格,我最初尝试它时无效。 “#version 100attribute ...”与“#version 100 \ nattribute”

不同

最终着色器示例:

Vertex_Shader = 
    "#version 100\n"
  + "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"
  + "}";

谢谢你们两位。