C++ d3d中动态顶点缓冲区的效率和使用

C++ d3d中动态顶点缓冲区的效率和使用,c++,directx,C++,Directx,我提交了一个问题,实际上是一堆问题合在一起,所以我按照要求将它们分为各自独立的问题 我已经阅读并使用了动态顶点缓冲区,并在运行时对它们进行了操作,等等。但是,我被告知要将动态顶点缓冲区保持在绝对最小值,因为它们比静态缓冲区更容易使性能陷入困境。我还读到,使用动态缓冲区可以将大量顶点聚集到一个缓冲区中,并一次性发送它们,这显然提高了性能,而不是为了只写入两个多边形而不断锁定和解锁。我可能希望能够不断地操纵场景中的大多数对象(不仅通过旋转或缩放,还通过单个顶点位置等),那么是否有某种方法可以拥有一个

我提交了一个问题,实际上是一堆问题合在一起,所以我按照要求将它们分为各自独立的问题


我已经阅读并使用了动态顶点缓冲区,并在运行时对它们进行了操作,等等。但是,我被告知要将动态顶点缓冲区保持在绝对最小值,因为它们比静态缓冲区更容易使性能陷入困境。我还读到,使用动态缓冲区可以将大量顶点聚集到一个缓冲区中,并一次性发送它们,这显然提高了性能,而不是为了只写入两个多边形而不断锁定和解锁。我可能希望能够不断地操纵场景中的大多数对象(不仅通过旋转或缩放,还通过单个顶点位置等),那么是否有某种方法可以拥有一个动态缓冲区,您只需要在必要时更新或更改,但除此之外,不必每帧重写一次?

动态缓冲区不需要每帧重写一次,它只是比GPU更易于CPU访问以便于更新。对于不太频繁的更新,您可以使用GPU更容易访问的static进行更快的渲染,然后根据需要使用UpdateSubResource编辑一系列顶点。

如何处理顶点?根据一些流数据更新它们?也许您可以尝试暂存缓冲区。在应用程序的整个生命周期中,偶尔更改缓冲区的位置,并在相机靠近地图一侧时添加顶点。(我甚至没有远程尝试过,但这是为了获得程序地形可能需要的背景信息)。您可以通过修改SDK中的任何示例来对其进行测试,并查看是否必须每帧上载缓冲区(我想不是)。我发现你在玩D3D9,我对它不太熟悉…好吧,从我读到的,我认为动态缓冲区必须被废弃,并在每一帧重写,无论写入的数据是否相同。如果它们就像一个静态缓冲区,除了它们可以偶尔添加或减去顶点之外,为什么不使用动态缓冲区呢?老实说,我一直在研究相同的东西,所以不能说我肯定知道。。。但我能给出的最好答案是:如果顶点是常数-使用静态,因为硬件不必担心频繁的内存更新,渲染速度也会很快-使用动态,内存更新会更快,但渲染速度不会那么快。。再一次,我希望有人给出一个具体的答案,一直在想同样的事情,并坚持我上面的假设。-似乎暗示动态存储用于快速CPU访问(轻松更新),静态存储用于快速GPU访问(但CPU不容易访问以进行更新)。我真的很想使用动态缓冲区,但我不确定如何有效地使用它,也不确定何时缓冲区将真正地只进行局部更新。如果我想不断更新缓冲区,显然没有其他方法,但在这里,我觉得我会无缘无故地把卡弄得乱七八糟:\edit:这是为了上面的评论,所以我想知道是否有什么方法可以存储一个动态缓冲区,以便更快地访问gpu,只是偶尔增加或减少多边形?更新速度较慢,但可以增加或减少大小。