是否存在編譯器標誌或僅強制OpenGL核心配置文件的其他方式?我想在使用glRotatef等不推薦使用的函數時出錯。僅強制OpenGL核心配置文件
EDIT1:我使用的Linux,不過,我也想知道如何做到這一點在Windows
EDIT2:我寧願讓在編譯時錯誤,但運行時錯誤將是確定的,以及。
是否存在編譯器標誌或僅強制OpenGL核心配置文件的其他方式?我想在使用glRotatef等不推薦使用的函數時出錯。僅強制OpenGL核心配置文件
EDIT1:我使用的Linux,不過,我也想知道如何做到這一點在Windows
EDIT2:我寧願讓在編譯時錯誤,但運行時錯誤將是確定的,以及。
您可以使用gl3.h
而不是gl.h
來編譯您的代碼。
嘗試wglCreateContextAttribsARB()與WGL_CONTEXT_CORE_PROFILE_BIT_ARB
。
或glXCreateContextAttribsARB與GLX_CONTEXT_CORE_PROFILE_BIT_ARB
。
您可能會發現this example可用作測試平臺。
要看什麼創造你的OpenGL上下文。
如果您使用GLFW(我真誠地建議對獨立OGL窗口的應用程序),那麼你可以在創建窗口之前做:
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)
返回以確定。
如果您使用另一個API來創建OpenGL上下文,請查看其參考手冊以獲取類似的功能。
BTW: 我相信這是不可能得到在編譯時錯誤 - 你的編譯器不知道你的要求後,你會收到什麼樣的OpenGL上下文(如果有的話)。確保您沒有使用版本過度功能的正確方法是測試glGetError()
。
另外,如果您爲Windows編譯,我推薦使用gl3w
擴展包裝。
我已經找到另一種方式用做非官方的OpenGL的軟件開發工具包:
http://glsdk.sourceforge.net/docs/html/index.html
通過使用「GL加載」組件它可能加載的OpenGL的核心配置文件,並刪除兼容性OpenGL 3.1或更高版本的枚舉和函數。一個簡短的howto可以在這裏找到:
https://www.opengl.org/wiki/OpenGL_Loading_Library#Unofficial_OpenGL_SDK
你在哪個平臺上?你的問題的答案取決於你用什麼來鏈接到OpenGL。 – ltjax 2011-01-14 16:10:51