Qt & OpenGL OS X:山狮上的 GLSL 着色器版本只有 120

Posted

技术标签:

【中文标题】Qt & OpenGL OS X:山狮上的 GLSL 着色器版本只有 120【英文标题】:Qt & OpenGL OS X: GLSL shader version only 120 on Mountain Lion 【发布时间】:2013-10-09 16:34:44 【问题描述】:

我正在尝试按照 arcsynthesis 教程将一些代码从固定函数 OpenGL 移动到 GLSL 着色器。首先,我遇到了版本 330 不可用的问题,在快速搜索之后似乎很常见,但建议是 150 应该可以正常工作。但是,除了 120 之外,没有其他可用的 GLSL 着色器版本,这对于 10.8.4 上的 2013 Macbook Air 是否正常?还是 OS X 下 OpenGL + Qt 5 的组合有什么奇怪的地方?

编辑:https://developer.apple.com/library/ios/samplecode/GLEssentials/Introduction/Intro.html 如果我在那里构建示例应用程序,我可以使用 140 和 150(未尝试 330,因为它需要着色器重写)。有谁知道这是否是与 OpenGL、Qt5 和 OS X 相关的特定问题?

【问题讨论】:

如果你想使用#version 150,请确保你正在创建一个核心上下文。 是的,我只是在另一个链接上偶然发现的。 【参考方案1】:

所以:

QGLFormat glFormat;
glFormat.setVersion(3, 2);
glFormat.setProfile(QGLFormat::CoreProfile);

// Set the default GL format to OpenGL 3.2 Core
QGLFormat::setDefaultFormat(glFormat);

这是它工作所需要的,这在文档中并不明显。那将给您 150。如果您将 glFormat.setVersion(3, 2) 更改为 3, 3 它似乎提供版本 330,但在我做更多工作之前我不知道这会有多可靠。

【讨论】:

3, 3 在 OS X 10.8 上应该给出完全未定义的结果,因为它只实现了 OpenGL 3.2 核心。您实际上不需要核心配置文件上下文即可在大多数平台上使用 GLSL 150,OS X 非常繁琐——您要么获得 3.2 核心,要么获得 2.1,中间没有任何东西(无论如何在 OS X 10.7/8 中)。跨度> 是的,我以为我会得到完全未定义的结果,结果证明它有效。请注意,我不知道它在我的 Macbook Air 上的可移植性,或者我是否会使用 3.3 的特定功能并且它会爆炸,但 location 部分工作得很好。非常奇怪!

以上是关于Qt & OpenGL OS X:山狮上的 GLSL 着色器版本只有 120的主要内容,如果未能解决你的问题,请参考以下文章

没有共享窗口的山狮上的 NSSharingService

在 Mac OS 山狮上设置 Subversion 服务器(可以通过浏览器访问,但无法从 subversion 签出)[关闭]

OS X 上的 OpenGL 版本支持

在 OS X 上的 Qt 4.8.6 中更改 QGLWidgets 的 OpenGL 上下文版本

山狮中没有调用键盘事件

Mac上的Opencv包含错误