gpt4 book ai didi

c++ - OSX OpenGL 4.1 glEnableVertexAttribArray glDrawArrays GL_INVALID_OPERATION

转载 作者:太空宇宙 更新时间:2023-11-04 11:26:48 25 4
gpt4 key购买 nike

我用 SDL 窗口编写了一个 OpenGL 应用程序。在 Mac OSX 10.9 上运行 OpenGL 4.1 的核心配置文件。命令 glClearColor 效果很好,我在屏幕上得到了正确的颜色。但是在我的渲染器中,每次执行命令 glEnableVertexAttribArrayglDrawArrays 时,我都会遇到 GL_INVALID_OPERATION 错误。

这是代码:

顶点着色器:

#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);

输出:

Output of my application with profiler description

最佳答案

AS 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);

结果:

Final working result.

关于c++ - OSX OpenGL 4.1 glEnableVertexAttribArray glDrawArrays GL_INVALID_OPERATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26378289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com