計算シェーダーで 0 ~ 12 個の三角形を生成している場合、それらをバッファーにストリーミングして、画面へのレンダリングに使用する方法はありますか?
私の現在の戦略は次のとおりです。
float3
sizeのバッファを作成するため、threads * 12
可能な最大数の三角形を格納できます。- グリッド内のスレッド位置に依存するインデックスを使用してバッファーに書き込むため、競合状態は発生しません。
ただし、これからレンダリングする場合は、空のメモリをスキップする必要があります。それは醜いように聞こえますが、おそらく今のところ他に方法はありません。CUDA ジオメトリ シェーダーが可変長の出力を持つことができることは知っていますが、iOS のゲームが GPU で可変長のデータを生成できるかどうか、またはどのように生成できるかは疑問です。
更新 1 :
質問を書いてすぐに、各ブロックで使用可能な三角形の数を示す 2 つ目のバッファーを使用する可能性について考えました。頂点シェーダーは、そのブロックのすべての三角形のすべての頂点を処理します。
ただし、これは未使用のメモリの問題を解決しません。また、多数のスレッドがあるため、無駄になるメモリの合計はかなりの量になります。