Qiita Conference 2025

Qiita史上最多!豪華12名のゲストが登壇

特別講演ゲスト(敬称略)

ymrl、成瀬允宣、鹿野壮、伊藤淳一、uhyo、徳丸浩、ミノ駆動、みのるん、桜庭洋之、tenntenn、けんちょん、こにふぁー

3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Metal]metalファイルをプリコンパイルしつつ実機でもコンパイルする

Posted at

ランタイムでシェーダをコンパイルするときに、毎回実機でコンパイルエラーを確認するのは辛いですね。
なので、シェーダのプリコンパイルを挟んだ上で実機でコンパイルすることで実行前にシェーダの記述エラーに気がつくことができます。

具体的にはmetalファイルをプリコンパイルした上で、defaultLibraryを使わずにmetalファイルからソースコードを読み込んで実機でコンパイルすれば良いわけです。
しかし、XcodeはMetalファイルを検知すると問答無用でプリコンパイルしてしまう 1 ためmetalファイルをそのままアプリにバンドルするにはひと工夫必要です。

まず次のようにフォルダにファイルを配置します。

スクリーンショット 2020-03-13 2.57.45.png

この状態で、フォルダをXcodeにD&Dして「Create folder references」として登録します。

スクリーンショット 2020-03-13 2.58.38.png

次のように追加したディレクトリが青色のアイコンで登録されれば、このディレクトリ内のmetalファイルは直接バンドルされるようになります。

スクリーンショット 2020-03-13 2.59.08.png

しかしこのままではコンパイル対象にならないため、metalファイルをツリー内でD&Dしてリファレンスフォルダの外に追加します。

スクリーンショット 2020-03-13 3.00.51.png

この状態では、Example/Default.metalはプリコンパイルの対象となり、Example/Shader/Default.metalはバンドル対象になります。
また、両方のファイルの参照は同じため片方を編集したらもう片方をコピペするような作業は不要になります。

実際にバンドルされたmetalファイルを呼び出す際は


let url = Bundle.main.url(forResource: "Shader/Default", withExtension: "metal")!

と、フォルダ名を入れてurlを取得します。

  1. CompileSourcesPhaseから消してCopy Bundle Phaseに入れてもプリコンパイルします。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?