以前に読者からの質問がありました: C++ で OpenGL ES シェーダ プログラムをバイナリ (保存) し、それを別の場所にロードして使用するにはどうすればよいですか? 今度はそれを紹介する記事を書きます。
シェーダ プログラムを 2 値化 (Shader Program Binary) する利点は何ですか?
-
高速なロードと解析: バイナリ形式を使用するシェーダ プログラムは、コンパイルとリンクのプロセスがないため、より高速にロードおよび解析できます。バイナリ データをグラフィックス ドライバーに直接ロードして処理できるため、コンパイルとリンクの時間を節約できます。
-
ソース コードの保護: シェーダー プログラムのバイナリ形式には読み取り可能なソース コードが含まれていないため、リバース エンジニアリングやコード分析の実行がより困難になります。。
-
ドライバーのオーバーヘッドの削減: バイナリ形式のシェーダー プログラムはすでにコンパイルおよび最適化されているため、実行時のドライバーのコンパイルと最適化のオーバーヘッドが軽減されます。
-
移植性: バイナリ シェーダ プログラムは、異なるプラットフォームやデバイス間で共有および転送できます。バイナリ データはプラットフォームに依存しないため、同じバイナリ シェーダ プログラムを異なる OpenGL 実装で使用でき、アプリケーションの移植性が向上します。
バイナリ シェーダ プログラムの移植性には、OpenGL バージョン、GPU アーキテクチャ、その他の要因などの制限が適用される場合があることに注意してください。したがって、バイナリ シェーダ プログラムを使用する場合は、ターゲット プラットフォームとデバイスが対応するバイナリ形式をサポートしていることを確認する必要があります。
シェーダプログラムのバイナリ形式を取得します。
OpenGL ES 3.0 は、glGetProgramBinary 関数を使用したシェーダー プログラムのバイナリ形式の取得をサポートしています。その関数プロトタイプは次のとおりです。