if-Anweisung

Führen Sie basierend auf der Auswertung des bedingten Ausdrucks eine Reihe von Anweisungen bedingt aus.

[Attribut ] if ( Bedingt ) { Anweisungsblock; }

Parameter

Attribut

Ein optionaler Parameter, der steuert, wie die Anweisung kompiliert wird.

Attribut BESCHREIBUNG
Verzweigung Werten Sie abhängig von der angegebenen Bedingung nur eine Seite der if-Anweisung aus.
[!Note]
Wenn Sie ShaderModell 2.x oder Shadermodell 3.0verwenden, nutzen Sie jedes Mal, wenn Sie dynamische Verzweigung verwenden, Ressourcen. Wenn Sie also die dynamische Verzweigung übermäßig verwenden, wenn Sie diese Profile als Ziel verwenden, können Kompilierungsfehler auftreten.

Vereinfachen Werten Sie beide Seiten der if-Anweisung aus, und wählen Sie zwischen den beiden resultierenden Werten aus.

Bedingte

Ein bedingter Ausdruck. Der Ausdruck wird ausgewertet, und wenn true, wird der Anweisungsblock ausgeführt.

Anweisungsblock

Eine oder mehrere HLSL-Anweisungen.

Hinweise

Wenn der Compiler die branch-Methode zum Kompilieren einer if-Anweisung verwendet, generiert er Code, der abhängig von der angegebenen Bedingung nur eine Seite der if-Anweisung auswertet. Beispiel: in der if-Anweisung:

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

Die if-Anweisung verfügt über einen impliziten else-Block, der x = x entspricht. Da wir den Compiler angewiesen haben, die Branchmethode mit dem vorangehenden Branchattribut zu verwenden, wertet der kompilierte Code x aus und führt nur die Seite aus, die ausgeführt werden soll. Wenn x 0 (null) ist, wird die else-Seite ausgeführt, und wenn es ungleich 0 (null) ist, wird die seite ausgeführt.

Wenn dagegen das vereinfachte Attribut verwendet wird, wertet der kompilierte Code beide Seiten der if-Anweisung aus und wählt unter Verwendung des ursprünglichen Werts von x zwischen den beiden resultierenden Werten aus. Hier sehen Sie ein Beispiel für die Verwendung des Flatten-Attributs:

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

Es gibt bestimmte Fälle, in denen die Verwendung des Branch- oder flatten-Attributs einen Kompilierungsfehler generieren kann. Das Branchattribut schlägt möglicherweise fehl, wenn eine Seite der if-Anweisung eine Farbverlaufsfunktion wie tex2Denthält. Das Flattenattribut kann fehlschlagen, wenn eine Seite der if-Anweisung eine Stream Append-Anweisung oder eine andere Anweisung mit Nebeneffekten enthält.

Eine if-Anweisung kann auch einen optionalen else-Block verwenden. Wenn der if-Ausdruck TRUE ist, wird der Code im Anweisungsblock verarbeitet, der der if-Anweisung zugeordnet ist. Andernfalls wird der Anweisungsblock verarbeitet, der dem optionalen else-Block zugeordnet ist.

Weitere Informationen

Flow Steuerung