我用 UBO 替换了着色器中像 mvp 矩阵这样的制服,以避免大量的 glUniform...() 调用。但是为了在每一帧中更新 UBO,我必须调用 glBufferData(),这也会降低性能。现在我有点困惑是回到使用uniforms还是在着色器中使用uniform块。
指定一堆glUniform
调用通常比单个调用 慢glBufferData
,除非您每帧只修改几个统一值。
因此,您应该基于此决定采用哪种策略。一些注意事项:
glBufferData
可能不是更新缓冲区的最佳方式,因为它需要驱动程序在从调用返回之前从您提供的指针复制数据。我会尝试使用glMapBufferRange
并将更改直接写入其中。请记住,为了避免同步,您需要告诉驱动程序您不会从它提供给您的指针中读取数据,并且您将写入使用标志GL_MAP_WRITE_BIT
和映射的整个范围GL_MAP_INVALIDATE_RANGE_BIT
归档时间: |
|
查看次数: |
1592 次 |
最近记录: |