2011-08-26 136 views
1

我已经找了一段时间来找到这个答案 - 但我没有太多的运气。 我想要做的就是将我的正常数据传入我的顶点着色器。位置正确传递,但是当我尝试加载着色器时,我收到了“未找到正常属性”错误。OpenGL ES 2.0 - 在顶点着色器中找不到属性

我的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); 
} 

,我更新的属性值在并条机看起来像这样的部分:

// 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); 

而且部分地方我在LoadShader这些绑定功能是这样的:

glBindAttribLocation(program, ATTRIB_VERTEX, "position"); 
glBindAttribLocation(program, ATTRIB_NORMAL, "normal"); 

再次,该职位的工作。但“正常”无法找到。有任何想法吗?

+1

我希望你在链接之前调用这些'glBindAttribLocation'调用,否则它们不会有任何效果。 –

回答

10

normal未找到,因为您的GLSL编译器很聪明。它看到你实际上没有东西normal,所以它假装它不存在以节省资源。

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

+0

我改变了我的着色器与您的建议,但我仍然收到错误。我使用normal.x作为我的颜色变量之一。该程序未能链接。 – Ben

+1

@Ben:你从未说过这是一个_linker_错误;你只是说“'正常'找不到”。究竟是什么错误? –

+0

@Ben链接器错误可能是由于名称不匹配造成的。你的片段着色器是什么样的? –