我用SDL窗口编写了一个OpenGL应用程序。在MacOSX10.9上运行OpenGL 4.1的核心配置文件。命令glClearColor工作得很好,我在屏幕上得到了正确的颜色。但是在我的呈现器中,每次执行命令glEnableVertexAttribArray和glDrawArrays时,我都会得到glEnableVertexAttribArray错误。
这就是守则:
顶点着色器:
#version 410
in vec4 position;
void main(void)
{
gl_Position = position;
}片段着色器:
#version 410
out vec4 out_Color;
void main(void)
{
out_Color = vec4(0.0, 1.0, 0.0, 1.0);
}所有着色器编译并链接到一个程序。没有链接错误!
用数据创建缓冲区:
static const float VertexBufferData[] = {
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f,
};
glGenBuffers(1, &m_VertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(VertexBufferData), VertexBufferData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);呈现:
glUseProgram(m_ShaderProgram);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
// glDrawElements( GL_TRIANGLES, 3, GL_UNSIGNED_INT, nullptr);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glUseProgram(0);输出:

发布于 2014-10-15 12:49:36
正如BDL已经说过的:解决方案是创建一个VAO。作为一个简短的描述:一个VAO (顶点数组对象)是一个VBO的集合,它描述了着色器的顶点布局和顶点。
这里有更多的信息:
因此,我更改了以下代码块:
缓冲区:
static const float VertexBufferData[] = {
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f,
};
glGenVertexArrays(1, &m_VertexBufferArray);
glBindVertexArray(m_VertexBufferArray);
glGenBuffers(1, &m_VertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(VertexBufferData), VertexBufferData, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glBindVertexArray(0);呈现:
glUseProgram(m_ShaderProgram);
glBindVertexArray(m_VertexBufferArray);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glUseProgram(0);结果:

https://stackoverflow.com/questions/26378289
复制相似问题