OpenGL 4.5 直接状态访问呈现三角形 - GL_INVALID_VALUE
OpenGL 4.5 Direct State Access Render a Triangle - GL_INVALID_VALUE
描述
我目前正在学习OpenGL,并想尝试OpenGL 4.5中的直接状态访问扩展。因此,我设置了一个简单的三角形渲染示例(3D(,它应该渲染我的三角形。下面的代码是每帧执行的,并在 3D 空间中绘制一个三角形。
void Geometry::draw(glm::vec3 pos, glm::vec3 pos1, glm::vec3 pos2) {
float vertices[9] = {
pos.x, pos.y, pos.z,
pos1.x, pos1.y, pos1.z,
pos2.x, pos2.y, pos2.z
};
unsigned int m_VaoID;
glGenVertexArrays(1, &m_VaoID);
glBindVertexArray(m_VaoID);
unsigned int m_VboID;
glGenBuffers(1, &m_VboID);
glBindBuffer(GL_ARRAY_BUFFER, m_VboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, 0);
Shader shader = Shader("../../shader.glsl");
shader.compileShader();
shader.useShader();
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDeleteVertexArrays(1, &m_VaoID);
glDeleteBuffers(1, &m_VboID);
}
但是,一旦我更改代码以使用直接状态访问扩展,它就不再呈现三角形,而是生成错误消息。
void Geometry::drawDSA(glm::vec3 pos, glm::vec3 pos1, glm::vec3 pos2) {
float vertices[9] = {
pos.x, pos.y, pos.z,
pos1.x, pos1.y, pos1.z,
pos2.x, pos2.y, pos2.z
};
unsigned int m_VaoID;
glCreateVertexArrays(1, &m_VaoID);
glVertexArrayAttribFormat(m_VaoID, 0, 3, GL_FLOAT, GL_FALSE, 0);
unsigned int m_VboID;
glCreateBuffers(1, &m_VboID);
glNamedBufferData(m_VboID, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexArrayAttribBinding(m_VaoID, 0, m_VboID);
Shader shader = Shader("../../shader.glsl");
shader.compileShader();
shader.useShader();
glBindVertexArray(m_VaoID);
glBindBuffer(GL_ARRAY_BUFFER, m_VboID);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDeleteVertexArrays(1, &m_VaoID);
glDeleteBuffers(1, &m_VboID);
}
在我的更新循环中,这两个方法都使用相同的值(介于 -1.f 和 0.f 之间(调用。
错误输出:
这是我得到的错误控制台输出:
[OpenGL Debug HIGH] GL_INVALID_VALUE in glVertexArrayAttribBinding(bindingindex=16 >= GL_MAX_VERTEX_ATTRIB_BINDINGS)
[OpenGL Debug HIGH] GL_INVALID_VALUE in glVertexArrayAttribBinding(bindingindex=17 >= GL_MAX_VERTEX_ATTRIB_BINDINGS)
[OpenGL Debug HIGH] GL_INVALID_VALUE in glVertexArrayAttribBinding(bindingindex=18 >= GL_MAX_VERTEX_ATTRIB_BINDINGS)
[OpenGL Debug HIGH] GL_INVALID_VALUE in glVertexArrayAttribBinding(bindingindex=19 >= GL_MAX_VERTEX_ATTRIB_BINDINGS)
到目前为止我尝试过什么
我浏览了Khronos Wiki和 docs.gl 文档,但我无法找出为什么我的代码产生上述错误而不是呈现我的三角形。
glVertexArrayAttribBinding
的 3d 参数不是顶点缓冲区对象,它是一个绑定索引。这是一个您必须选择的任意 ID。
以下指令将绑定索引与指定 VAO 的属性索引 (0( 相关联。
glVertexArrayAttribBinding(m_VaoID, 0, m_VboID);
glVertexArrayAttribBinding(m_VaoID, 0, binding_index);
此外,您必须使用glVertexArrayVertexBuffer
将缓冲区对象关联到指定 VAO 的绑定索引:
glVertexArrayVertexBuffer(m_VaoID, binding_index, m_VboID, 0, sizeof(float) * 3);
相关文章:
- 绘制旋转的三角形
- 如何用for循环在c++中生成单词三角形
- 如何使用递归打印修改后的星号三角形图案
- C++ 创建带有 for 循环的三角形
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Eigen c++ 三角形来自
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 使用对象文件读取三角形数据网格
- 从捕获的帧中裁剪三角形 - OpenCV 和 C++
- 如何从 3D 曲面网格中删除自相交三角形?
- 以C++输出一个数字三角形
- Visual Studio 19-17 库兼容性根据 GL 标志
- 打印对立三角形在C++中起作用
- 确定C++中的等腰直角三角形
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- 为什么在三角形带中使用z坐标开gl
- 打开GL无法绘制一些三角形
- 在没有GL OpenGL矩阵函数的情况下使用矩阵移动三角形
- GL VBO问题:第一个和最后一个三角形带没有正确显示