仅强制使用OpenGL核心配置文件

Wes*_*Dec 17 opengl

是否有编译器标志或强制OpenGL核心配置文件的其他方式?当我使用glRotatef之类的弃用函数时,我想得到一个错误.

编辑1:我正在使用Linux,但是,我也有兴趣了解如何在Windows中执行此操作

EDIT2:我宁愿在编译时遇到错误,但运行时错误也没问题.

rot*_*lup 9

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

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

  • 关键是如果你包含一个只声明GL3核心函数的头文件,你可以在代码_at编译时间中发现'非核心'函数,而不是在运行时.这实际上与创建的GL上下文无关. (5认同)

gen*_*ult 8

尝试wglCreateContextAttribsARB()WGL_CONTEXT_CORE_PROFILE_BIT_ARB.

glXCreateContextAttribsARBGLX_CONTEXT_CORE_PROFILE_BIT_ARB.

您可能会发现此示例可用作测试平台.


Kos*_*Kos 5

取决于创建 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
Run Code Online (Sandbox Code Playgroud)

请注意,如果您在现代硬件/驱动程序上请求 3.0 之前的 GL 上下文,您可能会在兼容模式下收到最新的可能上下文。检查您的 GPU 返回的内容glGetString(GL_VERSION)以确保。

如果您使用其他 API 来创建 OpenGL 上下文,请查看其参考手册中的类似功能。


顺便说一句:我相信在编译时出现错误是不可能的 - 您的编译器无法知道在您的请求(如果有的话)之后您将收到什么 OpenGL 上下文。确保您没有使用过版本功能的正确方法是测试glGetError().

另外,gl3w如果您为 Windows 编译,我建议使用扩展包装器。