我正在使用OpenGL核心配置文件3.3版
当我调用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错误。代码已更新。
答案 0 :(得分:2)
如果零被绑定,则生成GL_INVALID_OPERATION GL_ARRAY_BUFFER缓冲区对象绑定点和指针参数 不是NULL。
您似乎没有绑定缓冲区对象。 glVertexAttribArray 将最近的缓冲区对象与指定的顶点属性相关联。