OpenGL GLSL 着色器版本
OpenGL GLSL shader versions
最近我在不同计算机上的 GLSL 着色器版本遇到了一些问题。我知道每个 GPU 都可以对着色器提供不同的支持,但我不知道如何制作一个适用于所有 GPU 的着色器。如果我在我的 PC(GPU - AMD HD7770)上写一些着色器,我什至不必指定版本,但在一些旧的 PC 或带有 nVidia GPU 的 PS 上,它对版本更严格,所以我必须指定GPU 支持的版本。
现在真正的问题来了。如果我在我的 PC 上指定例如版本 330,它可以正常工作,但在其他应该支持 330 版本的 PC 上它似乎不起作用。所以我必须重写它并使其工作。如果我切换回我的 PC,它有更新的 GPU,它也不起作用。
有谁知道,我必须如何编写着色器才能在所有 GPU 上运行?
编写可移植的 OpenGL 代码并不像您想象的那么简单。
nVidia drivers 是宽容的。 你可以在 nVidia drivers 上摆脱很多你可以在其他系统上逃脱。
很容易不小心使用了额外的功能。例如,我写了一个针对 3.2 核心配置文件的程序,但使用 GL_INT_2_10_10_10_REV
作为顶点格式。 GL_INT_2_10_10_10_REV
符号在 3.2 中定义,但直到 3.3 才允许将其作为顶点格式,并且您不会因意外使用它而收到任何错误消息。
很多人 运行 老 drivers. 根据 Steam 调查,2013 年,38% 的客户使用OpenGL 3.x drivers 没有 3.3 支持,即使支持 3.0 的硬件应该支持 3.3。
你总是要考试的。这就是不幸的现实。
我的建议是:
始终以核心配置文件为目标。
始终指定着色器语言版本。
检查driver版本,如果太旧则中止。
如果可以,请使用 OpenGL headers/bindings,它只显示目标版本中的符号。
获取目标版本规范的副本,并将其用作参考而不是 OpenGL 手册页。
编写您的代码,使其在 OpenGL ES 上也能 运行,如果可行的话。
在不同的系统上测试。一台PC可能不会削减它。如果您可以使用来自不同供应商的显卡(不要忘记英特尔的集成显卡)来挖掘第二台 PC,那就更好了。您可能花几百美元就可以买到 OpenGL 3.x 桌面,或者如果您想省钱,请使用朋友的计算机进行一些快速测试。您也可以购买第二张视频卡(支持 OpenGL 4.x 的 low-end 卡低于 40 美元),换出它们时要小心。
商业游戏 运行 在各种系统上的主要原因是它们有 QA 预算。如果你能负担得起 QA 团队,那就去做吧!如果您没有 QA 团队,那么您将不得不同时进行 QA 和开发 - 两项工作的工作量更大,但这是您为消除错误付出的代价。
最近我在不同计算机上的 GLSL 着色器版本遇到了一些问题。我知道每个 GPU 都可以对着色器提供不同的支持,但我不知道如何制作一个适用于所有 GPU 的着色器。如果我在我的 PC(GPU - AMD HD7770)上写一些着色器,我什至不必指定版本,但在一些旧的 PC 或带有 nVidia GPU 的 PS 上,它对版本更严格,所以我必须指定GPU 支持的版本。
现在真正的问题来了。如果我在我的 PC 上指定例如版本 330,它可以正常工作,但在其他应该支持 330 版本的 PC 上它似乎不起作用。所以我必须重写它并使其工作。如果我切换回我的 PC,它有更新的 GPU,它也不起作用。
有谁知道,我必须如何编写着色器才能在所有 GPU 上运行?
编写可移植的 OpenGL 代码并不像您想象的那么简单。
nVidia drivers 是宽容的。 你可以在 nVidia drivers 上摆脱很多你可以在其他系统上逃脱。
很容易不小心使用了额外的功能。例如,我写了一个针对 3.2 核心配置文件的程序,但使用
GL_INT_2_10_10_10_REV
作为顶点格式。GL_INT_2_10_10_10_REV
符号在 3.2 中定义,但直到 3.3 才允许将其作为顶点格式,并且您不会因意外使用它而收到任何错误消息。很多人 运行 老 drivers. 根据 Steam 调查,2013 年,38% 的客户使用OpenGL 3.x drivers 没有 3.3 支持,即使支持 3.0 的硬件应该支持 3.3。
你总是要考试的。这就是不幸的现实。
我的建议是:
始终以核心配置文件为目标。
始终指定着色器语言版本。
检查driver版本,如果太旧则中止。
如果可以,请使用 OpenGL headers/bindings,它只显示目标版本中的符号。
获取目标版本规范的副本,并将其用作参考而不是 OpenGL 手册页。
编写您的代码,使其在 OpenGL ES 上也能 运行,如果可行的话。
在不同的系统上测试。一台PC可能不会削减它。如果您可以使用来自不同供应商的显卡(不要忘记英特尔的集成显卡)来挖掘第二台 PC,那就更好了。您可能花几百美元就可以买到 OpenGL 3.x 桌面,或者如果您想省钱,请使用朋友的计算机进行一些快速测试。您也可以购买第二张视频卡(支持 OpenGL 4.x 的 low-end 卡低于 40 美元),换出它们时要小心。
商业游戏 运行 在各种系统上的主要原因是它们有 QA 预算。如果你能负担得起 QA 团队,那就去做吧!如果您没有 QA 团队,那么您将不得不同时进行 QA 和开发 - 两项工作的工作量更大,但这是您为消除错误付出的代价。