GLES2.0 glVertexAttribPointer:使用奇数Stride和Offset值的性能损失?

时间:2017-03-22 10:33:25

标签: performance opengl-es-2.0 stride

我有一些打包的顶点数据,每个顶点运行6个字节:

glVertexAttribPointer Shader.pos3d_loc, 3, GL_UNSIGNED_BYTE, True, 6, 0
glVertexAttribPointer Shader.norm_loc, 3, GL_UNSIGNED_BYTE, True, 6, 3

使用不是4个字节的倍数的步幅和偏移是否会导致任何性能损失(例如隐藏的内存副本)?

1 个答案:

答案 0 :(得分:0)

简短的回答是'它取决于':

在PC和(至少某些)Android设备上,以这种方式紧密打包3组件属性没有明显的代价。

在IOS上(无论如何,写这篇文章)都会有很大的性能损失。 IOS GL实现在内部解包并对齐任何非4字节对齐的属性,从而导致内存和CPU命中。除非您正在使用动态VBO,否则CPU命中可能不会引人注意。