2011-12-06 8 views
3

私はOpenGLのwikiページを見ている、と私は次の行について興味があった。この議論に最終的に無関係な理由から取得OpenGLのAPI関数

は、あなたが 手動経由して機能をロードする必要がありますプラットフォーム固有のAPI呼び出し。この定型文 の作業は、さまざまなOpenGLロードライブラリで行われます。これらはこのプロセスを滑らかにします 。あなたは強くそれを使用することをお勧めします。 - OpenGL Wiki

直感的に言えば、あなたは直観的に、あなたに含めるヘッダーを提供すると思います。だから、これの歴史的な理由は何ですか?

EDIT:
答えてくれてありがとう、私は誰もがにリンクするように/そのOpenGLはその機能の複数の実装をサポートしていますので、誰単一のDLLが存在しないことを今参照してください。私はまた、これらの引用符が役に立ったと評価:

  • The OpenGL library supports multiple implementations of its functions.From MSDN

  • To accommodate this variety, we specify ideal behavior instead of actual behavior for certain GL operations.From GL Spec

  • When you run your program, opengl32.dll gets loaded and it checks in the Windows registry if there is a true GL driver. If there is, it will load it. For example, ATI's GL driver name starts with atioglxx.dll and NVIDIA's GL driver is nvoglv32.dll. The actual names change from release versionsGL FAQ

私はまた、Intelがアップ・ツー・提供していないことがわかりましたOpenGLのための日付の実装、e私はi7-2500を持っていますが、私はOpenGL 3.0しか持っていません。

+0

私は確信していませんが、それは前方と後方互換性のある方法で多くの異なるOpenGLバージョンを扱う試みから来たものと思われます。 –

答えて

2

主な理由の1つは拡張です。すべてのプラットフォームで、OpenGLは常にプラットフォーム固有の拡張機能をサポートしています。公式ヘッダーの一部ではない可能性があります。通常、スペックの更新中にベンダーによって追加されるためです。さらに、ベンダー固有の拡張機能は完全に奇妙なDLL/SOに存在する可能性があります。また、ドライバDLLが "標準"名でそれらをエクスポートするという保証もないので、OpenGLはプラットフォーム固有のものに非常に早く依存して関数ポインタをロードします。これにより、拡張機能全体が実現可能になります。すべてのプラットフォーム上で

、あなたは、通常の拡張機能(これにOpenGL 1.4以上)を使用せずに、いくつかのOpenGLを得るかが、拡張メソッドが成功したと実装が容易であるように、誰もが今、それを使用しています(OpenCLのための類似した!)

+0

ありがとう、私はこの答えが一番好きだった。しかし、これらの実装や拡張をすべて処理する必要があるのは大きな頭痛のように思えます。私たちがライブラリを持っているのはその理由です。 –

+0

ええ、そういうわけで、GLEWとGLeeとそれ以外のものがあります。代わりに、新しいOpenGLリリースを待つ必要があります。これは、DirectXを参照してください。また、新しいハードウェアを購入することもできません。現在のモデルでは、すべてのベンダーが拡張機能を書くことができるだけの速さで機能を追加できます;) – Anteru

3

これは歴史とは関係ありません。それがまさにそれです。

OpenGLの実装は、何らかの形式の共有ライブラリ(DLL/SO)に由来します。しかし、これはあなたが自身の OpenGLの "ライブラリ"ではないという事実によって複雑です。コードが実行されているプラ​​ットフォームのシステムインフラストラクチャの一部です。だからあなたは、あなたが他の誰かのコンピュータで使っているかもしれない特定のDLLを知りません。

したがって、OpenGL関数ポインタを取得するには、既存のインフラストラクチャを使用してそれらをロードする必要があります。

1

Macでは、関数ポインタを読み込む必要はありません。ヘッダとリンクをOpenGLフレームワークに含めるだけです。

+0

Macはまた、OpenGLのバージョンを特定の番号に修正しています。ほとんどのMac GPUはGL 4.2を実行することができますが、Apple *がそれらを許可するまでは動作しません。 –

関連する問題