2011-08-26 167 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鏈接器錯誤可能是由於名稱不匹配造成的。你的片段着色器是什麼樣的? –