Share via


if 陳述式

根據條件運算式的評估,有條件地執行一系列語句。

[屬性] 如果 ( 條件 式 ) { 語句區塊; }

參數

屬性

選擇性參數,可控制語句的編譯方式。

屬性 描述
分支 根據指定的條件,只評估 if 語句的一端。 注意: 當您使用 著色器模型 2.x著色器模型 3.0時,每次使用動態分支時,都會取用資源。 因此,如果您在以這些設定檔為目標時過度使用動態分支,則可以收到編譯錯誤。
扁平化 評估 if 語句的兩端,並在兩個產生的值之間選擇。

條件

條件 運算式。 系統會評估運算式,如果為 true,則會執行語句區塊。

語句區塊

一或多個 HLSL 語句

備註

當編譯器使用分支方法來編譯 if 語句時,它會產生程式碼,其只會根據指定的條件評估 if 語句的一端。 例如,在 if 語句中:

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

if語句具有隱含 else 區塊,相當於 x = x。 因為我們已告知編譯器搭配上述分支屬性使用 branch 方法,所以編譯的程式碼會評估 x,並只執行應該執行的端;如果 x 為零,則會執行 其他 端,如果為非零,則會執行 端。

相反地,如果使用 扁平化 屬性,則編譯的程式碼將會評估 if 語句的兩端,並使用 x 的原始值在兩個產生的值之間選擇。 以下是使用扁平化屬性的範例:

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

在某些情況下,使用分支或扁平化屬性可能會產生編譯錯誤。 如果 if 語句任一端包含漸層函式,例如 tex2D,分支屬性可能會失敗。 如果 if 語句的任一端包含資料流程 append 語句或任何其他具有副作用的語句,則扁平化屬性可能會失敗。

if語句也可以使用選擇性的 else 區塊。 如果 if 運算式為 true,則會處理與 if 語句相關聯的語句區塊中的程式碼。 否則,會處理與選擇性 else 區塊相關聯的語句區塊。

另請參閱

流程式控制制