함수 선언 구문

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;
}

함수(DirectX HLSL)