是否有编译器标志或强制OpenGL核心配置文件的其他方式?当我使用glRotatef之类的弃用函数时,我想得到一个错误。
EDIT1:我正在使用Linux,但是,我也有兴趣了解如何在Windows中执行此操作
EDIT2:我宁愿在编译时遇到错误,但运行时错误也没问题。
答案 0 :(得分:9)
您可以使用gl3.h
代替gl.h
来编译代码。
答案 1 :(得分:8)
使用WGL_CONTEXT_CORE_PROFILE_BIT_ARB
尝试wglCreateContextAttribsARB()。
或glXCreateContextAttribsARB与GLX_CONTEXT_CORE_PROFILE_BIT_ARB
。
您可能会发现this example可用作测试平台。
答案 2 :(得分:4)
取决于创建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上下文,请查看其参考手册以了解类似的功能。
顺便说一句:
我相信在编译时不可能出错 - 你的编译器无法知道你的请求后会收到什么样的OpenGL上下文(如果有的话)。确保您不使用版本不正确功能的正确方法是测试glGetError()
。
另外,如果您为Windows编译,我建议使用gl3w
扩展包装。
答案 3 :(得分:0)
我找到了另一种使用非官方OpenGL软件开发工具包的方法:
http://glsdk.sourceforge.net/docs/html/index.html
使用' GL Load'组件可以加载OpenGL的核心配置文件,并删除OpenGL 3.1或更高版本的兼容性枚举和函数。这里有一个简短的指南:
https://www.opengl.org/wiki/OpenGL_Loading_Library#Unofficial_OpenGL_SDK