OpenGL ES 2.0 - 在顶点着色器中找不到属性

1 iphone shader opengl-es vertex

我已经找了一段时间来回答这个问题 - 但我运气不好.我所要做的就是将我的普通数据传递到我的顶点着色器中.位置正确传入,但是在尝试加载着色器时,我收到"找不到正常属性"错误.

我的ATTRIB值是枚举.

我在OpenGL ES 2.0中为Iphone开发创建了一个多维数据集.

我的Shader.vsh看起来像这样:

attribute vec4 normal;
attribute vec4 position;

varying vec4 colorVarying;

uniform mat4 mvp_matrix;

void main()
{
    //Trasform the vertex
    gl_Position = mvp_matrix * position;

    colorVarying = vec4(1.0, 1.0, 0.0, 0.0);
}
Run Code Online (Sandbox Code Playgroud)

我在drawframe中更新属性值的部分如下所示:

// Update attribute values.
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, cubeVerticesStrip);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_NORMAL, 3, GL_FLOAT, 0, 0, cubeNormalsStrip);
glEnableVertexAttribArray(ATTRIB_NORMAL);
Run Code Online (Sandbox Code Playgroud)

我在LoadShader函数中绑定它们的部分是这样的:

glBindAttribLocation(program, ATTRIB_VERTEX, "position");
glBindAttribLocation(program, ATTRIB_NORMAL, "normal");
Run Code Online (Sandbox Code Playgroud)

这个职位再次起作用.但是"正常"无法找到.有任何想法吗?

Nic*_*las 11

normal找不到因为您的GLSL编译器很聪明.它看到你实际上没有做任何事情normal,所以它假装它不存在以节省资源.

此外,你的正常和位置应该是vec3,因为你只传递3个值.这不是严格要求,但更好的形式是使您的输入和属性匹配.