transform feedbackを使用してピッキング ルーチンを実装しようとしています。現在は正常に動作しますが、速度が非常に遅い (より遅いGL_SELECT
) ことが問題です。
現在の仕組み:
glBindBufferRange()
オフセット (最初は 0)を使用して TBO をバインドします。glBufferSubData()
(ピッキングが正しいことを確認するために)を使用してメモリ(TFの変数構造のサイズ)をリセットします。主な問題はここにあります。- ピッキング レイとの交差をチェックするジオメトリ シェーダーでオブジェクトを描画します。交差が見つかった場合、シェーダーはこれを TF 変数に書き込みます (最初は交差がありません。手順 2 を参照してください)。
- オフセットを増やして、次のオブジェクトでステップ 1 に進みます。
最後に、各オブジェクトのピッキング データの配列を取得します。
glBufferSubData()
問題は、各反復での呼び出しを回避する方法です。可能な解決策(ただし、それらを実装する方法はわかりません)は次のとおりです。
- 変化する TF を 1 つだけ書き込みます。だから他人をリセットする必要はない
- 他の方法でデータをリセットする
何か案は?