【发布时间】:2013-02-12 23:46:05
【问题描述】:
我正在开发一个游戏引擎,它已经有了很大的发展。因为引擎也需要在 mac 上工作,所以我仍在使用 OpenGL 3.2 和 GLSL 1.2 :-(。 我使用 GLEW,我认为它可以为我解决扩展问题。
编辑:同时,部分问题已得到解答 - 请在下一个编辑处继续阅读:
我总是能够让着色器在 windows 和 mac 上工作,有时我必须在 GLSL 代码中添加一行,如 #extension GL_EXT_gpu_shader4 : enable 以使其在 Mac 上工作。然后似乎我的 Windows 版本在编译相同的着色器时会发出警告,但它会起作用。
但自从我开始使用几何着色器以来,我的噩梦就开始了。出于某种原因,mac 期望我使用 #extension GL_EXT_gpu_shader4 : enable 而 windows 期望我使用 #extension GL_EXT_geometry_shader4 : enable。这使得创建独立于平台的着色器变得不那么明显。
另外,这更烦人: Windows 版本希望我使用:glTransformFeedbackVaryings,我认为 GLEW 会使其可用于 mac,但我明确需要使用 glTransformFeedbackVaryingsEXT,这在 Windows 上不起作用版本。所以我需要#ifdef for APPLE 来使用需要的东西。 glBeginTransformFeedback 和 glBeginTransformFeedbackEXT 的问题相同。
但两者都接受 glProgramParameteriEXT,我不需要区分...
我知道只有转换反馈才会有问题,但是……这是怎么回事?
我以为我了解 OpenGL 扩展的工作原理,但我开始失去这种理解。
到了这样的地步,我认为当我在另一个 windows 系统或另一个 mac 系统或另一个 linux 系统上运行代码时,我会遇到新的问题,因为有不同的图形适配器或其他东西。
谁能帮我理解这个?我已经阅读了关于扩展的 OpenGL 手册,所以我遗漏了一些明显的东西。如何确保我的代码始终有效?
编辑:通过从 Mac 版本中完全删除 GLEW 并完全使用 Mac 自己的 OpenGL 3.2 实现,所有命名都是正常的,我可以从我的着色器中完全删除 #extension GL_EXT_gpu_shader4 : enable。 现在唯一让我担心的是,对于几何着色器,我需要函数 glProgramParameteri 似乎不存在,但 glProgramParameteriEXT 确实存在。出于某种原因,此功能也适用于 Windows。为什么?我可以确定它适用于所有系统/硬件吗?
【问题讨论】:
-
Apple 通常有点落后,所以您可能只想查看官方支持的版本。 this 是在您提出问题之前发布的。
-
嗯,我认为该帖子对我没有帮助。我正在 OSX Lion 10.7.5 上开发,它是一个 AMD 图形适配器。但如果我理解正确的话,这些问题与苹果的糟糕实施有关吗? Steam 上的所有这些游戏是如何移植和运行的?
-
你为什么不使用 MacOSX 上可用的核心 OpenGL 3.2。
-
好吧,这很有意义!我认为 GLEW 也可以在 Mac 上完美运行,但我现在已经从 Mac 版本中完全删除了 GLEW,一切都与正常命名完美配合(除了 glProgramParameteriEXT 这也是我需要的 windows 功能,为什么会这样?)
-
更新了我关于从 GLEW 更改为原生 Mac 实现的帖子,以及我上面消息中的问题。