2014-01-19 58 views
0

我使用OpenGL的核心配置文件,版本3.3glVertexAttribPointer返回GL_INVALID_OPERATION

當我打電話glVertexAttribPointer我得到GL_INVALID_OPERATION。我已經簽出http://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribPointer.xml

struct 
{ 
    GLuint program; 

    GLint uni_texture; 
    GLint att_coord; 
} shader_fbo; 

... 

shader_fbo.att_coord = glGetAttribLocation(shader_fbo.program, "coordIn"); 
glGenVertexArrays(1, &vao); 
glGenBuffers(1, &vbo); 


/*shader_fbo.att_coord stores now 0*/  
/*vao stores now 1*/ 

... 

GLfloat vertices[] = { -1.0, -1.0, 
         -1.0, 1.0, 
         1.0, -1.0, 
         1.0, 1.0 }; 
GLubyte indices[] = { 0, 1, 2, 
         1, 2, 3 }; 
... 

glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBindVertexArray(vao); 
glEnableVertexAttribArray(shader_fbo.att_coord); 
glVertexAttribPointer(shader_fbo.att_coord, 
         2, 
         GL_FLOAT, 
         GL_FALSE, 
         0, 
         vertices); 

... 

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices); 

這裏來我的頂點着色器

#version 330 
in vec2 coordIn; 
out vec2 coordFS; 
void main() { 
    gl_Position = vec4(coordIn, 0.0, 1.0); 
    coordFS = (1.0+coordIn)/2.0; 
} 

它編譯和鏈接沒有任何錯誤。

更新: glVertexAttribPointer現在可以工作,但當我調用glDrawElements時,我得到一個GL_OUT_OF_MEMORY錯誤。代碼已更新。如果零被綁定到 GL_ARRAY_BUFFER緩衝器對象綁定點和指針參數 不是NULL產生

+1

你得到一個內存錯誤,因爲你沒有綁定任何數據glBufferData() –

+0

glBufferData將數據綁定到當前綁定的緩衝區(這裏是「vbo」)glVertexAttribPointer告訴opengl如何打包數據和如何在着色器中訪問它。閱讀此更多信息:http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml –

回答

2

GL_INVALID_OPERATION。

您似乎沒有綁定緩衝區對象。 glVertexAttribArray將最近的緩衝區對象與指定的頂點屬性關聯起來。

+0

謝謝,不知何故,我認爲頂點數組對象將替換頂點緩衝區對象。但是現在,當我調用glDrawElements時,我得到GL_OUT_OF_MEMORY錯誤 – user2798943

+0

您需要爲索引創建一個緩衝區對象並將其綁定並填充數據。另外,如果有幫助,請接受答案。 :) – Troubleshoot

相關問題