2017-10-14 4 views
4

METAL API(iOS)で動作するフレームワークを作成しようとしています。私はこのプラットフォームではかなり新しいので、.metalファイルを扱うためのフレームワークを構築する方法を知りたいと思います(動的ではなく静的なライブラリを構築しています)。それらが.aファイルの一部であるか、フレームワークバンドル内のリソースファイルであるべきか?それとも他の方法がありますか?ありがとう。iOSフレームワークの一部としての金属ファイル

アップデート:このに取り組む人のために - 私はwarrenmの1の提案オプションを以下のことになった - 文字列に・金属ファイルを変換し、newLibraryWithSource:options:error:を呼び出します。 パフォーマンスが最高ではありませんが、インポートする追加リソースなしで、1つのフレームワークファイルのみを出荷できました。これは、Metal、ARKitなどをシェーダファイルで使用するフレームワークを作成する人にとっては役に立ちます。

+0

あなたがうまくいくアプローチを見つけたらうれしいです。後世のために、私は以下にコメントし、1つのファイルだけを出荷している間にシェーダのプリコンパイルの利点を維持できる概念実証プロジェクトを共有しました。私がこれをプロダクションでやっていたのなら、ほぼ確実に私が取るアプローチです。 – warrenm

答えて

7

メタルシェイダーには、さまざまなトレードオフを持つスタティックライブラリを提供する方法はたくさんあります。ここでそれらを列挙しようとします。

1).metalファイルを静的ライブラリに焼き付けられた静的な文字列に変換します。

これはおそらく最悪のオプションです。アイデアは、静的ライブラリの文字列リテラルとして含まれる文字列にMetalシェーダコードを前処理することです。その後、newLibraryWithSource:options:error: API(またはその非同期兄弟)を使用して、ソースをMTLLibraryに変換し、関数を取得します。これには、.metalから文字列への変換を行うプロセスを工夫する必要があり、シェーダのプリコンパイルの利点が失われ、結果として生じるアプリケーションが遅くなります。それはユーザーの負担の多くの場所とかかわら

2)船・金属あなたの静的ライブラリと一緒にファイルとは、そのアプリのターゲットに考えられ

すべてのものを、それらを追加するには、ライブラリのユーザーを必要とします。これは、まともなオプションがあり、 Metal Shaderのソースが公開されています(問題がある場合)。静的ライブラリのコードは、Xcodeによって自動的にアプリケーションのdefault.metallibにコンパイルされるため、「デフォルトライブラリ」(newDefaultLibrary)を使用できます。これはリソースとしてアプリケーションバンドルに組み込まれています。

3)は、それはあなたのシェーダのソースを公開していないので、これは、(のみそのIRの使いやすさ、パフォーマンス、およびセキュリティの間の良好な妥協点であるあなたの静的ライブラリと一緒に

を.metallibファイルを出荷します)。基本的には、プロジェクトに "Metal Library"ターゲットを作成し、シェーダコードを配置することができます。これにより、.metallibファイルが生成されます。このファイルは、静的ライブラリと共に出荷され、ユーザーがアプリケーションターゲットにリソースとして埋め込むことができます。静的ライブラリは、実行時にnewLibraryWithData:error:またはnewLibraryWithURL:error: APIを使用して.metallibをロードできます。シェーダはあらかじめコンパイルされているので、ライブラリを作成する方が高速になり、コンパイル時の診断の利点が得られます。

+0

詳細な回答ありがとうございます。物事を明確にするために、ユーザーに別のファイルを発送したくない場合は、1番目の解決策は1つだけです。 – DocForNoc

+0

メタコンパイルファイルからバイトを取り出し、静的ライブラリソースにリテラルのバイト配列として書き込むことで、コンパイル済みのライブラリを埋め込むことができたと思います。これにより、1ファイルの要件を満たす一方、プリコンパイルの利点も得られます。 – warrenm

+0

私はちょうどこの最後のアプローチをテストし、それは動作します。ここに概念実証プロジェクトがあります。メタライブを作成し、ヘッダーファイルに焼いて、実行時にパイプラインを作るためのMTLLライブラリを作成します:https://www.dropbox.com/s/8w30r1gyutj9twc/EmbeddedKernelSample.zip?dl=0。これは決して生産準備が整ったものではありませんが、アプローチを十分に説明する必要があります。 – warrenm

関連する問題