opengl 将矩阵下载到CPU/RAM进行更新并将其发送回GPU是否高效?

vlju58qv  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在制作一个2D游戏引擎。我正在尝试为所有创建的游戏对象优化我的变换矩阵。现在,变换矩阵存储在RAM中,并且每帧都加载到GPU中。这意味着我在RAM和GPU中有数据冗余。我知道可以从GPU读取数据到RAM/CPU。我正在考虑将变换矩阵加载到GPU中。然后,每次我需要更新时,都要将数据传输到CPU/RAM,更新矩阵并将其加载回GPU。这就提出了一个问题:
从GPU阅读到CPU/RAM以仅在矩阵更新时更新矩阵并将其加载回GPU是否高效?
请注意,这意味着,如果矩阵在帧之间没有更新,我就不必在每一帧都将其加载到GPU中。
更新:将这些矩阵存储在着色器存储缓冲区中。
更新:我想它归结为这一点,从着色器存储缓冲区阅读有效的是什么,我试图完成?

42fyovps

42fyovps1#

经过一些基准测试后使用时钟()从time.h可以肯定地说,glGetBufferSubData比glBufferSubData慢。加载到GPU的速度太快,增量时间总是读取0秒,而从着色器存储缓冲区阅读需要0.006秒。当乘以场景中游戏对象的数量n时,这可能会迅速上升为一个很大的数字。我建议自己和其他人尽可能少地使用glGetBufferSubData。这个想法在理论上听起来不错。我指望这两个函数的Big-O效率相同,但事实并非如此。

相关问题