glVertexAttribPointer返回GL_INVALID_OPERATION

时间:2014-01-19 13:25:47

标签: c++ c opengl

我正在使用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错误。代码已更新。

1 个答案:

答案 0 :(得分:2)

  

如果零被绑定,则生成GL_INVALID_OPERATION   GL_ARRAY_BUFFER缓冲区对象绑定点和指针参数   不是NULL。

您似乎没有绑定缓冲区对象。 glVertexAttribArray 将最近的缓冲区对象与指定的顶点属性相关联。