【问题标题】:Forcing OpenGL Core Profile Only仅强制 OpenGL 核心配置文件
【发布时间】:2011-06-09 05:53:15
【问题描述】:

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

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

EDIT2:我希望在编译时出错,但运行时错误也可以。

【问题讨论】:

  • 你在什么平台上?您的问题的答案取决于您使用什么链接到 OpenGL。

标签: opengl


【解决方案1】:

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

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

【讨论】:

  • 我试过这个,但它不起作用。我的意思是,当我使用已弃用的非核心配置文件函数进行编译时,我不会出错。我认为原因是我还包括 glx.h,而它又包括 gl.h。
  • 您可能已经尝试过的愚蠢技巧:尝试在包含 glx.h 之前发出 __#define __gl_h____ 以“防止”gl.h 被包含?
  • 标头对创建的 OpenGL 上下文版本没有影响。它们只是标题。
  • 重点是,如果你包含一个只声明 GL3 核心函数的头文件,你可以在在编译时在你的代码中发现“非核心”函数,而不是在运行。这确实与创建的 GL 上下文无关。
  • 但我认为你无法区分各种 OpenGL 3 版本。如果应用程序想要使用多个版本之一(即尝试 3.3 向前兼容,如果失败回退到 3.1,如果失败回退到 3.0),那么这种方法将无济于事。不过,为代码辅助提供尽可能少的 defs 仍然很好。
【解决方案2】:

试试wglCreateContextAttribsARB()WGL_CONTEXT_CORE_PROFILE_BIT_ARB

或者glXCreateContextAttribsARBGLX_CONTEXT_CORE_PROFILE_BIT_ARB

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

【讨论】:

  • 这仅适用于 Windows,不是吗?不幸的是,我目前无法访问 Windows 机器,所以我无法尝试。
  • 这似乎并不仅仅强制 OpenGL 核心配置文件。我将测试平台更改为包含 GLX_CONTEXT_CORE_PROFILE_BIT_ARB 并在第一个“sleep(1);”之后包含一个 glRotatef 调用打电话,我没有收到任何错误。
  • 这无济于事,因为核心配置文件位实际上是默认值。只要您不要求最低OpenGL版本,它就不会生效,也可以使用相同的功能进行设置。
【解决方案3】:

取决于创建 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 扩展包装器。

【讨论】:

    【解决方案4】:

    我找到了另一种使用非官方 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

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多