OpenGL 拡張機能とは何ですか?また、それを使用する利点とトレードオフは何ですか?

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

質問

この質問に関連して、 OpenGL 拡張機能の使用, 、これらの拡張機能の目的は何ですか?なぜそれらを使用したいのでしょうか?さらに、それらの使用に関連するトレードオフや注意点はありますか?

役に立ちましたか?

解決

OpenGL 標準により、個々のベンダーは、新しいテクノロジーが作成されると、拡張機能を通じて追加機能を提供できます。拡張機能では、新しい関数や新しい定数が導入される場合があり、既存の OpenGL 関数の制限が緩和または削除される場合があります。

各ベンダーには、新しい関数や定数の名前に使用されるアルファベットの略語があります。たとえば、NVIDIA の略語 (NV) は、独自の関数 glCombinerParameterfvNV() と定数 GL_NORMAL_MAP_NV の定義に使用されます。

複数のベンダーが同じ拡張機能の実装に同意する場合があります。この場合、略語 EXT が使用されます。さらに、アーキテクチャ審査委員会が拡張を「祝福」する可能性もあります。その後、これは標準拡張として知られるようになり、ARB という略語が使用されます。最初の ARB 拡張機能は GL_ARB_multitexture で、バージョン 1.2.1 で導入されました。公式の拡張機能プロモーション パスに従って、マルチテクスチャリングはオプションで実装される ARB 拡張機能ではなくなりましたが、バージョン 1.3 以降、OpenGL コア API の一部になりました。

拡張機能を使用する前に、プログラムはまずその拡張機能が利用可能かどうかを確認し、次に拡張機能が定義する新しい関数へのポインタを取得する必要があります。これを行うメカニズムはプラットフォーム固有であり、プロセスを簡素化するために GLEW や GLEE などのライブラリが存在します。

他のヒント

OpenGL 拡張機能 に追加された新機能です OpenGL仕様, 、これらは OpenGL 標準化団体およびさまざまなグラフィックス カード ベンダーによって追加されます。これらは、新しい関数呼び出しまたは変数としてプログラマに公開されます。OpenGL 仕様の新しいバージョンはすべて、新しい機能を備えて出荷され、(通常は) 以前の機能と拡張機能がすべて含まれています。

OpenGL 拡張機能に関する本当の問題は Windows 上にのみ存在します。Microsoft は、その後リリースされた拡張機能をサポートしていません。 OpenGL v1.1. 。グラフィックス カード ベンダーは、ヘッダー ファイルとライブラリを通じてこの機能の独自バージョンを出荷することで、この問題を解決しています。ただし、リンク先の質問が示すように、これを使用すると少し面倒になる可能性があります。しかし、この問題は、 グロー, 、これらすべてを使いやすいパッケージにまとめます。

ごく最近の OpenGL 拡張機能を使用する場合は、古いグラフィックス ハードウェアではサポートされていない可能性があることに注意してください。これ以外に、これらの拡張機能を使用することによる欠点はありません。標準になっている拡張機能のほとんどはかなりひどいものです 役に立つ そして、それらを使用しない理由はほとんどありません。

拡張機能は一般に、グラフィックス カード ベンダーが OpenGL 仕様の次のリビジョンを待たずに OpenGL に新しい機能を追加する方法です。拡張子にはさまざまな種類があります。

  1. ベンダー拡張 - 特定のタイプの機能を提供するベンダーは 1 つだけです。
    • 例: NV_vertex_program
  2. マルチベンダー拡張 - 複数のベンダーが集まり、機能について合意しました。
    • 例: EXT_vertex_program
  3. ARB 拡張機能 - OpenGL アーキテクチャ検討委員会はこの拡張機能を祝福しました。このタイプの拡張機能はしばらく存在するであろうという合理的な期待があります。
    • 例: ARB_vertex_program

拡張機能はこれらの手順をすべて実行する必要はありません。拡張機能は、ハードウェア設計が別の方向に進み、拡張機能が放棄される前に、1 つのベンダーによってのみ実装されることがあります。また、より良い方法があると誰もが判断する前に、拡張機能が ARB ステータスに到達する可能性もあります。( ARB_vertex_program たとえば、このアプローチは脇に置かれ、次の高レベル シェーディング言語のアプローチが優先されました。 ARB_vertex_shader シェーダーをコア OpenGL 仕様に組み込む時期が来たとき。) ARB 拡張機能でさえ永遠に続くわけではありません。今日は必要なことは書きません ARB_matrix_palette, 、 例えば。

以上のことをすべて踏まえた上で、拡張機能、特に最新の ARB 拡張機能と EXT 拡張機能について常に最新の情報を入手しておくことは非常に良い考えです。これまでは、ハードウェアを介した一部の「高速パス」には拡張機能を介してのみアクセスできたのは事実でした。同様に、ハードウェアで実行できるすべての機能を知りたい場合は、ベンダー固有の拡張機能を参照するのが最適です。

OpenGL を始めたばかりの場合は、以下を調査することをお勧めします。

  • ARB_vertex_buffer_object (頂点)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / GLSL仕様(シェーダー)

より高度な:

  • ARB/EXT_framebuffer_object (オフスクリーンレンダリング)

これはすべてコアに組み込まれた機能ですが、その境界がどこにあるのかをよりよく理解できるように、単独で見ると良い場合があります。(OpenGL のコア仕様は古いものと新しいものをシームレスに混合するため、高速パスを維持し、レガシーやソフトウェア パスに実装される場合があるものを避けたい場合、これは非常に重要です。)

何をする場合でも、使用する拡張機能を適切にチェックし、必要に応じてフォールバックを行うようにしてください。カードに特定の拡張子が付いている場合でも、その拡張子が別のベンダーのカード、または同じカードを備えた別のオペレーティング システムに存在するという保証はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top