DX11动态大小的缓冲区

时间:2013-03-31 15:22:02

标签: c++ directx-11 voxel compute-shader

我正在尝试为大学的项目制作一个可变形的体素地形。我目前正在使用一些3DTextures将我的体素数据保存在“块”中。我的计划是使用计算着色器在所述体素数据上执行行进立方体算法,并将顶点输出到缓冲区中,然后可以在每个帧中渲染。

问题在于,为了设置我正在使用的结构化缓冲区的UAV,我需要知道它将为D3D11_BUFFER_UAV的NumElements提供多少元素。我可以猜测它可能包含的最大值,但我无法知道在计算着色器完成之后实际有多少它并且我发现这可能不是解决问题的最佳方法

我真正需要做的就是让计算着色器输出任意数量的顶点,这些顶点可以在以后存储和渲染,有关最佳方法的任何想法吗?

2 个答案:

答案 0 :(得分:0)

似乎最好的方法是使用追加缓冲区。你必须要小心,你不依赖于你附加元素的顺序,因为多线程是专门为了允许随机添加内容而设计的。我不得不一次将数据附加到一个三角形,这使我无法使用索引缓冲区,但我看不到任何其他方法来执行此操作。

如果有人想出更好的解决方案,我会很高兴听到它。

答案 1 :(得分:0)

在我的体素引擎中我遇到了同样的问题,最初我分配了缓冲区,以便能够包含可能生成的最大顶点数。

在我开始工作之后,我使用我计划使用的噪声函数对其进行了测试,并记录了顶点缓冲区所需的最大顶点数。

然后我添加了一点,并将该值用作我的应用程序中所有顶点缓冲区的大小。