代码之家  ›  专栏  ›  技术社区  ›  Chesh

DX11动态大小缓冲区

  •  1
  • Chesh  · 技术社区  · 12 年前

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

    问题是,为了为我正在使用的结构化缓冲区设置UAV,我需要知道D3D11_buffer_UAV的NumElements有多少元素。我可以猜测它可能包含的最大值,但在计算着色器完成之前,我无法知道它实际会包含多少,我突然想到这可能不是解决问题的最佳方法。

    我真正需要做的就是让计算着色器输出任意数量的顶点,这些顶点可以在以后存储和渲染,有什么想法可以做到这一点?

    2 回复  |  直到 12 年前
        1
  •  0
  •   Chesh    12 年前

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

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

        2
  •  0
  •   gareththegeek    12 年前

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

    在我完成任务后,我用计划使用的噪波函数对其进行了测试,并记录了顶点缓冲区所需的最高顶点数。

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