1.4 关键字、语句和强制转换
阅读此文表明您已同意文末的声明
1.4.1 关键字
为便于参考,这里给出一个HLSL定义的关键字列表:
asm |
bool |
compile |
const |
decl |
do |
double |
else |
extern |
false |
float |
for |
half |
if |
in |
inline |
inout |
int |
matrix |
out |
pass |
pixelshader |
return |
sampler |
shared |
static |
string |
struct |
technique |
texture |
true |
typedef |
uniform |
vector |
vertexshader |
void |
volatile |
while |
|
|
|
|
下面的集合显示了被保留并且未使用但是将来可能成为关键字的标识符:
auto |
break |
case |
catch |
char |
class |
const_cast |
continue |
default |
delete |
dynamic cast |
enum |
explicit |
friend |
goto |
long |
mutable |
namespace |
new |
operator |
private |
protected |
public |
register |
reinterpret_cast |
short |
signed |
sizeof |
static_cast |
switch |
template |
this |
throw |
try |
typename |
union |
unsigned |
using |
virtual |
|
|
|
1.4.2 基本程序流程
HLSL支持很多与C++相似的选择、重复、和一般程序流程语句。这些语句的语法和C++极为相似。
return语句:
return (expression);
if和if…else语句:
if( condition )
{
statement(s);
}
if( condition )
{
statement(s);
}
else
{
statement(s);
}
for语句:
for(initial; condition; increment)
{
statement(s);
}
while语句:
while( condition )
{
statement(s);
}
do…while语句:
do
{
statement(s);
}while( condition );
1.4.3 强制转换(casting)
HLSL支持一种非常自由的强制转换设计。HLSL中强制转换的语法和C程序语言中的一样。例如要把float转换到matrix,我们写:
float f = 5.0f;
matrix m = (matrix)f;
从本书的例子中,你就能推断出这个转换语法的意思。但是,如果想要得到更详细的受支持的转换的信息,那么在DirectX SDK里,Content(内容)标签页下,看DirectX Graphics\Reference\Shader Reference\High Level Shading Language\Type就可以了。
[声明]:本文译自Frank Luna的《Introduction to 3D Game Programming with DirectX 9.0》,限于译者水平,文中难免错漏之处,欢迎各位网友批评指正;本文仅用于学习交流与参考用途,不得用于任何形式的商业用途;如需转载需事先征得作者本人和译者的同意,保持文章的完整性,并注明作者、译者和出处,对于违反以上条款造成的后果,译者对此不负任何责任。我的邮箱地址是[email protected],欢迎热爱3D图形和游戏,并有一定图形编程经验的朋友来信交流。

|