在 OSX 上链接 OpenGL 框架
Posted
技术标签:
【中文标题】在 OSX 上链接 OpenGL 框架【英文标题】:Linking OpenGL framework on OSX 【发布时间】:2015-06-16 08:10:54 【问题描述】:我有一个运行 Yosemite 并支持 OpenGL 4.x 的 mac,但是每当我使用“-lSDL2 -framework OpenGL”标志编译 c++ 项目时,它会自动使用安装在 /System/Library/Frameworks 下的 OpenGL 1.20。正确的版本安装在 /Applications/XCode.app/... 的长路径中 有没有办法让 gcc 编译器正确选择 OpenGL 4.x 版本而不是旧版本?
编辑: 似乎哪个链接可能无关紧要,它仍然使用不正确的版本。当“SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);”行时,它似乎使用了正确的版本。被添加。但是它仍然说不支持 GLSL 版本 #130。所以这可能不是问题。
【问题讨论】:
按照forums.macrumors.com/threads/… 的建议,我发现添加 -F"path" -framework OpenGL 添加了明显正确的路径,但是尽管我的代码请求更新版本,但它仍会加载旧版本的 OpenGL: "SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);" 输出:=== OpenGL 实现 === 供应商:Intel Inc. GL 版本:4.1 INTEL-10.6.20 GL 版本(严格):4.1 GLSL 版本:4.10 错误:0:1:' ' : 不支持版本 '130' 错误: 0:2: '' : #version required and missing. 【参考方案1】:您可以使用 -isysroot
选项来指定特定的 SDK 位置。例如:
clang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk ...
这将告诉编译器使用此特定 SDK 版本中的所有头文件、库等。
【讨论】:
【参考方案2】:我知道这个答案很晚,但它可能对其他人有所帮助,
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
此行仅指定正在使用的配置文件,您应该通过将主要和次要版本确定为下两行来明确使用 OpenGL。
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); // 确定你的 Maj 版本 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); // 确定你的 Min 版本
也在 GLSL 中使用:
#version 320 core // 通过放置 Major Minor 0 来使用您的版本而不是 320
如果您使用的是 GLFW,如果您在 MAC 中,请添加此行:
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
【讨论】:
以上是关于在 OSX 上链接 OpenGL 框架的主要内容,如果未能解决你的问题,请参考以下文章
当 OSX 不再支持 OpenGL 时,SDL 是不是仍会正式支持 OSX?