着色语言是专门用于编写着色器的,常见的着色语言有DirectX的HLSL(High Level Shading Language)、OpenGL的GLSL(OpenGL Shading Language)以及NVIDIA的CG(C for Graphic)。
HLSL、GLSL、CG都是“高级”语言,但这种高级是相对于汇编语言来说的,而不是像C#相对于C的高级那样。这些语言会被编译成与机器无关的汇编语言,也被称为中间语言。这些中间语言再交给显卡驱动来翻译成真正的机器语言,即GPU可以理解的语言。
- GLSL的优点在于它的跨平台性,它可以在Windows、Linux、Mac甚至移动平台等多种平台上工作,但这种跨平台性是由于OpenGL没有提供着色器编译器,而是由显卡驱动来完成着色器的编译工作。即GLSL是依赖硬件,而非操作系统层级的。但这也意味着GLSL的编译结果将取决于硬件供应商,这可能造成编译结果不一致的情况。
- HLSL是由微软控制着着色器的编译,就算使用了不同的硬件,同一个着色器的编译结果也是一样的。但支持HSLS的平台相对较少,几乎完全是微软自己的产品,如Windows、Xbox 360、PS3等。这是因为在其他平台上没有可以编译HSLS的编译器。
- CG则是真正意义上的跨平台。它会根据平台的不同,编译成相应的中间语言。CG语言的跨平台性很大原因取决于与微软的合作哦,这也导致CG语言的语法与HSLS非常像,CG语言可以无缝移植成HSLS代码。但缺点是可能无法完全发挥出OpenGL的最新特性。