GML 프래그마(gml_pragma) 설명서
GML 프래그마(gml_pragma) 함수는 주어진 타겟이 코드를 컴파일하는 방식에 영향을 미치며, 프로젝트의 최종 컴파일을 최적화하기 위해 다양한 명령어와 함께 호출되어야 합니다. 이 명령어들은 게임이 컴파일되기 전에 사전 처리되므로, 프로젝트의 어느 곳에나 배치할 수 있으며 게임이 완전히 컴파일되기 전에 처리됩니다.
사용 가능한 명령어
명령어 | 설명 |
---|---|
forceinline |
함수나 메서드에 forceinline 프래그마가 포함되면, YYC는 C++ 컴파일러에 해당 함수를 인라인으로 컴파일하도록 요청합니다. 이 요청은 보장되지 않으며, 결과는 C++ 컴파일러에 따라 다릅니다. |
global , [gml code] |
global 프래그마는 컴파일 시간에 전역 범위에서 문자열 형식의 GML 코드를 호출할 수 있게 합니다. 예: gml_pragma("global", "Init()"); |
optimise /optimize , <specific_optimisation> , <control> |
optimise 프래그마는 컴파일러에 최적화 힌트를 제공합니다. 예: gml_pragma("optimise", "js_array_check", "push, off"); |
PNGCrush |
PNGCrush 프래그마는 생성된 각 텍스처에 PNGCrush 프로그램을 사용합니다. |
Texgroup.Scale , [TextureGroupName] , [Scale Divisor] |
Texgroup.Scale 은 컴파일 시 주어진 텍스처 그룹을 스케일링합니다. 예: gml_pragma("Texgroup.Scale", "level1", "2"); |
UnityBuild , [enable/disable] |
이 프래그마를 호출하고 인수를 true로 설정하면 모든 .cpp 파일을 하나의 파일로 압축하여 빌드합니다. 예: gml_pragma("UnityBuild", "true"); |
AllowReentrantStatic |
이 프래그마는 정적 초기화를 이전의 재진입 초기화 동작으로 되돌립니다. 예: gml_pragma("AllowReentrantStatic", true); |
컴파일러 최적화
컴파일러 최적화는 optimise
프래그마를 통해 제공됩니다. 기본 구문은 다음과 같습니다:
gml_pragma("optimise", "<specific_optimisation>", "<control>");
<specific_optimisation>
: 수정할 특정 최적화에 대한 문자열입니다.<control>
: 최적화를 제어하는 명령어의 쉼표로 구분된 목록을 포함하는 문자열입니다.
최적화 목록
최적화 | 설명 |
---|---|
js_array_check |
ON이면 배열 변수가 배열인지 확인하는 체크를 포함합니다. OFF이면 체크가 생략됩니다. |
js_error_check |
ON이면 생성된 JavaScript 코드에 오류 처리를 위한 체크를 포함합니다. |
js_check_index |
ON이면 배열 접근 시 인덱스 체크를 포함하여 범위 오류를 잡습니다. |
js_pre_post_no_long |
ON이면 ++ 및 -- 연산자가 int64 타입의 값에 대해 체크되지 않습니다. |
js_use_infix_ops |
ON이면 JavaScript의 이항 연산자를 사용합니다. |
활용 예제
- 기본 배열 최적화
gml function multiples_of_two() { gml_pragma("optimise", "js_array_check", "push, off"); var a = []; for (var i = 0; i < 100; i++) { a[i] = i * 2; } gml_pragma("optimise", "js_array_check", "pop"); }
- 오류 체크 비활성화
gml function process_data() { gml_pragma("optimise", "js_error_check", "push, off"); // 데이터 처리 로직 gml_pragma("optimise", "js_error_check", "pop"); }
- 인덱스 체크 비활성화
gml function access_array() { gml_pragma("optimise", "js_check_index", "push, off"); var myArray = [1, 2, 3]; var value = myArray[2]; // 인덱스 체크 생략 gml_pragma("optimise", "js_check_index", "pop"); }
이 문서는 GML 프래그마와 컴파일러 최적화에 대한 기본적인 이해를 돕기 위한 자료입니다.