Mac OS 10.8支持GLSL 3.30吗?

15

我正在跟随arcsynthesis的OpenGL 3.3教程,使用10.8 Mountain Lion。在构建项目时,它使用GLSL版本3.30编译和运行着色器。然而,在Mac OS 10.8的核心配置下,我不应该拥有GLSL 3.30支持,只有1.50(如图片中所示)。

有人能解释一下我是如何实现这种黑魔法的吗?


实际上,经过进一步的测试,它可以一直工作到GLSL 4.10。只有在尝试4.20时,它才无法编译着色器... - LiarWithFire
1
据我所知,layout(location = 0) 只包含在 GLSL 3.3 及以上版本中。 - LiarWithFire
2
我的猜测是Apple可能一直在进行一些基于编译器的升级,而无意中将它们留在了系统里。或者是编译器的较低级实现所编译的结果。你是否能得到GL 3.3特定函数指针,例如glQueryCounter(有一 个错误防止glVertexAttribDivisor正常工作,这将在SDK的下一个版本中修复)。 - Nicol Bolas
1
不,glQueryCounter不起作用——似乎只是GLSL升级了一些版本… - LiarWithFire
@LiarWithFire 这篇帖子有点旧了,但我正在尝试运行相同的教程。 你还在吗?如果是这样,你是如何在OS X上运行这些教程的?当我尝试使用freeglut时,我会遇到这个错误:https://dev59.com/UGfWa4cB1Zd3GeqPl_XR - Ricardo Sanchez-Saez
显示剩余2条评论
1个回答

8

OS X 10.8仍然只支持OpenGL 3.2,但是可以使用一些3.3的特性,如指定属性位置(#extension GL_ARB_explicit_attrib_location : enable)。着色器编译器接受高达4.10版本。他们可能为了兼容性而将其保留,或者(猜测)最初打算支持4.1版本。

这至少是我在10.8上使用几周后得出的结论。

编辑:看起来4.10版本的猜测是正确的。10.9-10.12支持高达4.10版本。我想他们想花费资源在Metal api上,而不是继续前进并实现计算着色器。


1
需要注意的是,如果#extension GL_ARB_explicit_attrib_location : enable实际起作用了,那么它是不符合规范的,因为OpenGL没有宣传GL_ARB_explicit_attrib_location。要么如此,要么是苹果的OpenGL扩展页面已经过时了。 - Nicol Bolas
1
是的。我可以验证这个扩展在10.7和10.8上都适用于ATI和Nvidia。当将延迟着色器移植到GLSL 1.5 / OS X时,不得不支持在片段着色器中指定输出位置(渲染到多个FBO附件),无意中发现了这一点。已经吃过亏,知道这一点有多重要,很高兴没有必须费力修复它。 - Grimmy

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