【问题标题】:DX11 Dynamically sized bufferDX11 动态大小的缓冲区
【发布时间】:2013-03-31 15:22:02
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 2014-06-10
        相关资源
        最近更新 更多