OpenGL着色器是在GPU还是CPU上编译的?不同GPU制造商的二进制输出有什么差异?

15

首先,OpenGL着色器是如何编译的?它们是在CPU上编译还是GPU上编译,还是实现方式各不相同?不同的供应商是否有不同的二进制输出;如果有,是否可能在另一种GPU类型上交叉编译二进制文件?我正在开发一款游戏,计划在Intel GFX芯片、ATI卡和NVidia卡上运行。我希望只发布着色器的二进制部分,而无需在客户端计算机上编译源代码。这可行吗?着色器编译的过程是怎样的?

1个回答

16

通常情况下,编译过程在 CPU 上进行。然而,输出结果不仅取决于供应商,还与型号有关。因此,着色器必须在用户的计算机上重新编译,以便与用户可能使用的任何 GPU 型号兼容(包括在编写游戏时可能不存在的 GPU 型号!)


这是大多数商业游戏的做法吗? - bbosak
2
可以尝试通过混淆着色器的内容(例如,加密以避免以明文形式显示,删除注释并重命名局部变量等)来使其不那么明显,但最终必须拥有该源代码。 - bdonlan

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