2010-11-18 50 views
2

查看OpenGL中顶点数组的文档,我发现用于索引的两种最常见的存储器类型是GLubyte(GL_UNSIGNED_BYTE)和GLshort(GL_SHORT)。 我想知道是否有使用两个用于索引GLubyte vs GLshort for Indices

谢谢, Dragonwrenn

+1

你确定一个短的内存比一个字节少吗?我不知道OpenGL,但通常情况是相反的(短的可能是两个字节)。 – Thilo 2010-11-18 01:43:15

+0

@Thilo:说实话,它们可能会占用相同数量的内存,因为驱动程序必须将大多数桌面GPU的8位索引转换为16位。 OpenGL API使得看起来8位索引是一个可行的选项,但在幕后硬件不喜欢它们。很遗憾,OpenGL会做很多这类事情...... OpenGL驱动程序有很多烟雾和镜像。 – 2013-11-29 05:35:30

回答

8

GL_UNSIGNED_BYTE适用于最多有256个顶点的模型 - 实际上并不多。

GL_UNSIGNED_SHORT,占用2个字节,会将您限制为65536个顶点 - 仍然很少。

我想说最常见的变种是GL_UNSIGNED_INT,因为即使2字节可能不足以用于中等多聚和高多聚型号。

+2

通常16位就足够了,如果可能的话,大多数引擎使用这种格式。通常你的三角形的顶点数是顶点的两倍,所以16位就足够了〜120.000三角形。对于一个单一的网格,这是相当多的。 – 2010-11-19 02:06:57

4

GL_UNSIGNED_BYTE之间的任何实际差别是1个字节,GL_SHORT是2个字节。字节的唯一优点是它们较小,因此它们占用较少的内存以及较少的时间传输到图形内存(假设顶点阵列或VBO)。

请注意,并非所有类型都可用于所有用途:例如,您不能拥有GL_UNSIGNED_BYTE顶点。

3

GPU只能处理16位或32位索引,因此在使用GL_UNSIGNED_BYTE时不会有额外的开销,也不会节省内存。