心不是'有可能在Macbok Pro 2015中期使用glfw3运行OpenGL 3.0吗?

时间:2016-12-13 11:30:16

标签: macos opengl glfw

我想在Macbook Pro 2015 mid(Intel Iris Pro Graphics)上运行OpenGL 3.0或OpenGL ES。

当我在下面指定TEXT时,会发生错误并停止运行。

glfwWindowHint

错误是:

// Initialise GLFW
if( !glfwInit() ) {
    fprintf( stderr, "Failed to initialize GLFW\n" );
    getchar();
    return -1;
}

glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

你知道怎么用glfw3运行OpenGL 3.0吗?

2 个答案:

答案 0 :(得分:3)

我想对接受的答案稍微提一下,并尝试回答你的实际问题:

  

你知道怎么用glfw3运行OpenGL 3.0吗?

不能。因为OSX根本没有实现它。

OSX所实现的是现代OpenGL的核心配置文件,它是用OpenGL 3.2 发明的。此外,OSX还将OpenGL 2.1实现为 legacy OpenGL,以确保与现有应用程序的兼容性。

由于OpenGL 3.2核心配置文件的更改不向后兼容,因此添加了一些机制,以便应用程序可以请求特定的GL版本和配置文件。对这些配置文件一无所知的旧版应用程序以及现代GL的不兼容更改将会像往常一样请求GL上下文 - 最终将在OSX上最终获得GL 2.1。

如果要在OSX上使用现代GL,则必须明确请求(转发兼容)核心配置文件(并且根据规范,实现者只需要实现核心配置文件,兼容性配置文件是可选的,因此OSX符合GL规范)。 GLFW可以为您做到这一点,但是:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

不可能以有意义的方式工作。您正在请求一个甚至不存在的OpenGL 3.0核心配置文件 。在引入配置文件之前请求GL版本时。只会忽略配置文件请求,并且您将获得至少所请求版本的GL上下文,或者更高版本的,它与您请求的版本兼容。由于OSX的传统GL无法满足3.0,并且由于现代3.2核心与3.0不兼容,因此根本没有GL上下文......

您要么必须请求某些< = 2.1,才能获得旧版上下文,或者您必须请求至少3.2核心(+ forwad兼容性)才能在OSX上获得现代OpenGL。

答案 1 :(得分:2)

可能是您定位的特定版本。有什么理由不以3.3为目标?

我使用这些窗口提示在我的MacBook Pro(2014年末,也是Iris Pro)上运行GLFW3就好了:

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);