質問と回答をよりシンプルに保つように努めて、問題を3Dから2Dに減らします。
2D空間にX*Yセルがある2Dグリッドがあります。これは、X、Y、bBoxMin2d、およびbBoxMax2dによって単純に定義されます。
GPU(現在VBO内)には、セルの明るさを定義するX * Y(符号なし8ビット)整数があります。したがって、X = Y = 3の場合、VBOに{4、7、3、2、9、4、7、2、1}が含まれている場合、グリッドは次の明るさのパッチを使用してレンダリングする必要があります。
4 7 3
2 9 4
7 2 1
各セルの中心のワールド位置を含む別のVBOを作成し、ジオメトリシェーダーを使用して、フラグメントシェーダーに渡されるパッチを作成できることはわかっています。
しかし、私はもっと効率的になり、2番目のVBOなしでやりたいと思っています。私の考えでは、ジオメトリシェーダーのすべてのインスタンスに独自のスレッドインデックス(CUDAと同様)がある場合、そのインデックスと、UBOなどのbBoxMin2dとbBoxMax2dのみを使用してセルのパッチを作成できます。フラグメントシェーダーはVBOから色を読み取り、私は満足しています。
しかし、ジオメトリシェーダースレッドインデックスはないようです。では、どうすれば問題を解決できますか?
位置に別のVBOを使用するように言わないでください。これにより、メモリ要件がsizeof(uint8_t)=セルあたり1バイトから、少なくともsizeof(float3)+ sizeof(uint8_t)=13バイトに増加します。そして私はたくさんの細胞を持っています:|