我使用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產生
你得到一個內存錯誤,因爲你沒有綁定任何數據glBufferData() –
glBufferData將數據綁定到當前綁定的緩衝區(這裏是「vbo」)glVertexAttribPointer告訴opengl如何打包數據和如何在着色器中訪問它。閱讀此更多信息:http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml –