HLSL에서 다음 유형의 프리 프로세서 지시문을 사용하여 셰이더 컴파일러에 정보를 제공할 수 있습니다.
#pragma#define_for_platform_compiler
#pragma 지시문은 다른 유형의 프리 프로세서 지시문에서 다루지 않는 추가 정보를 셰이더 컴파일러에 제공합니다.
#pragma 지시문은 HLSL 코드의 원하는 부분에 삽입할 수 있으나, 일반적으로는 다음과 같이 시작 부분에 삽입합니다.
#pragma target 3.0
#pragma exclude_renderers vulkan
#pragma vertex vert
#pragma fragment frag
// The rest of your HLSL code goes here
#pragma 지시문을 사용하는 데는 다음과 같은 몇 가지 제약이 있습니다.
#if) 지시문 내에서 #pragma 지시문을 사용할 수 있습니다.
#define 지시문SHADER_API_MOBILE, SHADER_API_DESKTOP, UNITY_NO_RGBM, UNITY_USE_NATIVE_HDR, UNITY_FRAMEBUFFER_FETCH_AVAILABLE, UNITY_NO_CUBEMAP_ARRAY
UNITY_VERSION 매크로.shader 파일과 #include_with_pragmas 지시문에 포함된 파일에는 Unity 전용 #pragma 지시문만 사용할 수 있습니다. Unity는 #include 지시문에 포함된 파일에서 이를 지원하지 않으며, 컴파일러는 이를 무시합니다.#include 지시문에 포함된 파일에는 표준 HLSL #pragma 지시문만 사용할 수 있습니다. Unity는 .shader 파일이나 #include_with_pragmas 지시문에 포함된 파일에서 이를 지원하지 않으며, 컴파일러는 이를 무시합니다.
참고: 셰이더 파일이 #include를 사용하여 #include_with_pragmas 지시문이 포함된 파일을 임포트하는 경우, Unity는 #include_with_pragmas 지시문이 참조하는 파일의 #pragma 지시문을 무시합니다.
셰이더 코드에서 #define_for_platform_compiler 지시문을 사용하여 #define 지시문을 셰이더 컴파일러로 전송합니다.
예를 들어, #define_for_platform_compiler EXAMPLE_SYMBOL은 EXAMPLE_SYMBOL이라는 심볼을 정의하는 #define EXAMPLE_SYMBOL 지시문을 셰이더 컴파일러로 전송합니다. 셰이더 컴파일러가 사용하는 심볼에 대한 자세한 내용은 외부 셰이더 컴파일러 기술 자료(예: FXC 컴파일러에 대한 Microsoft 기술 자료)를 참조하십시오.
Unity 프리 프로세서는 #define_for_platform_compiler로 정의한 심볼을 사용하지 않으므로 자체 셰이더 코드에서 심볼을 사용할 수 없습니다. 예를 들어 위 예시에서 #if (EXAMPLE_SYMBOL) 문 안에 셰이더 코드를 추가하면 코드가 실행되지 않습니다.