仅强制OpenGL核心配置文件

问题描述:

是否存在编译器标志或仅强制OpenGL核心配置文件的其他方式?我想在使用glRotatef等不推荐使用的函数时出错。仅强制OpenGL核心配置文件

EDIT1:我使用的Linux,不过,我也想知道如何做到这一点在Windows

EDIT2:我宁愿让在编译时错误,但运行时错误将是确定的,以及。

+1

你在哪个平台上?你的问题的答案取决于你用什么来链接到OpenGL。 – ltjax 2011-01-14 16:10:51

您可以使用gl3.h而不是gl.h来编译您的代码。

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

尝试wglCreateContextAttribsARB()WGL_CONTEXT_CORE_PROFILE_BIT_ARB

glXCreateContextAttribsARBGLX_CONTEXT_CORE_PROFILE_BIT_ARB

您可能会发现this example可用作测试平台。

+0

这仅适用于窗户,不是?不幸的是,我目前没有访问Windows机器,所以我不能试用这个。 – WesDec 2011-01-14 16:49:59

+0

@WesDec:挖掘GLX版本并编辑答案。 – genpfault 2011-01-14 17:26:48

要看什么创造你的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