我有一些打包的顶点数据,每个顶点运行6个字节:
glVertexAttribPointer Shader.pos3d_loc, 3, GL_UNSIGNED_BYTE, True, 6, 0
glVertexAttribPointer Shader.norm_loc, 3, GL_UNSIGNED_BYTE, True, 6, 3
使用不是4个字节的倍数的步幅和偏移是否会导致任何性能损失(例如隐藏的内存副本)?
答案 0 :(得分:0)
简短的回答是'它取决于':
在PC和(至少某些)Android设备上,以这种方式紧密打包3组件属性没有明显的代价。
在IOS上(无论如何,写这篇文章)都会有很大的性能损失。 IOS GL实现在内部解包并对齐任何非4字节对齐的属性,从而导致内存和CPU命中。除非您正在使用动态VBO,否则CPU命中可能不会引人注意。