Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DX11动态大小的缓冲区_C++_Directx 11_Voxel_Compute Shader - Fatal编程技术网

C++ DX11动态大小的缓冲区

C++ DX11动态大小的缓冲区,c++,directx-11,voxel,compute-shader,C++,Directx 11,Voxel,Compute Shader,我正试图为大学的一个项目制作一个可变形的体素地形。我目前正在使用一些3DTextures将体素数据保存在块中。我的计划是使用compute着色器对所述体素数据执行marching cubes算法,并将顶点输出到缓冲区中,然后每个帧都可以进行渲染 问题是,为了为我正在使用的结构化缓冲区设置UAV,我需要知道D3D11_buffer_UAV的装备将包含多少元素。我可以猜测它可能包含的最大值,但在计算着色器完成之前,我无法知道它实际包含的最大值,我想这可能不是解决问题的最佳方法 我真正需要做的就是让c

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

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


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

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


如果有人提出更好的解决方案,我很乐意听到。在我的体素引擎中,我也遇到了同样的问题,最初我分配了缓冲区,以便能够包含可能生成的最大数量的顶点

在我工作之后,我用我计划使用的噪波函数对它进行了测试,并记录了顶点缓冲区所需的最高顶点数

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