我正在使用Assimp导入一些3D模型。
Assimp很棒,但它以非交错的顶点格式存储所有内容。
根据Apple OpenGL ES编程指南,ios首选交错顶点数据:https://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html#//apple_ref/doc/uid/TP40008793-CH107-SW8
我正在使用VertexArrays来整合所有缓冲区相关的状态变化 - 是否仍然值得交错所有顶点数据?
答案 0 :(得分:2)
因为交错的顶点数据增加了顶点数据的局部性,所以它允许GPU更有效地缓存,并且通常在管道的那个阶段对内存带宽更轻一些。
它有多大的区别显然取决于一系列其他因素 - 内存访问是否是一个瓶颈(尽管通常是因为纹理是读密集的),如果没有交错,你的顶点数据的间距是多少以及该特定GPU如何获取和缓存。
上传多个顶点缓冲区并将它们捆绑到一个顶点数组中理论上允许驱动程序在你的背后执行这种优化(或者是为了复制内存,或者一旦它有理由相信缓冲区是数组一般不是在其他地方使用)但我不相信它会。但另一种看待它的方法是,您应该能够在数据管道的最后自行进行优化,因此您无需提前计划或更改工具集。这是一个优化,所以如果它是实施的重要工作,那么适用于过早优化的一般规则 - 等到你有硬性能数据。