【发布时间】:2020-11-11 16:37:04
【问题描述】:
我一直在研究 OpenGL,现在,在一个项目上工作时,我发现,当我创建索引缓冲区时,如果我将它绑定到 GL_ARRAY_BUFFER 而不是 GL_ELEMENT_ARRAY_BUFFER 有(显然)同样的结果。
我的意思是,顶点缓冲区总是绑定到GL_ARRAY_BUFFER,但如果我创建这样的索引缓冲区:
glCreateBuffers(1, &m_BufferID);
glBindBuffer(GL_ARRAY_BUFFER, m_BufferID);
glBufferData(GL_ARRAY_BUFFER, count * sizeof(uint), vertices, GL_STATIC_DRAW);
然后,例如,在绘制几何图形时,我将它绑定到 GL_ELEMENT_ARRAY_BUFFER,效果很好,但我不知道为什么我认为索引缓冲区也必须使用 GL_ELEMENT_ARRAY_BUFFER 创建,但是.. . 实际上有什么“内在”的不同吗?
【问题讨论】:
-
如果您使用的是
glCreateBuffers,那么您使用的是DSA,所以您不应该调用glBindBuffer永远。 -
GL_ARRAY_BUFFERfor index 可能在某些机器上工作,而在其他机器上不起作用......至少在过去的 ATI 卡和后来的 AMD 中,如果不使用GL_ELEMENT_ARRAY_BUFFER和/或数据类型,则在某些情况下会抛出异常不是特定类型,或者索引数量超过某个阈值(IIRC 大约 37 或 57 KByte)
标签: opengl graphics opengl-3 opengl-4