if 语句

根据条件表达式的计算,有条件地执行一系列语句。

[属性] 如果 ( 条件 ) { 语句块; }

parameters

属性

一个可选参数,用于控制语句的编译方式。

Attribute 说明
branch 根据给定的条件,仅计算 if 语句的一侧。 注意: 使用 着色器模型 2.x着色器模型 3.0 时,每次使用动态分支都会消耗资源。 因此,如果在以这些配置文件为目标时过度使用动态分支,可能会收到编译错误。
平展 (flatten) 计算 if 语句的两端,并在两个结果值之间进行选择。

条件

条件 表达式。 计算表达式,如果为 true,则执行语句块。

语句块

一个或多个 HLSL 语句

注解

当编译器使用分支方法编译 if 语句时,它将根据给定的条件生成仅计算 if 语句的一侧的代码。 例如,在 if 语句中:

[branch] if(x)
{
    x = sqrt(x);
}

if 语句具有隐式 else 块,等效于 x = x。 由于我们已告知编译器将分支方法与前面的分支属性一起使用,因此编译的代码将计算 x 并仅执行应执行的端;如果 x 为零,则执行 另一 端,如果为非零,则执行 then 端。

相反,如果使用 平展 属性,则编译的代码将计算 if 语句的两端,并使用 x 的原始值在两个结果值之间进行选择。 下面是平展属性的用法示例:

[flatten] if(x)
{
    x = sqrt(x);
}

在某些情况下,使用分支或平展属性可能会生成编译错误。 如果 if 语句的任一端包含渐变函数(如 tex2D),分支属性可能会失败。 如果 if 语句的任一端包含流 append 语句或任何其他具有副作用的语句,则平展属性可能会失败。

if 语句还可以使用可选的 else 块。 如果 if 表达式为 true,则处理与 if 语句关联的语句块中的代码。 否则,将处理与可选 else 块关联的语句块。

请参阅

流控制