4

適切に処理する方法がわからない問題に遭遇しました。最近、ゲーム用のパーティクル システムの作成を開始し、パーティクル データに「パーティクル」と呼ばれる構造を使用しています。「Particle」には、レンダリング用の頂点情報が含まれています。

問題が発生している理由は、大量の割り当てを節約するためにパーティクル構造をヒープ メモリにプールしているためですが、glBufferData でポインターの配列を使用する方法がわかりません。glBufferData が必要とする印象を受けています。構造体インスタンスへのポインターではなく、実際の構造体インスタンス。

パーティクルを描画するためだけにレンダーごとに float の配列を再構築できることはわかっていますが、glBufferData のような OpenGL 呼び出しがありません。データをコピーするためだけに配列を反復処理する必要がないようにしたいのが理想です。

4

1 に答える 1

3

glBufferData には、構造体インスタンスへのポインターではなく、実際の構造体インスタンスが必要であるという印象を受けています。

正しい。dataglBufferDataパラメーターを介してポイントされたアドレスにプリセットされたデータのフラット コピーを効果的に作成します。

私が提供するデータを通過するときに、ポインターを逆参照できる場所がどこかにありませんか?

クライアント側の頂点配列について考えていますが、それらは OpenGL の最も古い機能の 1 つです。それらは、19 年前にリリースされた OpenGL-1.1 以来存在しています。

つまり、 glGenBuffers 、glBindBuffer、glBufferData を呼び出さず、クライアント側のデータ アドレスを直接 glVertexPointer または glVertexAttribPointer に渡さないでください

ただし、実際にバッファ オブジェクトを使用することを強くお勧めします。いずれにせよ、データをレンダリングできるように、データを GPU にコピーする必要があります。また、バッファ オブジェクトを介してこれを行うと、OpenGL ドライバがより効率的に動作するようになります。また、OpenGL-4 以降、バッファ オブジェクトの使用はオプションではなくなりました。

于 2013-01-16T09:09:45.470 に答える