구조체 형식

다음 구문을 사용하여 HLSL을 사용하여 구조체를 선언합니다.

struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };

매개 변수

Name

구조체 이름을 고유하게 식별하는 ASCII 문자열입니다.

[InterpolationModifier]

보간 형식을 지정하는 선택적 한정자입니다. 자세한 내용은 설명을 참조하세요.

Type[RxC]

선택적 행(R) x 열(C) 배열 크기가 있는 멤버 유형입니다. 구조체는 적어도 하나의 요소를 포함합니다. 둘 이상의 요소를 포함하는 경우 요소는 모두 동일한 형식입니다. 행과 열의 수는 1에서 4까지의 부호 없는 정수입니다.

MemberName

멤버 이름을 고유하게 식별하는 ASCII 문자열입니다.

설명

보간 한정자는 모든 구조체 멤버 또는 픽셀 셰이더 함수에 대한 인수에 지정할 수 있습니다. 한정자가 두 위치에 나타나면 외부 한정자(픽셀 셰이더 인수 한정자)가 내부 한정자(구조체 한정자)보다 우선합니다.

셰이더 또는 효과를 컴파일할 때 셰이더 컴파일러는 HLSL 압축 규칙에 따라 구조체 멤버를 압축합니다.

셰이더 모델 4에 도입된 보간 한정자

픽셀 셰이더 입력에 사용되는 꼭짓점 셰이더 출력은 래스터화 중에 픽셀당 값을 가져오기 위해 선형 보간됩니다. 보간 방법을 설정하려면 셰이더 모델 4 이상에서 지원되는 다음 값 중 하나를 사용합니다. 한정자는 픽셀 셰이더 입력으로 사용되지 않는 꼭짓점 셰이더 출력에서 무시됩니다.

보간 한정자 설명
linear 셰이더 입력 간 보간; linear는 보간 한정자가 지정되지 않은 경우 기본값입니다.
centroid 픽셀의 적용된 영역 내 어딘가에 있는 샘플 간을 보간합니다(픽셀 중심에서 끝점을 추정해야 할 수 있음). 중심 샘플링은 픽셀이 부분적으로 가려진 경우(픽셀 중심이 가려지지 않은 경우에도) 앤티앨리어싱을 개선할 수 있습니다. centroid 한정자는 linear 또는 noperspective 한정자와 결합해야 합니다.
nointerpolation 보간하지 마세요.
noperspective 보간 중에 원근 보정을 수행하지 마세요. noperspective 한정자는 centroid 한정자와 결합할 수 있습니다.
sample 셰이더 모델 4.1 이상에서 사용 가능픽셀 중심이 아닌 샘플 위치에서 보간합니다. 이로 인해 픽셀 셰이더가 픽셀 단위가 아닌 샘플 단위로 실행됩니다. 샘플당 실행을 유발하는 또 다른 방법은 현재 샘플을 나타내는 의미 체계 SV_SampleIndex가 있는 입력을 갖는 것입니다. sample이 지정된(또는 입력 SV_SampleIndex) 입력만 픽셀의 셰이더 호출 간에 다르지만 한정자를 지정하지 않는 다른 입력(예: 서로 다른 입력에 한정자를 혼합하는 경우)은 여전히 픽셀 중심에서 보간됩니다. 픽셀 셰이더 호출 및 깊이/스텐실 테스트는 픽셀의 모든 대상 샘플에 대해 발생합니다. 이를 슈퍼샘플링이라고도 합니다. 반대로 멀티샘플링이라고 하는 샘플 빈도 호출이 없으면 픽셀 셰이더는 포함된 샘플 수에 관계없이 픽셀당 한 번 호출되는 반면 깊이/스텐실 테스트는 샘플 빈도에서 발생합니다. 두 모드 모두 동등한 에지 앤티앨리어싱을 제공합니다. 그러나 슈퍼샘플링은 픽셀 셰이더를 더 자주 호출하여 더 나은 셰이딩 품질을 제공합니다.
1. int/uint 형식을 사용할 때 유일하게 유효한 옵션은 **nointerpolation**입니다.

보간 한정자는 구조체 멤버이나 함수 인수 또는 둘 다에 적용될 수 있습니다.

예제

다음은 몇 가지 구조체 선언 예입니다.

struct struct1
{
  int    a;
}

이 선언에는 배열이 포함됩니다.

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

이 선언에는 보간 한정자가 포함됩니다.

struct In
{
  centroid float2 Texcoord;
};

추가 정보

데이터 형식(DirectX HLSL)