標準vertex
およびfragment
機能に加えて、メタルサポートkernel
がサポートされています。私は、画像をグレースケールに変換するメタルのkernel
を見つけました。メタル計算カーネルとフラグメントシェーダ
これはkernel
とfragment
の違いは何ですか? fragment
シェーダができない、またはその逆の場合、kernel
は何を行うことができますか?あなただけのグラフィックスプログラミングをやっている場合は
MTLRenderCommandEncoder
MTLComputeCommandEncoder
MTLBlitCommandEncoder
MTLParallelRenderCommandEncoder
、あなたがしている:
主な違いは、フラグメント機能と同じように、頂点位置(または他のメッシュ/ジオメトリデータ)をカーネル関数に送信できないことです。フラグメント関数は、出力テクスチャの各ピクセルの色を返します(通常は)、戻り値を持たないカーネル関数(void)は、テクスチャまたはバッファ上で動作し、上に行くことができるグリッド上で同時に多くのスレッドを同時に実行できます何百万というスレッド。カーネルはGPGPUや科学的シミュレーションでも画像処理に使用されますが、フラグメント機能はレンダリングにしか使用できません。 – Marius
基本的にiOSのOpenCL? –
あなたはそうそう思います。しかし、iOSだけでなくMetalは、tvOSとmacOSでも動作します。 – Marius