프로젝트의 Lua 스크립트가 C 코드를 실행하도록 할 수 있습니다. C로 쓰여진 함수는 대개 Lua로 쓰여진 해당 함수보다 빠르게 실행되기 때문에 이는 성능이 핵심인 경우에 유용합니다. 또한, 이 방식을 통해 타사 라이브러리를 통합하거나 다른 응용프로그램용으로 쓰인 기존 C 코드를 재사용할 수도 있습니다.
이 작업을 수행할 수 있는 옵션이 몇 가지 있습니다.
C 코드에 bindings를 써서 C 함수 및 변수를 C 라이브러리가 로드된 Lua 환경에 노출시킬 수 있습니다. 자체 사용자 정의 코드와 타사 라이브러리에 정의된 함수 모두 이렇게 할 수 있습니다. 자세한 내용은 사용자 정의 바인딩을 통해 Lua를 C로 확대를 참조하십시오.
일부 타사 라이브러리에는 Lua 바인딩을 이미 사용할 수 있게 되어 있습니다. 이 바인딩은 라이브러리 작성자가 쓰거나 오픈 소스 라이브러리인 경우 커뮤니티에서 쓸 수도 있습니다. 미리 쓰인 Lua 바인딩이 있는 라이브러리를 찾을 수 있다면 그대로 사용해도 됩니다. 하지만 Stingray에서 사용하는 동일한 버전의 LuaJIT 라이브러리에 링크하려면 라이브러리를 여전히 다시 컴파일해야 할 가능성이 큽니다. 사용자 정의 바인딩을 통해 Lua를 C로 확대를 참조하십시오(Lua 바인딩을 쓰는 방법에 관한 단계는 생략).
LuaJIT FFI 라이브러리를 사용하여 특별한 바인딩이 없는 플레인 C 라이브러리를 로드하고, 그 함수를 Lua 환경에서 바로 호출할 수 있습니다. LuaJIT FFI 라이브러리를 통해 Lua를 C로 확대를 참조하십시오.
모든 경우 C 코드를 동적으로 링크된 라이브러리로 컴파일하고, 해당 라이브러리를 엔진에서 런타임 시 로드할 수 있도록 해야 합니다.
참고: 이 섹션의 자료는 C 코드 쓰기 및 컴파일을 이미 경험해 본 프로그래머들에게 권장되는 자료입니다. FFI 라이브러리 사용에 따른 바인딩 레이어 관리 또는 유형 변환의 복잡함을 고려하지 않더라도 C는 초급자가 직접 사용하기에는 어려울 수 있습니다.
게임이 동적 링크를 지원하고, LuaJIT에 동적으로 링크되는 플랫폼을 대상으로 한다면 동적으로 링크된 라이브러리에서만 C 코드를 실행할 수 있습니다.
C 코드를 동적 링크를 지원하지 않는 플랫폼에서 실행해야 하거나 이 섹션의 항목에서 설명한 어느 한 방법으로도 Lua에서 작동하는 코드를 가져올 수 없는 경우 Stingray 엔진에 의해 노출되는 플러그인 API를 사용하는 것도 한 가지 방법입니다.
현재 이렇게 하려면 Stingray 소스 리포지토리에 액세스할 수 있어야 합니다. 자세한 내용은 Autodesk 담당자에게 문의하십시오. Stingray 개발자 도움말도 참조하십시오.