我正在开发一个游戏引擎,它已经有了很大的发展。因为引擎也需要在 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 让APPLE使用需要的东西。glBeginTransformFeedback和glBeginTransformFeedbackEXT同样的问题。
但是两者都接受glProgramParameteriEXT,我不需要区分...
我知道只有转换反馈才有问题,但是……这到底是怎么回事?
我以为我了解 OpenGL 扩展的工作原理,但我开始失去这种理解。
到了这样的地步,我认为当我在另一个 windows 系统或另一个 mac 系统或另一个 linux 系统上运行代码时,我会遇到新的问题,因为有不同的图形适配器或其他东西。
谁能帮我理解这一点?我已经阅读了关于扩展的 OpenGL 手册,所以我遗漏了一些明显的东西。如何确保我的代码始终有效?
编辑:通过从 Mac 版本中完全删除 GLEW 并完全使用 Mac 自己的 OpenGL 3.2 实现,所有命名都是正常的,我可以从我的着色器中完全删除#extension GL_EXT_gpu_shader4 : enable 。现在唯一让我担心的是,对于几何着色器,我需要似乎不存在的函数glProgramParameteri ,但glProgramParameteriEXT确实存在。出于某种原因,此功能也适用于 Windows。为什么?我可以确定它适用于所有系统/硬件吗?