Metal ist die Low-Level-Grafik- und Compute-API von Apple für iOS, macOS, iPadOS und tvOS. Sie wurde 2014 mit iOS 8 und OS X Yosemite eingeführt und ersetzt auf Apple-Plattformen nach und nach OpenGL: Ab macOS 10.14 Mojave (2018) gilt OpenGL als veraltet. Metal erlaubt direkten Zugriff auf die GPU und gilt als Gegenstück zu Vulkan, Direct3D 12 und WebGPU.

Kernobjekte

Die Metal-API ist objektorientiert aufgebaut. Die wichtigsten Typen:

  • MTLDevice: Repräsentiert die GPU; Einstiegspunkt ist MTLCreateSystemDefaultDevice().
  • MTLCommandQueue: Verwaltet die Warteschlange der Kommandos (makeCommandQueue()).
  • MTLCommandBuffer: Sammelt alle Encoder-Aufrufe eines Frames (makeCommandBuffer()).
  • MTLRenderCommandEncoder: Zeichnet Geometrie, setzt Pipeline und Ressourcen (makeRenderCommandEncoder()).
  • MTLRenderPassDescriptor: Beschreibt Ziel-Farb- und Tiefenpuffer des Render-Passes.

Pipeline aufbauen

Shaders werden in der Metal Shading Language (MSL) geschrieben, einer auf C++11 basierenden Sprache, die von LLVM und Clang übersetzt wird. Der Ablauf:

// Kompilieren im Terminal
xcrun metal -c shader.metal -o shader.air
xcrun metallib shader.air -o default.metallib

Zur Laufzeit lädt man die Bibliothek (makeLibrary()), beschreibt ein MTLRenderPipelineDescriptor mit Vertex- und Fragment-Funktion und erzeugt die Pipeline per makeRenderPipelineState(). Danach werden Vertex-Puffer über setVertexBytes() beziehungsweise setVertexBuffer() gebunden und mit drawPrimitives() gezeichnet.

Compute-Shader

Neben Grafik unterstützt Metal auch GPU-Compute: Ein MTLComputeCommandEncoder setzt die Kernel-Funktion (setComputePipelineState()) und verteilt die Arbeit über dispatchThreadgroups(). Damit lassen sich Bildverarbeitung, Simulationen und Machine-Learning-Aufgaben direkt auf der GPU ausführen. Metal 4 (WWDC 2025) integriert Tensoren als Datenstrukturen direkt in die API und die Shading-Sprache.

Werkzeuge

  • Xcode: integrierter Metal-Debugger, Frame-Capture und Metal System Trace.
  • Metal Performance Shaders: vorgefertigte, optimierte Kernels für Bild- und Matrixoperationen.
  • MetalFX: Upscaling- und Temporal-Anti-Aliasing-Technik für Spiele.

Verwandte Themen: OpenGL-Befehle, HLSL-Befehle, C/C++-Befehle.