我有一个包含数千个顶点的OpenGL场景,想要将它们作为VBOs/IBOs传递。
执行glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, &maxVertices)命令会揭示一个2048个顶点的最大限制,尽管我的显卡很新。
此外,C语言中的数组仅限于int类型,因此最多只能有32k个顶点。
如何解决这些限制以显示所有对象?
将总顶点数除以2048,创建相应数量的VBO
void glGenBuffersARB(GLsizei n, GLuint* ids)
所以 n 的值为 (total / 2048)+1,ids 是一个包含 (total / 2048)+1 个 GLuint 元素的数组。
double
不能作为数组索引,但是long
可以。int
和long
都是整数。在拥有最新显卡的平台上,int
很少会小于16位。 - FlexoMAX_ELEMENTS_VERTICES
和MAX_ELEMENTS_INDICES
仅仅是建议值,而不是硬性限制。OpenGL规范(第329页)指出,如果您将大小/范围保持在这些限制以下,您将获得最佳性能。如果您超过这些建议值,可能会导致性能下降。 - doug65536