在 Unity 中,着色器程序是用 HLSL 语言的一个变种(也称为 Cg,但对于大部分实际使用情况,这两种语言没有区别)编写的。
目前,为了在不同平台之间实现最大程度的可移植性,请使用 DX9 风格的 HLSL 编写程序(例如,使用 DX9 风格的 sampler2D
和 tex2D
进行纹理采样,而不是使用 DX10 风格的 Texture2D
、SamplerState
和 tex.Sample
)。
在内部将使用不同的着色器编译器来编译着色器程序:
#pragma prefer_hlsl2glsl gles
In case you really need to identify which compiler is being used (to use HLSL syntax only supported by one compiler, or to work around a compiler bug), predefined shader macros can be used. For example, UNITY_COMPILER_HLSL
is set when compiling with HLSL compiler (for D3D or GLCore/GLES3/GLES platforms); and UNITY_COMPILER_HLSL2GLSL
when compiling via hlsl2glsl.