mtlppとはAppleのOSで動作するオーバーヘッドの小さいローレベル(low level)のグラフィックスAPIのMetalのC++ラッパーである。
MetalはObjective-CかSwiftのAPIは用意されているが、C++でのAPIは用意されていない。 mtlppはObjective-Cで実装し、C++から呼び出せる様にしている。
UnrealEngineでも使用されている模様...
とりあえずビルドしてみる。
GitHubからCloneもしくはダウンロードする。
今回はダウンドードした環境でビルドしてみる。 ターミナルから展開した環境にディレクトリに移動する。
scripts/以下に移動して以下のシェルスクリプトを実行する。
$ ./build_osx.sh
ビルドが開始される。
++ dirname ./build_osx.sh + cd . + [[ '' == \a\r\m ]] + build_mac 10.9 + local ver=10.9 + local output=../.build/macos_10.9 + local 'objcflags=-std=c++11 -x objective-c++ -mmacosx-version-min=10.9' + local 'cppflags=-std=c++11 -mmacosx-version-min=10.9' + local 'ldflags=-framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime' + rm -Rf ../.build/macos_10.9 + mkdir -p ../.build/macos_10.9 + clang++ -std=c++11 -x objective-c++ -mmacosx-version-min=10.9 -c ../mtlpp.mm -o ../.build/macos_10.9/mtlpp.o + clang++ -std=c++11 -x objective-c++ -mmacosx-version-min=10.9 -c ../examples/window_macos.mm -o ../.build/macos_10.9/window.o + clang++ -std=c++11 -mmacosx-version-min=10.9 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/00_init.cpp ../.build/macos_10.9/mtlpp.o -o ../.build/macos_10.9/00_init + clang++ -std=c++11 -mmacosx-version-min=10.9 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/01_clear.cpp ../.build/macos_10.9/mtlpp.o -o ../.build/macos_10.9/01_clear + clang++ -std=c++11 -mmacosx-version-min=10.9 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/02_triangle.cpp ../.build/macos_10.9/mtlpp.o -o ../.build/macos_10.9/02_triangle + clang++ -std=c++11 -mmacosx-version-min=10.9 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/03_compute.cpp ../.build/macos_10.9/mtlpp.o -o ../.build/macos_10.9/03_compute + clang++ -std=c++11 -mmacosx-version-min=10.9 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/04_window.cpp ../.build/macos_10.9/mtlpp.o ../.build/macos_10.9/window.o -o ../.build/macos_10.9/04_window : : + build_mac 10.12 + local ver=10.12 + local output=../.build/macos_10.12 + local 'objcflags=-std=c++11 -x objective-c++ -mmacosx-version-min=10.12' + local 'cppflags=-std=c++11 -mmacosx-version-min=10.12' + local 'ldflags=-framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime' + rm -Rf ../.build/macos_10.12 + mkdir -p ../.build/macos_10.12 + clang++ -std=c++11 -x objective-c++ -mmacosx-version-min=10.12 -c ../mtlpp.mm -o ../.build/macos_10.12/mtlpp.o + clang++ -std=c++11 -x objective-c++ -mmacosx-version-min=10.12 -c ../examples/window_macos.mm -o ../.build/macos_10.12/window.o + clang++ -std=c++11 -mmacosx-version-min=10.12 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/00_init.cpp ../.build/macos_10.12/mtlpp.o -o ../.build/macos_10.12/00_init + clang++ -std=c++11 -mmacosx-version-min=10.12 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/01_clear.cpp ../.build/macos_10.12/mtlpp.o -o ../.build/macos_10.12/01_clear + clang++ -std=c++11 -mmacosx-version-min=10.12 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/02_triangle.cpp ../.build/macos_10.12/mtlpp.o -o ../.build/macos_10.12/02_triangle + clang++ -std=c++11 -mmacosx-version-min=10.12 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/03_compute.cpp ../.build/macos_10.12/mtlpp.o -o ../.build/macos_10.12/03_compute + clang++ -std=c++11 -mmacosx-version-min=10.12 -framework Metal -framework MetalKit -framework Cocoa -framework CoreFoundation -fobjc-link-runtime ../examples/04_window.cpp ../.build/macos_10.12/mtlpp.o ../.build/macos_10.12/window.o -o ../.build/macos_10.12/04_window
ビルドされた実行ファイルは .build/以下に出力されている。
drwxr-xr-x 12 xxxxx staff 384 3 25 18:57 . drwxr-xr-x 8 xxxxx staff 256 9 24 2018 .. drwxr-xr-x 6 xxxxx staff 192 3 25 18:59 .build -rwxr-xr-x@ 1 xxxxx staff 17 1 23 2018 .gitignore -rwxr-xr-x@ 1 xxxxx staff 418 1 23 2018 .travis.yml -rwxr-xr-x@ 1 xxxxx staff 1078 1 23 2018 LICENSE -rwxr-xr-x@ 1 xxxxx staff 1624 1 23 2018 README.md drwxr-xr-x 10 xxxxx staff 320 3 25 18:57 examples -rwxr-xr-x@ 1 xxxxx staff 96835 1 23 2018 mtlpp.hpp -rwxr-xr-x@ 1 xxxxx staff 164269 1 23 2018 mtlpp.mm drwxr-xr-x 5 xxxxx staff 160 3 25 18:57 scripts drwxr-xr-x 56 xxxxx staff 1792 3 25 18:57 src
OSのバージョン毎にビルドされている。
drwxr-xr-x 6 xxxxx staff 192 3 25 18:59 . drwxr-xr-x 12 xxxxx staff 384 3 25 18:57 .. drwxr-xr-x 9 xxxxx staff 288 3 25 18:59 macos_10.10 drwxr-xr-x 9 xxxxx staff 288 3 25 18:59 macos_10.11 drwxr-xr-x 9 xxxxx staff 288 3 25 18:59 macos_10.12 drwxr-xr-x 9 xxxxx staff 288 3 25 18:59 macos_10.9
$ cd ./macos_10.12
drwxr-xr-x 9 xxxxx staff 288 3 25 18:59 . drwxr-xr-x 6 xxxxx staff 192 3 25 18:59 .. -rwxr-xr-x 1 xxxxx staff 236408 3 25 18:59 00_init -rwxr-xr-x 1 xxxxx staff 241120 3 25 18:59 01_clear -rwxr-xr-x 1 xxxxx staff 241656 3 25 18:59 02_triangle -rwxr-xr-x 1 xxxxx staff 240696 3 25 18:59 03_compute -rwxr-xr-x 1 xxxxx staff 250108 3 25 18:59 04_window -rw-r--r-- 1 xxxxx staff 296820 3 25 18:59 mtlpp.o -rw-r--r-- 1 xxxxx staff 16712 3 25 18:59 window.o
04_windowを実行してみる。
$ ./04_window
以下の画面が表示されることを確認。
以上がmtlppのビルドと実行確認の方法。