glDrawArraysIndirect
でシェーダプログラムを起動したいとしましょう。最初に頂点数を含むバッファを持ち、その後にコマンドの他のデータが続きます。そのバッファは同じシェーダプログラムに原子カウンタバッファとしてバインドされ、頂点シェーダはいくつかのルールによって頂点数を減らしています。頂点数が最後に0
でない場合は、シェーダプログラムを再起動する必要があります。これは、頂点数が0
になるまで行われます。連続したglDrawArraysIndirectコール
しかし、プログラムのリニューアルが必要かどうかを知る最も良い方法は何ですか?データ(頂点数)を読み取らずにこれを完全に行うことは可能ですか?そうでない場合は、データを読み取る最も効率的な方法は何ですか?私は現在、シェイダープログラムをループ内で実行しています。反復の固定数は、頂点数を0
に減らすことが保証されていますが、このアプローチでは、0
頂点(それぞれ約3ms)で描画する時間を捨ててしまいます。 、またはそれはまだデータを読み返すことよりも優れていますか?私は10回のドローコールを持っています。通常、頂点数は3 - 6回目のドローコールで0
です。
「*約3msごとに」「GPU時間またはCPU時間? –
私はあなたがそこで何をしているのか本当に知りたいです。私は、あなたが物事を複雑にしていると感じています。 – thokra
@Nicol Bolas GPUの時間、私はタイマーのクエリでそれを測定しました。 – FamZ