다음을 통해 공유


함수 선언 구문

HLSL 함수는 다음 구문을 사용하여 선언됩니다.

[StorageClass] [clipplanes()] [precise] Return_Value Name ( [ArgumentList] ) [: 의미 체계] { [StatementBlock] };

 

매개 변수

StorageClass

함수 선언을 다시 정의하는 한정자입니다. 인라인 현재 유일한 한정자 값입니다. 한정자 값은 기본값이기도 하므로 인라인 합니다. 따라서 함수는 인라인지정하는지 여부에 관계없이 인라인이며 HLSL의 모든 함수는 인라인입니다. 인라인 함수는 각 함수 호출에 대한 함수 본문(컴파일 시)의 복사본을 생성합니다. 이 작업은 함수 호출의 오버헤드를 줄이기 위해 수행됩니다.

클립플레인

사용자가 지정한 클립 평면을 최대 6개까지 포함하는 선택적 클립 평면 목록입니다. 기능 수준 9_x 이상에서 작동하는 SV_ClipDistance 대한 대체 메커니즘입니다.

이름

셰이더 함수의 이름을 고유하게 식별하는 ASCII 문자열입니다.

ArgumentList

함수에 전달될 인수의 쉼표로 구분된 목록인 선택적 인수 목록입니다.

의미 체계

반환 데이터의 의도된 사용량을 식별하는 선택적 문자열입니다(의미 체계(DirectX HLSL)참조).

StatementBlock

함수 본문을 구성하는 선택적 . 본문 없이 정의된 함수를 함수 프로토타입이라고 하며, 프로토타입 함수의 본문을 다른 곳에서 정의해야 함수를 호출할 수 있습니다.

반환 값

반환 형식은 이러한HLSL 형식 중 하나일 수 있습니다.

발언

이 페이지의 구문은 거의 모든 유형의 HLSL 함수를 설명합니다. 여기에는 꼭짓점 셰이더, 픽셀 셰이더 및 도우미 함수가 포함됩니다. 기하 도형 셰이더도 함수를 사용하여 구현되지만 해당 구문은 좀 더 복잡하므로 기하 도형 셰이더 함수 선언을 정의하는 별도의 페이지가 있습니다(Geometry-Shader 개체(DirectX HLSL)참조).

매개 변수 형식 및/또는 매개 변수 순서의 고유한 조합이 제공되면 함수를 오버로드할 수 있습니다. 또한 HLSL은여러 기본 제공 함수 또는내장 함수를 구현합니다.

클립플레인 특성을 사용하여 사용자별 클립 평면을 지정할 수 있습니다. Windows는 이러한 클립 평면을 그리는 모든 기본 형식에 적용합니다. 클립플레인 특성은 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)