Metal-cpp 시작하기
Metal-cpp는 C++로 작성된 그래픽 앱, 게임 및 게임 엔진에 Metal 기능을 추가하는 데 도움이 되는 오버헤드가 낮은 Metal용 C++ 인터페이스입니다.
주요 특징
- Metal Objective-C 헤더에 대해 C++ 대체 인터페이스를 적용합니다.
- 모든 Metal Objective-C 클래스, 상수 및 enum을 MTL C++ 네임스페이스의 C++에 직접 매핑합니다.
- C++ 함수 호출의 인라인 처리로 인해 Metal Objective-C 헤더 호출에 비해 측정 가능한 오버헤드가 없습니다.
- 추가 할당이 필요한 감싸기 컨테이너를 사용하지 않습니다.
- iOS, iPadOS, macOS 및 tvOS에 동일한 헤더 파일 및 함수/상수/열거형을 사용할 수 있습니다.
- 이전 버전과의 호환성: 모든
bool MTL::Device::supports...()
함수는 필수 선택기가 있는지 확인하고, 없는 경우 자동으로false
를 반환합니다. - 문자열
(ErrorDomain)
상수는 약한 연결이며 사용할 수 없는 경우 자동으로nullptr
로 설정됩니다.
설치 지침
1. Mac을 준비합니다.
- Mac에서 Xcode를 엽니다. Xcode 9.3 이후 버전에는
NS::Object
에서constexpr
을 사용하기 때문에 Metal-cpp에 필요한 최소 C++17이 포함되어 있습니다. - 다음 zip 파일의 내용을 다운로드하고 추출합니다.
metal-cpp_macOS15.2_iOS18.2.zip
metal-cpp_macOS15_iOS18.zip
metal-cpp_macOS15_iOS18-beta.zip
metal-cpp_macOS14.2_iOS17.2.zip
metal-cpp_macOS14_iOS17-beta.zip
metal-cpp_macOS13.3_iOS16.4.zip
metal-cpp_macOS13_iOS16.zip
metal-cpp_macOS12_iOS15.zip
2. 빌드 시스템의 헤더 검색 경로에 metal-cpp 폴더를 추가합니다.
Xcode에서 다음을 수행합니다.
- 프로젝트 탐색기를 클릭합니다.
- 프로젝트를 클릭합니다.
- Build Settings(빌드 설정)를 클릭합니다.
- Header Search Paths(헤더 검색 경로)를 검색합니다.
- 추출된 폴더,
metal-cpp/
에 경로를 추가합니다. - C++ Language Dialect(C++ 언어 방언)를 검색하고 C++17 이상으로 설정되어 있는지 확인합니다.
- Build Phases(빌드 단계) 탭에서 연결할 프레임워크 목록에 Foundation, QuartzCore 및 Metal 프레임워크를 추가해야 합니다.
3. 구현을 생성합니다.
metal-cpp는 헤더 전용 라이브러리입니다. 구현을 생성하려면 .cpp 파일 중 하나에 다음 코드를 추가합니다.
#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>
참고: 따옴표로 metal-cpp 헤더를 포함할 수도 있습니다.
4. metal-cpp를 사용합니다.
metal-cpp 대상체 또는 유형을 참조해야 하는 모든 파일에서 헤더를 포함하기만 하면 기호를 사용할 수 있습니다.
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>
중요: NS, MTL 또는 CA _PRIVATE_IMPLEMENTATION 매크로를 두 번 이상 정의하지 마십시오.
Metal-cpp 단일 헤더 대안
편의상 대안으로 프로젝트에서 단일 헤더 포함으로 metal-cpp를 사용할 수 있습니다.
zip 파일 내용을 추출한 후 터미널에서 다음 명령을 실행하여 단일 포함 헤더를 생성합니다.
./SingleHeader/MakeSingleHeader.py Foundation/Foundation.hpp QuartzCore/QuartzCore.hpp Metal/Metal.hpp
완료된 명령은 프로젝트에서 metal-cpp를 사용하는 데 필요한 모든 것을 포함하는 단일 파일: ./SingleHeader/Metal.hpp
를 생성합니다.
하나의 .cpp 파일에서 구현을 생성하는 것을 잊지 마십시오.
#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Metal/Metal.hpp>
메모리 관리 고려 사항
Metal-cpp는 Cocoa 및 Cocoa Touch의 대상체 할당 정책을 따릅니다. C++ 대상체는 ARC(자동 참조 계산) 대상이 아니기 때문에 이러한 규칙을 이해하는 것이 metal-cpp를 사용할 때 특히 중요합니다. 자세한 내용은 metal-cpp 다운로드의 Read Me 파일을 참조하십시오.