Opengl es openGL ES着色器位置错误

Opengl es openGL ES着色器位置错误,opengl-es,location,uniform,Opengl Es,Location,Uniform,顶点着色器如下所示: uniform mat4 projectionMatrix; uniform mat4 modelMatrix; uniform mat4 viewMatrix; attribute vec4 vPosition; attribute vec4 vColor; varying vec4 vDestinationColor; void main(void) { gl_Position = projectionMatrix * modelMatri

顶点着色器如下所示:

uniform mat4 projectionMatrix;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;

attribute vec4 vPosition;
attribute vec4 vColor;

varying vec4 vDestinationColor;

void main(void)
{
    gl_Position         = projectionMatrix * modelMatrix * viewMatrix * vPosition;
    vDestinationColor   = vColor;
}
目标C代码:

_projectionMatrixSlot   = glGetUniformLocation(_programHandle, "projectionMatrix");
_modelMatrixSlot        = glGetUniformLocation(_programHandle, "modelMatrix");
_viewMatrixSlot         = glGetUniformLocation(_programHandle, "viewMatrix");

_positionAttribSlot     = glGetAttribLocation(_programHandle, "vPosition");
_colorAttribSlot        = glGetAttribLocation(_programHandle, "vColor");
这里_projectionMatrixSlot _viewMatrixSlot _modelMatrixSlot等于4294967295
虽然_positionAttribSlot和_colorAttribSlot很好

编译器可以随意丢弃代码中未使用的变量。因此,即使在着色器中声明了统一,只要未使用它,其报告的位置也可以是-1或max int或unsigned int


您可能附加了错误的顶点着色器,而不是您在此处发布的此着色器。

我稍后在代码中使用这样的着色器:glUniformMatrix4fv(_projectionMatrix,1,GL_FALSE,(GLfloat*)和_projectionMatrix.m[0]);同样,您的制服已从程序中删除,因为未在main中使用。关于:gl_Position=projectionMatrix*modelMatrix*viewMatrix*vPosition;这意味着你可能附加了错误的顶点着色器,而不是你在这里发布的这个。非常感谢你,我从模拟器中删除了应用程序,然后再次运行它,它工作了,着色器源可能是从其他地方读取的,再次感谢。