2013-04-09 15 views
7

私はOpenGLのバイナリ形式と、実際には何を意味するのかを知りました。これまで私は多くの成功を収めていませんでした。値が大きさの整数のはstd ::ベクトルであるOpenGLバイナリプログラム形式は標準化されていますか?

::glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, &values[0]); 

、::私は次のように私はフォーマットの数およびセットをフェッチすることができます知っている私のマシンでドライバについて

::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value); 

このリターン単一のバイナリ形式。それは単なる数字であり、そうでなければ私にとっては無意味です。

次のようにだから私の質問は以下のとおりです。

(1)形式番号/コードは何を表していますか? (2)標準のARBバイナリ形式はありますか、それともすべてベンダーに依存していますか? (3)ベンダー間で共通のフォーマットがありますか? (4)複数のフォーマットがある場合は、それらのフォーマットをどのように選択する必要がありますか?

これを利用するには、あらかじめ指定したマシンにシェーダをプリコンパイルしてキャッシュしなければならないという漠然とした感覚があります。つまり、シェイダーコンパイラをポストビルドイベントとして実行し、それらをまとめてD3Dの任意の(Windows)マシンで使用できるDXが好きではないということです。

答えて

11

(1)フォーマット番号/コードは何を表していますか?

これらは一意の識別子を表します。

(2)標準のARBバイナリ形式はありますか、それともそれらはすべてベンダーに依存していますか?

これらはすべてベンダー固有です。

(3)ベンダー間で共通のフォーマットがありますか?

(4)複数のフォーマットが存在する場合、どのようにそれらの間を選択するようになっていますか?

あなたはありません。あなたはフォーマットを選択することはできません。 glGetProgramBinaryに電話すると、ドライバによって決められた特定のフォーマットのバイナリデータが得られます。 load that program laterの場合は、バイナリデータでその特定の形式を渡す必要があります。

これを利用するには、所定のマシンでシェーダを事前にコンパイルしてキャッシュしなければならないという漠然とした感覚があります。

はい、それは、シェーダのコンパイルをキャッシュできるようにする機能の目的です。しかし、ドライバのシェーダバージョンに変更された場合(したがって、キャッシュされたバージョンを作成したときとは異なる場合)、プログラムが正常に動作することを常に確認する必要があります。だから、あなたはまだテキスト形式からシェーダを再構築できる必要があります。

+0

ありがとう、Nicol。 – Robinson

関連する問題