opengl 3.3、radeon 3870HD、c++を使用します。
データのインターリーブされた配列について質問がありました。アプリケーション構造をベクトルで取得しました。これは、データとしてバッファオブジェクトに送信されます。このようなもの:
struct data{
int a;
int b;
int c;
};
std::vector<data> datVec;
...
glBufferData(GL_ARRAY_BUFFER, sizeof(data)*datVec.size(), &datVec[0], GL_DYNAMIC_DRAW);
これは大丈夫です私はこれを頻繁に使用します。しかし、私が作成するのはインターリーブされた配列なので、データは次のようになります。
a1,b1,c1,a2,b2,c2,a3,b3,c3
これをGPUで処理するために送信し、変換フィードバックを使用して、たとえばb変数などのバッファーに読み戻します。したがって、次のようになります。
bU1, bU2, bU3
更新された値をインターリーブされたバッファーにコピーしたいのですが、これはglCopyBufferSubDataのような単一のコマンドで実行できますか?これは、オフセットとサイズがストライドではないため、適切ではありません(おそらく、c ++のmemcpyのようなものです)...結果は次のようになります。
a1, bU1, c1, a2, bU2, c2, a3, bU3, c3
そうでない場合は、これらの2つの鉱山よりも優れたアプローチがありますか?
更新されたバッファをマップし、アプリの一時ストレージに値をコピーし、更新されたマップを解除し、データバッファをマップし、それを繰り返して新しい値を設定します
定数バッファーと可変バッファーで別々のバッファー。定数は時間の経過とともに同じままですが、glCopyBufferSubDataを使用すると、変数を1回の呼び出しで更新できます。
ありがとう