如何在OpenGL中设置顶点属性?

时间:2011-11-16 11:26:57

标签: vbo opengl-3

我正在尝试为一个简单的矩形创建一个VBO。 GL设置为使用核心配置文件(GL:3.2,GLSL:1.5,在Cocoa的NSView中)。

我花了好几个小时试图弄清楚如何在OpenGL中绘制一个简单的矩形。在核心配置文件上找到任何体面的教程似乎很难。我能找到的最好的是this tutorial

我根据自己的需要调整了它,并提出了以下代码:

GLfloat vertices[] = { 1.0, -1.0, 1.0,
                       1.0,  1.0, 1.0,
                      -1.0,  1.0, -1.0,
                      -1.0, -1.0, -1.0 };
glGenBuffers(1, &vertexVBO);
glBindBuffer(GL_ARRAY_BUFFER, vertexVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*3*4, vertices, GL_STATIC_DRAW);
glVertexAttribPointer(VERTEX_POS, 3, GL_FLOAT, GL_FALSE, 0, 0); // VERTEX_POS = 0
glEnableVertexAttribArray(VERTEX_POS); // fails

但是,在调用glEnableVertexAttribArrayINVALID_OPERATION时出现错误。 The documentation表示如果在glBeginglEnd之间进行上述调用,则会产生此错误。不是这种情况。我的意思是,据我所知,核心配置文件甚至不支持glBeginglEnd

因此,我不知所措。如何绘制这个愚蠢的矩形(或至少初始化它?)

1 个答案:

答案 0 :(得分:1)

您需要在设置属性指针之前绑定VAO。

GLuint vao_name;
glGenVertexArrays(1, &vao_name);
glBindVertexArray(vao_name);
// ...
glVertexAttribPointer(...);
glEnableVertexAttribArray(...);

此外,您要关联的文档已过时 - 请改用this one