【发布时间】:2022-01-13 20:17:21
【问题描述】:
在业余时间,我正在使用 D3D11 开发 3D 引擎。为了获得 3D 效果,我在 HLSL 着色器中使用了典型的模型视图投影矩阵乘法。这些矩阵被上传到 d3d11 常量缓冲区。投影矩阵仅在调整视口大小时更改,但模型和视图矩阵可以在每帧的基础上更改(当模型或相机移动时)。矩阵中的这些更改必须上传到相同的常量缓冲区才能在着色器中使用。上传这些更改时,投影矩阵(通常)没有改变,所以我不想重新上传这个矩阵。所以简而言之,我需要通过仅更新缓冲区中的特定部分(偏移量)来部分更新我的常量缓冲区。
在 openGL 中,我们有统一的缓冲区,这些工作(我认为)与 d3d11 常量缓冲区的工作方式相同。但是,如果要更新统一缓冲区的特定部分,可以使用 openGL 函数 glBufferSubData。我尝试在 D3D11 中寻找类似的方法来执行此操作,但我没有找到任何东西。我确实找到了有类似问题的人,但他使用的是 D3D11.1。 原帖链接:How to partially update constant buffer in DirectX 11.1。也有人说,在D3D11中,如果要更改特定部分,则需要将所有数据上传到常量缓冲区中。但这可能会导致在 CPU 端 (RAM) 上保留我的缓冲区的整个副本。一定有更好的方法吧?
tldr;如何在特定偏移量上更新我的 d3d11 常量缓冲区?
【问题讨论】:
标签: c++ directx-11