Bagikan melalui


Jika Pernyataan

Jalankan serangkaian pernyataan secara kondisional, berdasarkan evaluasi ekspresi kondisional.

[Atribut] if ( Conditional ) { Statement Block; }

Parameter

Atribut

Parameter opsional yang mengontrol cara pernyataan dikompilasi.

Atribut Deskripsi
cabang Evaluasi hanya satu sisi pernyataan if tergantung pada kondisi yang diberikan. Catatan: Saat Anda menggunakan Model Shader 2.x atau Model Shader 3.0, setiap kali Anda menggunakan percabangan dinamis, Anda menggunakan sumber daya. Jadi, jika Anda menggunakan percabangan dinamis secara berlebihan ketika Anda menargetkan profil ini, Anda dapat menerima kesalahan kompilasi.
flatten Evaluasi kedua sisi pernyataan if dan pilih antara dua nilai yang dihasilkan.

Bersyarat

Ekspresi bersyarah. Ekspresi dievaluasi, dan jika benar, blok pernyataan dijalankan.

Blok Pernyataan

Satu atau beberapa pernyataan HLSL.

Keterangan

Ketika pengkompilasi menggunakan metode cabang untuk mengkompilasi pernyataan jika akan menghasilkan kode yang hanya akan mengevaluasi satu sisi pernyataan if tergantung pada kondisi yang diberikan. Misalnya, dalam pernyataan if:

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

Pernyataan if memiliki blok lain implisit, yang setara dengan x = x. Karena kami telah memberi tahu kompilator untuk menggunakan metode cabang dengan atribut cabang sebelumnya, kode yang dikompilasi akan mengevaluasi x dan hanya menjalankan sisi yang harus dijalankan; jika x adalah nol, maka itu akan mengeksekusi sisi lain , dan jika bukan nol, itu akan mengeksekusi sisi kemudian .

Sebaliknya, jika atribut flatten digunakan, maka kode yang dikompilasi akan mengevaluasi kedua sisi pernyataan if dan memilih antara dua nilai yang dihasilkan menggunakan nilai asli x. Berikut adalah contoh penggunaan atribut flatten:

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

Ada kasus tertentu di mana menggunakan atribut cabang atau meratakan dapat menghasilkan kesalahan kompilasi. Atribut cabang mungkin gagal jika salah satu sisi pernyataan if berisi fungsi gradien, seperti tex2D. Atribut flatten mungkin gagal jika salah satu sisi pernyataan if berisi pernyataan stream append atau pernyataan lain yang memiliki efek samping.

Pernyataan jika juga dapat menggunakan blok lain opsional. Jika ekspresi if true, kode dalam blok pernyataan yang terkait dengan pernyataan if diproses. Jika tidak, blok pernyataan yang terkait dengan blok lain opsional diproses.

Lihat juga

Kontrol Alur