27

さて、GLEWが必要な理由はすでにわかっていますが、ある程度までです。

おそらくバージョン 3.0 以降の最新の OpenGL を使用している場合、および/または Core Profile を使用している場合、GLEW がないとコンパイルでglGenVertexArrays宣言されていないなどのエラーが発生するため、GLEW が必要です。

したがって、GLEW は、おそらく使用したい最新の OpenGL 関数を含むバックグラウンド作業を少し行います。

それとは別に、それは他に何かしますか?また、どのように機能しますか。

たとえば、クロスプラットフォームのコンパイルは改善されますか? (たとえば、Linux から Windows または OS X に移行する場合、コードの変更は少なくて済みますか?

グラフィックハードウェアの「クロスプラットフォーム性」も改善されますか? たとえば、OS を含めて 2 台の同一のコンピューターがあったとします。プログラムは、1 つのシステムで OpenGL 4.3 コマンドを使用してコンパイルされます。他のシステムに OpenGL 3.3 のみをサポートするグラフィックス カードまたはドライバーがある場合、GLEW はそれを支援しますか? (おそらく、古いバージョンの OpenGL 用にシェーダーをコンパイルしていますか?)

したがって、GLEW が何をどのように行うのか、私が実際には知らないことがわかると思います。

最後にもう 1 つ。GLFWでGLEWを使用する方法を知っている人はいますか? 実際には別の質問として投稿するかもしれません。

4

2 に答える 2

14

あなたが言うように、GLEWは「必須」ではありません。glcorearb.h ヘッダーなどを使用できます。ただし、何らかの関数とリンクする場合は、ターゲット プラットフォームに存在する必要があります。そうしないと、プログラムが起動しません。GLEW などはまさにそれを処理します。GL 関数と直接リンクするのではなく、初期化フェーズの後に関数ポインターを取得します。これにより、実行時にどの拡張機能が存在し、どの機能を使用できるかを確認できます。

移植性に役立つ唯一のことは、関数ポインタを取得することです.wglGetProcAddress/glxGetProcAddressである可能性があり、Apple OSのアナログです. いいえ、そうではありません。ただし、利用可能な GL 拡張機能はさまざまです。

GLEW は、好みの GL 初期化ライブラリとの接点を必要としません。GL コンテキストを作成した後に glewInit を呼び出すだけです。

于 2013-07-23T11:59:25.757 に答える