unity3d shader 预定义着色器预处理宏

时间:2016-03-29 16:32:40   收藏:0   阅读:2084

编译着色器程序时,Unity 会定义几个预处理宏。

 

目标平台

此外,当目标着色语言为 GLSL 时定义 SHADER_TARGET_GLSL(当定义了 SHADER_API_GLES 时总是为真;在使用了 #pragma glsl后,SHADER_API_OPENGL 可以为真)。

为“移动”平台 (iOS/Android) 进行编译时,为 SHADER_API_GLES 定义 SHADER_API_MOBILE;在为“桌面”(本地客户端)进行编译时不定义。

 

平台差异帮助

由于不是特别有前瞻性,因此不建议直接使用这些平台的宏。例如,如果您正在编写检查 D3D 的着色器,那么也许将来该检查应扩展到包括 D3D11。相反,Unity 定义了一些帮助宏(在 HLSLSupport.cginc 中)来对此提供 帮助。

 
 

阴影贴图宏

在不同的平台上,阴影贴图的声明和采样可能非常不同。因此 Unity 有几个宏可为此提供 帮助:

 

常量缓冲区宏

Direct3D 11 将所有着色器变量集合到“常量缓冲区”中。大多数 Unity 内置变量都已经集合了,但对于您自己的着色器变量而言,更理想的方法是根据期望的更新频率将其放入不同的常量缓冲区中。

为此,使用 CBUFFER_START(name) 和 CBUFFER_END 宏:

    CBUFFER_START(MyRarelyUpdatedVariables)    float4 _SomeGlobalValue;    CBUFFER_END
 

表面着色器通道标志

编译表面着色器时,着色器以产生用于不同通道照明的大量代码结束。编译每个通道时,定义下列宏之一:

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!