在Mac OSX El Capitan上使用LWJGL实现OpenGL 3.3

3

我目前正在尝试在我的Macbook Pro 2014年中期使用LWJGL 3创建OpenGL 3.3上下文。我的源代码以初始化窗口的方式如下:

if (!glfwInit()) {
    Logger.addError("GLFW", "init failed");
}

glfwDefaultWindowHints();

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);           
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_CORE_PROFILE, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

// glfwWindowHint(GLFW_SAMPLES, 2);

ID = glfwCreateWindow(width, height, title, 0, 0);
if (ID == 0) {
    Logger.addError("GLFW", "window creation failed");
}

遗憾的是,GLFW无法创建高于2.1版本的窗口,这是在省略窗口提示时glGetString(GL_VERSION)返回的版本...
我已经阅读了所有“重复”的问题,但是正如您所看到的,我已经请求核心配置文件和向前兼容性。此外,我安装了XCode并拥有最新版本的操作系统。你们还有其他建议吗?或者我的理解有严重错误吗? 提前致谢...
请注意,LWJGL 3中没有"GLFW_OPENGL_PROFILE"标志,因此我无法从官方GLFW入门页面1:1复制代码。在Windows上将"GLFW_OPENGL_CORE_PROFILE"标志设置为true可以工作,因此这不可能是造成麻烦的错误...

你确定你的GPU支持核心OpenGL吗? - Shiro
你使用的是哪个版本的OS X?早期版本只支持OpenGL 2.1及以下。 - javac
就像我之前所说的一样:我使用的是一台相当新的2014年中期MacBook Pro 13英寸Retina,配备最新版本的OSX El Capitan。根据苹果公司的说法,它应该支持OpenGL高达4.1版本,但我无法弄清楚原因... - Jonas Linssen
1个回答

5

您设置核心配置窗口提示的方式是错误的。请改用以下方式:

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

根据GLFW文档:

GLFW_OPENGL_PROFILE指定创建上下文的OpenGL版本。可能的值为GLFW_OPENGL_CORE_PROFILEGLFW_OPENGL_COMPAT_PROFILE,或GLFW_OPENGL_ANY_PROFILE以不请求特定配置文件。如果要请求低于3.2的OpenGL版本,则必须使用GLFW_OPENGL_ANY_PROFILE。如果请求OpenGL ES,则此提示将被忽略。


你可以纠正我,但是在LWJGL中没有GLFW_OPENGL_PROFILE标志...这就是我所说的无法将GLFW文档1:1复制的意思。 - Jonas Linssen
奇怪,它在 JavaDoc 中已经包含了。你使用的是官方的LWJGL 3.0.0版本吗? - javac
尝试按照LWJGL 3迁移指南中描述的方式设置GLFW错误回调函数。 - javac
非常抱歉。你是100%正确的。我以为通过阅读所有文档和类似的问题,我已经做好了功课,但是没有意识到我错误地初始化了窗口,因为它在Windows上总是正常工作。我找不到“GLFW_OPENGL_PROFILE”标志的原因就像这样简单和令人尴尬:而不是使用“import ... GLFW.*;” Eclipse将其更改为单独的导入。我没有注意到这一点,并认为缺少标志,因为自动完成没有突出显示它...再次:我真的很抱歉所有这些,并非常感谢你的帮助。非常感谢! - Jonas Linssen
@PrudiiArca 没问题,这种情况发生在我们最优秀的人身上。 - javac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接