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.