下面对微软所给的HLSL官方文档进行简单梳理,将其基本语法总结如下。
1 数据类型
1.1 缓存(Buffer)
用法:Buffer Name
示例:Buffer g_Buffer;
说明:Type可以为标量、向量或一些矩阵类型
1.2 标量
bool:布尔值,true或false。
int: 32位有符号整型。
uint: 32位无符号整型。
dword: 32位无符号整型。
half: 16位浮点型。该类型只是为了保持语言兼容性,Direct3D 10将所有half都映射为float型,该类型不能用作标准全局变量。
float:32位浮点型。
fixed: 11位低精度浮点数。
- double: 64位浮点型。
1.3 向量类型
用法:TypeNumber Name 或 vector
1.4 矩阵类型
用法:TypeNumberxNumber Name 或 matrix
1.5 采样器类型(Sampler)
用法:
Direct3D 9:
sampler Name = SamplerType{ Texture = ; [state_name = state_value;] … };
Direct3D 10之后:
SamplerType Name[Index]{ [state_name = state_value;] … };
示例:
Direct3D 9: sampler MeshTextureSampler = sampler_state { Texture = <g_MeshTexture>; MipFilter = LINEAR; MinFilter = LINEAR; MagFilter = LINEAR; }; Direct3D 10之后: SamplerState MeshTextureSampler { Filter = MIN_MAG_MIP_LINEAR; AddressU = Wrap; AddressV = Wrap; };说明:
sampler:只有Direct3D 9需要。Name:采样器名称
[Index]:Direct3D 10后需要,定义数据长度
SamplerType:采样器类型,可为: sampler, sampler1D, sampler2D, sampler3D, samplerCUBE, sampler_state, SamplerState,SamplerComparisonState(仅Direct3D 10之后支持)。
Texture = :纹理变量。
state_name = state_value:可选状态设置,所有状态赋值必须出现在状态块中(大括号中),由分号分隔。
1.6 着色器类型(Shader)
用法:
Direct3D 10之后: SetXXXShader Compile( ShaderTarget, ShaderFunction );
Direct3D 9之前: XXXShader = compile ShaderTarget ShaderFunction(…);
示例:
// Direct3D 10 technique10 Render { pass P0 { SetVertexShader( CompileShader( vs_4_0, VS() ) ); SetGeometryShader( NULL ); SetPixelShader( CompileShader( ps_4_0, PS() ) ); } } // Direct3D 9 technique RenderSceneWithTexture1Light { pass P0 { VertexShader = compile vs_2_0 RenderSceneVS( 1, true, true ); PixelShader = compile ps_2_0 RenderScenePS( true ); } }说明:
SetXXXShader: Direct3Dy调用底层API创建Shader对象,可为SetPixelShader、SetGeometryShader 或SetVertexShader。(Direct3D 9中XXXShader可为SetPixelShader或SetVertexShader)ShaderTarget: 用于编译的shader模型:vs

最低0.47元/天 解锁文章
253

被折叠的 条评论
为什么被折叠?



