Semantics究竟是什么呢?简单来说,它是描述shader中变量的原数据,用来表示某个变量的语义。
Semantics有什么用呢?Shader程序使用Semantics作为标记,实现数据从CPU到GPU的绑定。
对于构建复杂Effect系统来说,Semantics作为DirectX / XNA和shader之间传输数据的纽带,有相当重要的作用。
在Semantics出现之前,shader程序员常常直接使用寄存器名来绑定数据。这样做有两个缺点,首先,编译器无法对代码进行优化,其次,维护移植起来也相当不方便。
Semantics隐藏了寄存器的复杂性,所有JCQ的分配都由编译器来为你处理,同时,对外提供了一个统一的接口。
DX和HLSL的连接,HLSL和编译器-寄存器的连接。
语法:
[ Modifiers] ParameterType ParameterName [ : Semantic] = [ Initializers]
比如:
float4x4 WorldMatrix : WORLD;
冒号前面的部分,声明了一个变量myWorldMatrix,你也许希望用它来表示世界坐标变换。但是,编译器对此一无所知,只会把它当作一个普通的float4x4变量来对待。然而,添加了冒号以及标准Semantics WORLD之后,无论变量叫什么名字,编译器都会知道这个变量将被当作坐标变换矩阵来使用。注意,Semantics本身并不区分大小写,只是习惯上用大写表示。
语义:shader的明确含义的变量,含义包括位置啊,颜色啊等,这个东西作为shader对外(向上directx,向下编译器)的连接