glVertexAttribPointer 返回 GL_INVALID_OPERATION

Posted

技术标签:

【中文标题】glVertexAttribPointer 返回 GL_INVALID_OPERATION【英文标题】:glVertexAttribPointer returns GL_INVALID_OPERATION 【发布时间】:2014-01-19 13:25:47 【问题描述】:

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

【问题讨论】:

您遇到内存错误,因为您没有使用 glBufferData() 绑定任何数据 glBufferData 将数据绑定到当前绑定的缓冲区(这里是“vbo”) glVertexAttribPointer 告诉 opengl 如何打包数据以及如何在着色器中访问它。阅读本文了解更多信息:opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml 【参考方案1】:

如果将零绑定到 GL_ARRAY_BUFFER 缓冲区对象绑定点和指针参数 不为 NULL。

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

【讨论】:

谢谢,不知何故,我认为顶点数组对象将替换顶点缓冲区对象。但是现在当我调用 glDrawElements 时出现 GL_OUT_OF_MEMORY 错误 您需要为索引创建一个缓冲区对象并绑定它并用数据填充它。另外,如果有帮助,请采纳答案。 :)

以上是关于glVertexAttribPointer 返回 GL_INVALID_OPERATION的主要内容,如果未能解决你的问题,请参考以下文章

缓冲区和 glVertexAttribPointer 之间的关系

如何使用 glVertexAttribPointer() 添加非数组值

Opengl顶点着色器为每个顶点设置布尔值(glVertexAttribPointer)

glVertexAttribPointer 出现 JOGL 错误

OpenGL glVertexAttribPointer 正常

glVertexAttribPointer 提高 GL_INVALID_OPERATION