Freigeben über


if-Anweisung

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

[Attribut] if ( Bedingt ) { Anweisung Block; }

Parameter

Attribut

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

attribute BESCHREIBUNG
Verzweigung Werten Sie je nach Bedingung nur eine Seite der if-Anweisung aus. Hinweis: Wenn Sie shader Model 2.x oder Shader Model 3.0 verwenden, verbrauchen Sie bei jeder Verwendung der dynamischen Verzweigung Ressourcen. Wenn Sie dynamische Verzweigungen also ü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

Mindestens eine HLSL-Anweisung.

Bemerkungen

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 branch-Methode mit dem vorherigen Branch-Attribut zu verwenden, wertet der kompilierte Code x aus und führt nur die Seite aus, die ausgeführt werden soll. wenn x 0 ist, wird die andere Seite ausgeführt, und wenn es ungleich 0 ist, wird die dann-Seite ausgeführt.

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

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

Es gibt bestimmte Fälle, in denen die Verwendung der Branch- oder Flatten-Attribute zu einem Kompilierungsfehler führen kann. Das Branch-Attribut kann fehlschlagen, wenn eine Seite der if-Anweisung eine Farbverlaufsfunktion enthält, z. B. tex2D. Das Flatten-Attribut kann fehlschlagen, wenn eine Seite der if-Anweisung eine Stream append-Anweisung oder eine andere Anweisung mit Nebenwirkungen 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

Ablaufsteuerung