OpenGLの互換性、命名規則、ARBとEXT


14

私は、OpenGLの命名規則と拡張機能がどのように機能するかについての一般的な理解を形成したと思いました。


これまでの私の理解は次のとおりです。

接尾辞ない -などglGenBuffers()。この機能はコアプロファイルの一部です。wikiページには、これは、バージョン1.5から始まるコアプロファイルに追加されたことを私に伝えます。

ARB -などglGenBuffersARB()。この関数は、標準化されたGL_ARB_vertex_buffer_object拡張機能の一部です。この拡張機能の仕様GenBuffersARB()、「新しいプロシージャと関数」セクションで明確に宣言されています。「依存関係」セクションでは、ハードウェアが拡張機能をサポートしている場合、1.4 +コンテキストから潜在的にこれにアクセスできることがわかります。

EXT-一部のベンダーのみがサポートできるベンダー固有の拡張機能です。頂点バッファオブジェクトは、レジストリにEXT拡張を持たないようです。


私の理解が崩れる場所は次のとおりです。

glGenFramebuffers、としてウィキ示すように、3.0のコアに添加しました。

ここで、3.0よりも低いコアプロファイルバージョンのフレームバッファー機能にアクセスしたいと思います。だから私はそれを拡張機能として使いたい。仕様レジストリは、ARBEXTという 2つの拡張機能があることを教えてくれます。

質問1 -ARB拡張が存在する場合、なぜEXT拡張が存在するのですか?常にベンダー固有のものよりも標準化されたものを選択しませんか?

「新しい手順と関数」セクションのARB仕様を見ると、拡張GenRenderbuffers()機能が関数を定義していることがわかります。今回はARBサフィックスはありません。GLEWには関数プロトタイプがまったくありませんglGenRenderbuffersARB()。奇妙な。

ただし、EXT仕様にはGenRenderbuffersEXT()新しい関数セクションに関数があり、GLEWにもありglGenRenderbuffersEXT()ます。

質問2 -EXTサフィックスがある場合、ARBサフィックスがないのはなぜですか?ARB関数とコア関数の名前が同じであれば、これはARBに対してどのように機能しますか?

質問3-最終的に1.4プロファイルのフレームバッファ機能が必要です。最大のハードウェア互換性カバレッジを得るために、どの拡張機能とどの機能セットを使用する必要がありますか?

回答:


9

質問1-通常、EXTバージョンは2つ以上のベンダー間のコラボレーションとして最初に登場します。ARB拡張機能では、Khronosの投票メンバー間でより多くの議論が必要であり、承認される前にEXTバージョンから変更することができます。GL_EXT_direct_state_accessと比較して多くの変更があるGL_ARB_direct_state_access拡張機能を参照してください。

質問2 -GL_ARB_framebuffer_object拡張の問題セクションには、関数にARBサフィックスがない理由が記載されています。

(8)この拡張機能の新しいトークンとエントリポイントに、他のARB拡張機能のようなサフィックスがないのはなぜですか?

   RESOLVED: Unlike most ARB extensions, this is a strict subset of
   functionality already approved in OpenGL 3.0. This extension
   exists only to support that functionality on older hardware that
   cannot implement a full OpenGL 3.0 driver. Since there are no
   possible behavior changes between the ARB extension and core
   features, source code compatibility is improved by not using
   suffixes on the extension.

質問3 -GLバージョンが3.0未満のコンテキストでフレームバッファオブジェクトを使用する場合は、拡張文字列を調べる必要があります。

  1. GL_ARB_framebuffer_objectがサポートされている場合、非ARB関数を使用します。
  2. GL_EXT_framebuffer_objectのみがサポートされている場合は、EXT関数を使用します。
  3. どちらの拡張機能もサポートされていない場合は、pbufferのようなOSレベルのオフスクリーンレンダリングにフォールバックする必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.