함수 선언 구문
HLSL 함수는 다음 구문으로 선언됩니다.
[StorageClass] [clipplanes()] [precise] Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };
매개 변수
-
StorageClass
-
함수 선언을 다시 정의하는 한정자입니다. 인라인이 현재 유일한 한정자 값입니다. 한정자 값은 기본값이기도 하므로 인라인이어야 합니다. 따라서 함수는 인라인 지정 여부에 상관없이 인라인이며, HLSL의 모든 함수가 인라인입니다. 인라인 함수는 각 함수 호출에 대한 함수 본문의 복사본을 생성(컴파일 시)합니다. 이 작업은 함수 호출의 오버헤드를 줄이기 위해 수행됩니다.
-
Clipplanes
-
사용자가 지정한 클립 평면을 최대 6개 포함하는 선택적 클립 평면의 목록입니다. 기능 수준 9_x 이상에서 작동하는 SV_ClipDistance의 대체 메커니즘입니다.
-
Name
-
셰이더 함수의 이름을 고유하게 식별하는 ASCII 문자열입니다.
-
ArgumentList
-
함수에 전달된 인수의 쉼표로 구분된 목록인 선택적 인수 목록입니다.
-
Semantic
-
반환 데이터의 의도된 사용량을 식별하는 선택적 문자열입니다(의미 체계(DirectX HLSL) 참조).
-
StatementBlock
-
함수의 본문을 구성하는 선택적 문입니다. 본문 없이 정의된 함수를 함수 프로토타입이라고 합니다. 프로토타입 함수의 본문을 다른 곳에서 먼저 정의해야 함수를 호출할 수 있습니다.
반환 값
반환 형식은 이러한 HLSL 형식 중 하나일 수 있습니다.
설명
이 페이지의 구문은 거의 모든 유형의 HLSL 함수를 설명합니다. 여기에는 꼭짓점 셰이더, 픽셀 셰이더 및 도우미 함수가 포함됩니다. 기하 도형 셰이더 또한 함수를 사용하여 구현되지만, 해당 구문은 좀 더 복잡하므로 기하 도형 셰이더 함수 선언을 정의하는 별도의 페이지가 있습니다(Geometry-Shader 개체(DirectX HLSL)참조).
매개 변수 형식 및/또는 매개 변수 순서의 고유한 조합이 제공되는 한, 함수를 오버로드할 수 있습니다. HLSL은 여러 개의 기본 제공 함수 또는 내장 함수도 구현합니다.
clipplanes 특성을 통해 사용자별 클립 평면을 지정할 수 있습니다. Windows는 그려진 모든 기본 형식에 이러한 클립 평면을 적용합니다. clipplanes 특성은 SV_ClipDistance처럼 작동하지만, 모든 하드웨어 기능 수준 9_x 이상에서 작동합니다. 자세한 내용은 기능 수준 9 하드웨어의 사용자 클립 평면을 참조하세요.
예제
이 예제는 BasicHLSL10 샘플의 BasicHLSL10.fx에서 가져온 것입니다.
struct VS_OUTPUT
{
float4 Position : SV_POSITION;
float4 Diffuse : COLOR0;
float2 TextureUV : TEXCOORD0;
};
VS_OUTPUT RenderSceneVS( float4 vPos : POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
VS_OUTPUT Output;
...
return Output;
}
이 예제는 AdvancedParticles 샘플의 AdvancedParticles.fx에서 가져온 것으로, 반환 형식에 대해 의미 체계를 사용하는 방법을 보여 줍니다.
//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{
return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}
관련 항목