2011-01-14 34 views
17

OpenGLコアプロファイルのみを強制するコンパイラフラグまたは別の方法はありますか?私はglRotatefのような廃止された関数を使うときにエラーを出したい。強制的にOpenGLコアプロファイルを強制する

EDIT1:私はLinuxを使用しています、しかし、私はまた、Windowsで

EDIT2をこれを行う方法を知ることに興味があります:私は、コンパイル時にエラーを取得することを好むだろうが、ランタイムエラーは、同様にOKだろう。

+1

あなたはどのプラットフォームですか?あなたの質問に対する答えは、OpenGLにリンクするために使用するものによって異なります。 – ltjax

答えて

9

gl.hの代わりにgl3.hを使用してコードをコンパイルできます。

http://www.opengl.org/registry/api/gl3.h

+0

これを試しましたが、うまくいきません。これにより、非推奨の非コアプロファイル関数を使用してコンパイルするときにエラーが発生しないということです。理由は私もglx.hを含み、gl.hも含まれていると思います。 – WesDec

+0

あなたは既に試したばかげたトリックです:glx.hをインクルードする前に__gl_h____を定義しようとするとgl.hがインクルードされないようにするのですか? – rotoglup

+0

ヘッダーは、作成されたOpenGLコンテキストのバージョンに違いはありません。彼らは、まあ、ヘッダーだけです。 – Kos

8

wglCreateContextAttribsARB()WGL_CONTEXT_CORE_PROFILE_BIT_ARBと試してください。

glXCreateContextAttribsARBGLX_CONTEXT_CORE_PROFILE_BIT_ARBである。

this exampleがテストベッドとして役立つ場合があります。

+0

これはWindows専用です、いいえ?残念ながら、私はこの時点でWindowsマシンにアクセスできないので、これを試すことはできません。 – WesDec

+0

@WesDec:GLXバージョンを掘り下げて答えを編集しました。 – genpfault

+1

これは、OpenGLコアプロファイルのみを強制するようには見えません。テストベッドを変更してGLX_CONTEXT_CORE_PROFILE_BIT_ARBをインクルードし、glRotatefコールを最初の「sleep(1);」の後に追加しました。電話してもエラーは表示されません。 – WesDec

4

あなたのOpenGLコンテキストを作成するかに依存します。あなたは(私は心からスタンドアロンOGLウィンドウのアプリのためにお勧めします)GLFWを使用している場合は、ウィンドウを作成する前に、あなたが行うことができます

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR,3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR,1); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE); 

// the last line shouldn't be necessary 
// as you request a specific GL context version - 
// - at least my ATI will then default to core profile 

あなたは事前3.0 GLコンテキストを要求した場合ことに注意してください最新のハードウェア/ドライバでは、代わりに互換モードで最新のコンテキストを受け取る可能性が高いです。あなたのGPUがglGetString(GL_VERSION)から返すものを確認してください。

OpenGLコンテキストの作成に別のAPIを使用する場合は、そのリファレンスマニュアルで同様の機能を確認してください。

ところで

: 私はコンパイル時にエラーを取得することは不可能だと考えている - あなたのコンパイラは、あなたがあなたの要求(もしあれば)の後に受け取ることになりますどのようなOpenGLのコンテキストを理解することはできません。アウトオブバージョンの機能を使用していないことを確認する正しい方法は、glGetError()のテストです。

また、Windows用にコンパイルする場合は、gl3w拡張ラッパーを使用することをお勧めします。 OpenGLのコアプロファイルをロードし、互換性を取り除くためにその可能性「GLロード」コンポーネントを使用することにより

http://glsdk.sourceforge.net/docs/html/index.html