在 Mac OS X 10.9 中使用 GLFW 创建 OpenGL 3.3 上下文

Posted

技术标签:

【中文标题】在 Mac OS X 10.9 中使用 GLFW 创建 OpenGL 3.3 上下文【英文标题】:Creating OpenGL 3.3 Context with GLFW in Mac OS X 10.9 【发布时间】:2014-03-06 02:48:02 【问题描述】:

我有以下代码:

void error_callback(int error, const char* description)

    fputs(description, stderr);


int main( void )


// Initialise GLFW
if( !glfwInit() )

    fprintf( stderr, "Failed to initialize GLFW\n" );
    return -1;


glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

// Open a window and create its OpenGL context
glfwSetErrorCallback(error_callback);
window = glfwCreateWindow( 1024, 768, "Tutorial 16 - Shadows", NULL, NULL);
if( window == NULL )

    //fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" );
    glfwTerminate();
    return -1;

glfwMakeContextCurrent(window);

// Initialize GLEW
GLenum err;
glewExperimental = GL_TRUE; // Needed for core profile
if ((err = glewInit()) != GLEW_OK) 
    std::cout << glewGetErrorString(err) << std::endl;
    return -1;


...


问题是我收到以下消息:https://github.com/glfw/glfw/blob/master/src/nsgl_context.m#L101

事实上,如果不设置前向兼容标志(在 Mac OS X 中),GLFW 不会给我一个 OpenGL 3+ 上下文。

这是为什么呢?有没有办法在没有前向兼容性的情况下在 Mac OS X 10.9 中获取 OpenGL 3+ 上下文?是 OS X 的 OpenGL 实现的限制还是 GLFW 的问题?

【问题讨论】:

【参考方案1】:

这实际上是正确的行为,如OpenGL Programming Guide for Mac 中所定义。

Mac OS X 根本不支持 OpenGL 3.x/4.x 的兼容性配置文件,因此您必须请求核心(或向前兼容)上下文。这意味着在 Mac 上针对 OpenGL 3.x/4.x 进行编程时,您将无法使用任何已弃用的函数。

在 Mac OS X 上请求 3.x/4.x 上下文时,可能值得在 GLFW issue tracker 中提出功能请求以隐式设置核心配置文件标志。

【讨论】:

该请求将被拒绝。返回的上下文始终是前向兼容的和核心配置文件,因为这是 OS X 支持的。 GLFW 不会破坏那些hard constraints。这样做会破坏应用程序的可移植性。

以上是关于在 Mac OS X 10.9 中使用 GLFW 创建 OpenGL 3.3 上下文的主要内容,如果未能解决你的问题,请参考以下文章

使用自制软件在 Mac OS X 10.9 中构建 OpenCV_Python

在 OS X 10.9 (Mavericks) 上安装 Java

Mac OS X 10.9 - 设置永久环境变量

如何检测 NaN 在哪里传递给 Mac OS X 10.9 上的 CoreGraphics API

如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3

在 Mac OS X 10.9 上安装 PyLucene 时在符号索引中找不到 Atom