我正在尝试在opengl上下文中利用VAO(顶点数组对象)功能。我的非vao缓冲对象可以很好地绘制,但是当我绑定VAO并进行绘制时,不会绘制任何对象。我基本上是使用一些示例代码,并认为它应该工作。但是我有一个混合双显卡设置,该设置有点旧,并且引起了深深的悲伤和遗憾,并且在过去的几轮转弯中,我进行了研究,发现了一些暗示,它可能与它有关或与gpu同步和资源调用。。但是需要专家为我整理事物并定义土地布局。
我正在Linux Ubuntu上使用opengl版本is..3.3(Core Profile)Mesa 18.2.8。我已经关闭了所有其他代码并运行设置,并在尽力地进行drawcall的同时进行。我设置了错误回调并使用了
的值
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
我认为这是我的格里夫之源。我已经阅读了默认情况下未启用这些功能,并在下面将介绍的绘图调用和初始化中将其激活。
这是我创建VAO的地方
void createSquare() {
float vertices1[] = {
0.5f, 0.5f, 0.0f, // top right
0.5f, -0.5f, 0.0f, // bottom right
-0.5f, -0.5f, 0.0f, // bottom left
-0.5f, 0.5f, 0.0f // top left
};
unsigned int indices1[] = { // note that we start from 0!
0, 1, 3, // first Triangle
1, 2, 3 // second Triangle
};
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
// bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices1), vertices1, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices1), indices1, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind
glBindBuffer(GL_ARRAY_BUFFER, 0);
// remember: do NOT unbind the EBO while a VAO is active as the bound element buffer object IS stored in the VAO; keep the EBO bound.
//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
// You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other
// VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.
glBindVertexArray(0);
}
这是我绘制函数中所有内容的总和。
glUseProgram(programID);
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
正如我之前所说,会抛出此错误---> glVertexAttribPointerARB(idx)中的GL_INVALID_VALUE并没有绘制正方形。
答案 0 :(得分:0)
看来我不在核心环境中。.so,这很可能是导致混乱的答案。感谢您的快速回复。