2013-07-23 18 views
22

さて、なぜ私はGLEWが必要なのかを知っていますが、一点までです。GLEWは何をして、なぜそれが必要なのですか?

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

だから、GLEWは私たちが使用したいと思っている最新のOpenGL関数を含む背景作業をしています。

それ以外は何ですか?また、どのように動作しますか。

例として、クロスプラットフォームのコンパイルが改善されていますか? (LinuxからWindowsやOS Xに移行する場合、コードを変更する必要はありませんか?

グラフィックハードウェアの「クロスプラットフォーム性」も改善されていますか? OpenGL 3.3のみをサポートするグラフィックスカードまたはドライバがある場合は、GLEWがそれをサポートしていますか?(OpenGLの古いバージョンのシェーダのコンパイルはおそらく?)

だから、おそらく私が実際にGLEWが何をするか分からない見ることができるか、それはそれをしない方法を

一つの最後のポイント;?誰がGLFWでGLEWを使用する方法を知っているん私が投稿するかもしれない別のQUESとして実際には

答えて

11

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

移植性に役立つ唯一のものは、関数ポインタを取得していることです。これはwglGetProcAddress/glxGetProcAddressであり、リンゴOSの類似点です。そうではありません。しかし、利用可能なGL拡張の種類はさまざまです。

GL初期化ライブラリにはタッチポイントが必要ありません。GLコンテキストを作成した後でglewInitを呼び出すだけです。正しくOpenGLのコンテキストがwglMakeCurrent()を作成する必要がありますGLEW initに

+0

ウィンドウを作成してからglewInit()を呼び出すと、segfaultエラーが発生しますか? – user3728501

+0

@EdwardBird:そのウィンドウでOpenGLコンテキストを作成しましたか? glewInitを呼び出すときにOpenGLコンテキストがアクティブになっていますか? – datenwolf

+0

ええ、私はしましたが、今問題を修正しました - とにかく感謝します(: – user3728501

5

は私がkeltarの答えのコメントにこれを入れてしまうでしょうが、私はどのように表示されていないglewInit();

を呼び出す前に呼び出さなければなりません。

+0

追加ありがとう - upvoted – user3728501

関連する問題