首先,OpenGL着色器是如何编译的?它们是在CPU上编译还是GPU上编译,还是实现方式各不相同?不同的供应商是否有不同的二进制输出;如果有,是否可能在另一种GPU类型上交叉编译二进制文件?我正在开发一款游戏,计划在Intel GFX芯片、ATI卡和NVidia卡上运行。我希望只发布着色器的二进制部分,而无需在客户端计算机上编译源代码。这可行吗?着色器编译的过程是怎样的?
首先,OpenGL着色器是如何编译的?它们是在CPU上编译还是GPU上编译,还是实现方式各不相同?不同的供应商是否有不同的二进制输出;如果有,是否可能在另一种GPU类型上交叉编译二进制文件?我正在开发一款游戏,计划在Intel GFX芯片、ATI卡和NVidia卡上运行。我希望只发布着色器的二进制部分,而无需在客户端计算机上编译源代码。这可行吗?着色器编译的过程是怎样的?
通常情况下,编译过程在 CPU 上进行。然而,输出结果不仅取决于供应商,还与型号有关。因此,着色器必须在用户的计算机上重新编译,以便与用户可能使用的任何 GPU 型号兼容(包括在编写游戏时可能不存在的 GPU 型号!)