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을 준비합니다.

2. 빌드 시스템의 헤더 검색 경로에 metal-cpp 폴더를 추가합니다.

Xcode에서 다음을 수행합니다.

  • 프로젝트 탐색기를 클릭합니다.
  • 프로젝트를 클릭합니다.
  • Build Settings(빌드 설정)를 클릭합니다.
  • Header Search Paths(헤더 검색 경로)를 검색합니다.
  • 추출된 폴더, metal-cpp/에 경로를 추가합니다. Xcode에 경로가 입력된 스크린샷
  • C++ Language Dialect(C++ 언어 방언)를 검색하고 C++17 이상으로 설정되어 있는지 확인합니다. Xcode에서 강조 표시된 설정의 스크린샷
  • Build Phases(빌드 단계) 탭에서 연결할 프레임워크 목록에 Foundation, QuartzCore 및 Metal 프레임워크를 추가해야 합니다. Xcode에서 강조 표시된 라이브러리의 스크린샷

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 파일을 참조하십시오.