Android OpenGL ES-未找到矢量制服-仅矩阵有效
我尝试用OpenGLES 2制作一个应用程序。有2个设备用于测试。 不幸的是,两者之间似乎存在差异 我有以下用于测试的“基本”着色器代码:Android OpenGL ES-未找到矢量制服-仅矩阵有效,android,opengl-es,Android,Opengl Es,我尝试用OpenGLES 2制作一个应用程序。有2个设备用于测试。 不幸的是,两者之间似乎存在差异 我有以下用于测试的“基本”着色器代码: // vertex shader uniform mat4 uVMatrix; // View Matrix uniform mat4 uPMatrix; // perspective Matrix uniform vec3 uLight1Pos; // LightPos attribute vec4 a
// vertex shader
uniform mat4 uVMatrix; // View Matrix
uniform mat4 uPMatrix; // perspective Matrix
uniform vec3 uLight1Pos; // LightPos
attribute vec4 aPosition;
attribute vec4 aColor;
varying vec4 vColor;
void main() {
vColor = aColor;
mat4 MVPMatrix = uPMatrix * uVMatrix;
gl_Position = MVPMatrix * aPosition;
}
// fragment shader
uniform mat4 uVMatrix;
uniform vec3 uLight1Pos;
varying vec4 vColor;
varying vec3 vPosition;
void main() {
vec3 light2Pos = uLight1Pos;
gl_FragColor = vColor;
}
问题是,有些制服找不到
我像往常一样附加和链接着色器,但检查ID,如:
uVMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uVMatrix");
uPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uPMatrix");
uLight1PosHandle = GLES20.glGetUniformLocation(mProgram, "uLight1Pos");
我有不同的价值观。
在我的星系S1上,它是2,1,3(所以所有的值都是有效的——尽管顺序很奇怪)。
在我的星系S3上,它是0,1,-1(所以最后一个无法找到)
我做错了什么?我是否必须在S3(马里GPU)上以不同方式申报制服?
我意识到我必须“使用”这些制服才能得到推荐人。这就是我编写vec3 light2Pos=uLight1Pos的原因;如果我不这样做,我也没有得到S1的参考
谢谢你的帮助
托拜厄斯
-编辑-
奇怪的是,我尝试将顶点着色器的一致性从vec3更改为mat4:
看来矩阵工作得很好,我可以在使用矩阵时得到一个句柄。怎么回事?您的“使用”对输出fragcolor没有贡献。您刚刚证明了S3在删除死代码方面比S1有更好的编译器。您的“使用”对输出fragcolor没有贡献。您刚刚证明了S3在删除死代码方面比S1有更好的编译器。您的“使用”对输出fragcolor没有贡献。您刚刚证明了S3在删除死代码方面比S1有更好的编译器。您的“使用”对输出fragcolor没有贡献。您刚刚证明了S3在删除死代码方面比S1有更好的编译器。GLSL编译器倾向于消除不利于结果的未使用统一。此行为符合OpenGL规范
在您的例子中,允许编译器消除死线
vec3 light2Pos=uLight1Pos代码>使uLight1Pos
uniform无用。GLSL编译器倾向于消除不利于结果的未使用的uniform。此行为符合OpenGL规范
在您的例子中,允许编译器消除死线vec3 light2Pos=uLight1Pos代码>使uLight1Pos
uniform无用。GLSL编译器倾向于消除不利于结果的未使用的uniform。此行为符合OpenGL规范
在您的例子中,允许编译器消除死线vec3 light2Pos=uLight1Pos代码>使uLight1Pos
uniform无用。GLSL编译器倾向于消除不利于结果的未使用的uniform。此行为符合OpenGL规范
在您的例子中,允许编译器消除死线vec3 light2Pos=uLight1Pos代码>渲染uLight1Pos
uniform无用。啊,我明白了。因此,即使我“使用”了它们,它们也没有真正被使用和移除。谢谢。看来这完全是我的错啊,我明白了。因此,即使我“使用”了它们,它们也没有真正被使用和移除。谢谢。看来这完全是我的错啊,我明白了。因此,即使我“使用”了它们,它们也没有真正被使用和移除。谢谢。看来这完全是我的错啊,我明白了。因此,即使我“使用”了它们,它们也没有真正被使用和移除。谢谢。看来这完全是我的错D
uniform mat4 uLight1Pos;
mat4 lPos = uLight1Pos;