更改默认的 OpenGL 上下文配置文件版本

Changing default OpenGL context profile version

要创建配置文件版本为 3.2 的 OpenGL 上下文,我需要在创建上下文时将属性添加到像素格式:

...,
NSOpenGLPFAOpenGLProfile, (NSOpenGLPixelFormatAttribute) NSOpenGLProfileVersion3_2Core,
...,

有没有办法(环境变量、全局变量、在创建 NSOpenGLPixelFormat 之前调用的函数,...)更改默认的 OpenGL 配置文件版本,因为没有指定此类属性。它默认为 OS X 10.10 上的旧版本。我正在尝试将依赖较新 OpenGL 功能的代码与设置 OpenGL 上下文且无法更改参数的框架 (ROOT) 集成。

有没有办法在设置 OpenGL 上下文后更改其像素格式属性?

与 OpenGL 上下文关联的像素格式(此处的正确术语是 "default framebuffer")始终不可变。 OpenGL 本身并不控制或指示这一点,实际上是 window 系统 API(例如 WGL、GLX、EGL、NSOpenGL)强加了这一限制。

我看到解决这个特定问题的唯一方法是,如果您创建自己的屏幕外(核心 3.2)上下文,与 ROOT 创建的遗留(2.1)上下文共享资源。如果 OS X 实际上允许您执行此上下文共享(这是不确定的,因为这两个上下文可能算作不同的渲染器),您可以在核心上下文中绘制一个渲染缓冲区对象,然后将该渲染缓冲区 blit 到您的旧版中使用 glBlitFramebuffer (...).

的上下文

请注意,帧缓冲区对象不是上下文可共享资源。您最终在此示例中共享的是实际图像附件(Renderbuffer 或 Texture),这意味着您将必须在两种上下文中维护具有相同附件的单独 FBO。

glutInitContextVersion (3, 3);

可以设置openGL版本为3.3,你可以随意更改版本。