Introduction
在DirectX中,编写可编程Shader的时候所使用的语言为High Level Shading Language(HLSL),它是由C/C++衍生出来的一种语言,具有一些特性,它的语言风格与C语言非常相似,但是又有很大的不同。最重要的不同之处在于在HLSL中没有指针、没有C++中的template、不支持动态的内存分配。HLSL语言写出来的程序,都要在C/C++中提前编译成ByteCode,再绑定到流水线上。
Language Basics
基本的数据类型:
bool:32-bit 整数,包含逻辑true、false信息。
int:32-bit 有符号整数。
uint:32-bit 无符号整数。
half:16-bit 浮点数,注意在D3D11中,half的存在仅仅是为了兼容以往的half的使用,在D3D11的Shader中统一会将half转化为float。
float:32-bit 浮点数。
double:64-bit 浮点数。
Vectors:
Vector支持有1-4个成员,每个成员都是相同的类型。例如可以这样声明Vector:
vector<float,4> floatVector;
vector<int,2> intVector;
这样写是比较麻烦的,可以简化为:
float4 floatVector;
int2 intVector;
Vector的初始化方式:
float2 vec0 = { 0.0f, 1.0f };
float3 vec1 = float3( 0.0f , 0.1f , 0.2f );
float4 vec2 = float4( vec1 , 1.0f );
float4 vec3 = 1.0f; //将4个成员全部复制为1.0f
对Vector成员的访问:
Vector的四维分别用x、y、z、w或者r、g、b、a表示。
float4 floatVector