对于每个属性,使用跨度顶点缓冲区与整齐的压缩缓冲区的优缺点是什么?我的意思是举个例子:
Stride:xyzrgb xyzrgb xyzrgb
紧凑:xyzxyzxyz rgbrgbrgb
乍一看,使用stride时可以轻松更改大小,但使用glBufferData()
重新分配顶点缓冲区时,顶点缓冲区的内容会被删除。
对我来说,使用紧凑模型似乎是最好的,因为位置、颜色和文本坐标可能来自本地内存中的不同数组,并且因为没有步长缓冲区数据函数;在上传之前必须将所有数组复制到交错缓冲区中,或者为每个顶点使用一个glBufferSubData()
(我猜这是个糟糕的想法)。
使用交错缓冲区(stride)似乎是一种常见的做法。为什么会这样呢?我有什么遗漏的吗?
发布于 2013-07-16 03:35:56
我认为使用交错缓冲区是很常见的,因为这更容易创建(涉及的缓冲区更少,更直观),而且应该更快(因为内存访问模式或类似的东西),紧密打包的最大优势是能够只更新需要更新的数据,从而导致更快的更新。大多数OpenGL教程通过绘制静态网格来教授VBO,这些静态网格不需要更新,因此可以从交错数据中受益。
一般的意见似乎是:尽可能多地交错,在需要的时候拆分。
请参阅:How does interleaved vertex submission help performance?
和:Performance gain using interleaved attribute arrays in OpenGL4.0
另请参阅:http://www.opengl.org/wiki/Vertex_Specification_Best_Practices
它直接说明:
“交错属性对渲染性能有多大帮助还不清楚。需要分析数据。由于对齐需要,交错的顶点数据可能会比未交错的数据占用更多空间。”
https://stackoverflow.com/questions/17660360
复制相似问题