If 문

조건식의 평가에 따라 일련의 문을 조건부로 실행합니다.

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

매개 변수

Attribute

문이 컴파일되는 방법을 제어하는 선택적 매개 변수입니다.

attribute 설명
분기 지정된 조건에 따라 if 문의 한쪽만 평가합니다. 참고:셰이더 모델 2.x 또는 셰이더 모델 3.0을 사용하는 경우 동적 분기를 사용할 때마다 리소스를 사용합니다. 따라서 이러한 프로필을 대상으로 할 때 동적 분기를 과도하게 사용하면 컴파일 오류가 발생할 수 있습니다.
평면화(flatten) if 문의 양쪽을 평가하고 두 결과 값 중에서 선택합니다.

Conditional

조건부 입니다. 식이 평가되고 true이면 문 블록이 실행됩니다.

Statement Block

하나 이상의 HLSL 구문입니다.

설명

컴파일러가 if 문을 컴파일하기 위해 분기 메서드를 사용하면 지정된 조건에 따라 if 문의 한쪽만 평가하는 코드를 생성합니다. 예를 들어, if 문에서:

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

if 문에는 x = x와 동일한 암시적 else 블록이 있습니다. 컴파일러에게 이전 분기 특성과 함께 분기 메서드를 사용하도록 지시했기 때문에 컴파일된 코드는 x를 평가하고 실행해야 하는 쪽만 실행합니다. x가 0이면 else 쪽을 실행하고 0이 아니면 then 쪽을 실행합니다.

반대로 flatten 특성이 사용되면 컴파일된 코드는 if 문의 양쪽을 모두 평가하고 x의 원래 값을 사용하여 두 결과 값 중에서 선택합니다. 다음은 flatten 특성의 사용 예입니다.

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

분기 또는 병합 특성을 사용하면 컴파일 오류가 발생할 수 있는 경우가 있습니다. if 문의 한쪽에 tex2D와 같은 그라데이션 함수가 포함되어 있으면 분기 특성이 실패할 수 있습니다. if 문의 한쪽에 스트림 추가 문이나 부작용이 있는 다른 문이 포함되어 있으면 flatten 특성이 실패할 수 있습니다.

if 문은 선택적 else 블록을 사용할 수도 있습니다. if 식이 true이면 if 문과 연결된 문 블록의 코드가 처리됩니다. 그렇지 않으면 선택적 else 블록과 연결된 문 블록이 처리됩니다.

추가 정보

흐름 제어