类似问题:
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 和 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"
  + "}";

谢谢你俩。

关于opengl-es-2.0 - 树莓派上的着色器中没有统一名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21102688/

10-16 20:19