ようやく動作自体は出来たのでメモしておきたいと思います。
サンプルプログラムはまた後日に。
サンプルプログラムはまた後日に。
■ 準備
- GLSLシェーダーをコンパイル
- シェーダープログラムをリンク処理
- glTransformFeedbackVaryingsNV でストリームアウトとして書き込むデータの設定
- 格納先のバッファオブジェクトを生成
■ 描画フェーズ
- ラスタライズ処理の無効化(GL_RASTERIZER_DISCARD_NV)
- glBindBufferOffsetNV, glBeginTransformFeedbackNV らで書き込み先のバッファオブジェクトを設定
- 描画処理.
- glEndTransformFeedbackNVで終了処理.
- GL_RASTERIZER_DISCARD_NVのステートを戻す
描画の前後でクエリー発行しておくことで書き込まれたデータ(プリミティブ数)を取得することが出来ます。
ここまでくるのに色々と試行錯誤しましたがようやく動かせる状態にきました。
注意のポイントは以下の点だと思います。
- シェーダープログラムのリンク後の処理
- GLSLなのか、固定機能による処理なのか