Metal
MacのGraphics API
iOSとMacOSの両方で動く
AIに聞いた質問メモ
Metalにおける主要な用語についてわかりやすく説明します。
MTLCommandQueue(コマンドキュー)
GPUに送る処理コマンドを順番に管理・蓄積するキューです。アプリがMetalを使う際、まずこのキューを作成し、すべての描画コマンドはこのキューを通じてGPUに送られます。
MTLCommandBuffer(コマンドバッファ)
コマンドキューから生成される、1セットのGPUへの命令の集まりです。描画や計算などの指示を書き込み、実行単位としてGPUに送られます。1フレーム単位で作成されることが多いです。
MTLRenderPassDescriptor(レンダーパス記述子)
レンダリングのターゲット(描画先、色バッファや深度バッファ)の情報や、クリア(消去)動作などの設定をまとめた構造体です。これを使ってレンダリングの範囲と動作を指定します。
MTLRenderCommandEncoder(レンダーコマンドエンコーダ)
MTLCommandBufferから作成され、レンダリングの具体的なコマンド(頂点設定、描画指示など)をGPUに「エンコード(記録)」します。設定をまとめたパイプラインステートをセットし、頂点やテクスチャなどのリソースを渡して描画命令を入れるパイプです。
MTLRenderPipelineState(レンダーパイプラインステート)
GPUで使う描画パイプラインの設定情報の集まりで、頂点シェーダーやフラグメントシェーダー、レンダーターゲットのフォーマットなどを含みます。これをセットすることでGPUの描画動作が決まります。重い処理であるため使い回します。
描画の流れは、まずコマンドキューからコマンドバッファを作成し、レンダーパス記述子で描画ターゲットを指定しMTLRenderCommandEncoderを生成します。そこにパイプラインステートをセットし、頂点データやテクスチャをセット、drawPrimitives命令などで描画を指示し、endEncodingでエンコードを終わりにします。最後にコマンドバッファをGPUに送信して描画処理を実行します。この構造により、Metalは効率的にGPUへ描画処理を渡し高速に動作します。要点としては「コマンドをまとめて記録し、GPUに送るパイプラインを組み立てる」仕組みです