在OSX 10.9(Mavericks)上获取GLSL 330上下文

4
我在这里看到一个类似的问题: OpenGL 4.1(?) under Mavericks,但是那个人好像依赖于glut,所以那个解决方案不适用。
我正在使用C++GLEWGLFW,在OSX 10.9(Mavericks)上,使用NVidia GeForce 650进行开发。
没有使用xcode - 只是使用了一个非常基本的makefile。
无论如何- 我有这5行代码:
window = glfwCreateWindow(640,480,"hello world",NULL,NULL);
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
glewInit();

printf("shader lang: %s\n",glGetString(GL_SHADING_LANGUAGE_VERSION));

并且它会打印出

shader lang: 1.2

我假设设置glewExperimental应该正确处理获取核心上下文?(/另一个人在另一个线程中谈论的东西)。
还需要做什么才能启用最新的着色器版本?
附注- 我的完整代码在这里,包括makefile: https://github.com/Phildo/openglexp ,但我不确定它有多大用处。

1
你使用了哪些glfw窗口提示?在OS X上,你需要主版本3、次版本2、核心和向前兼容。 - Andon M. Coleman
@AndonM.Coleman 非常感谢!好奇问一下-你是在哪里/怎么找到这些信息的?我已经到处都找了... - Phildo
2
GLFW 据我所知没有记录这个。我知道这些信息是因为我在我的工作中使用低级别的 OpenGL 上下文管理 API (CGL / NSOpenGL)。Apple 在各个地方都有文件记载,例如此处 - Andon M. Coleman
2个回答

8

我以前从未使用过GLFW,但根据API文档和我对低级别OS X GL上下文管理的深入经验,以下代码应该可以解决您的问题:

glfwInit       ();

glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_PROFILE,        GLFW_OPENGL_CORE_PROFILE);

在调用 glfwCreateWindow (...) 之前,请确保您调用以下内容:


你还需要添加这一行代码:glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);。参考链接:http://www.glfw.org/docs/latest/compat.html#compat_osx - Leo
糟糕,可能是因为空格的原因我没有注意到它。 - Leo

0
对于其他人尝试让它工作的情况 - 上面的答案是正确的。您需要添加所有上述glfwWindowHints。然而,这对我来说并不立即起作用,直到我将提示移动到glfwInit()调用之后和glfwCreateWindow()之前。感谢大家的帮助。

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