如果我在计算着色器中生成 0-12 个三角形,有没有办法可以将它们流式传输到缓冲区,然后用于渲染到屏幕?
我目前的策略是:
- 创建一个
float3
大小为 的缓冲区threads * 12
,因此可以存储最大可能数量的三角形; - 使用取决于网格中线程位置的索引写入缓冲区,因此没有竞争条件。
但是,如果我想从中进行渲染,则需要跳过empty memory。听起来很难看,但目前可能没有其他方法。我知道 CUDA 几何着色器可以具有可变长度输出,但我想知道 iOS 上的游戏是否/如何在 GPU 上生成可变长度数据。
更新 1:
写完问题后,我就想到了使用第二个缓冲区的可能性,该缓冲区会指出每个块有多少个三角形可用。然后顶点着色器将处理该块的所有三角形的所有顶点。
虽然这并不能解决未使用内存的问题,而且由于我有大量线程,所以浪费的总内存将是相当可观的。