Use when working with ANY GPU rendering, Metal, OpenGL migration, shaders, 3D content, RealityKit, AR, or display performance. Covers Metal migration, shader conversion, RealityKit ECS, RealityView, variable refresh rate, ProMotion.
You MUST use this skill for ANY GPU rendering, graphics programming, 3D content display, or display performance work.
Use this router when:
Strategy decisions → See skills/metal-migration.md
API reference & conversion → See skills/metal-migration-ref.md
Diagnostics → See skills/metal-migration-diag.md
Frame rate & render loops → See skills/display-performance.md
For 3D content in non-game SwiftUI apps, AR experiences, and spatial computing, use the RealityKit skills. For game-specific RealityKit patterns, use the axiom-games router instead.
Architecture, ECS, and best practices → See skills/realitykit.md
API reference → See skills/realitykit-ref.md
Troubleshooting → See skills/realitykit-diag.md
| Thought | Reality |
|---|---|
| "I'll just translate the shaders line by line" | GLSL→MSL has type, coordinate, and precision differences. metal-migration-ref has conversion tables. |
| "MetalANGLE will handle everything" | Translation layers have significant limitations for production. metal-migration evaluates the trade-offs. |
| "It's just a black screen, probably a simple bug" | Black screen has 6 distinct causes. metal-migration-diag diagnoses in 5 min vs 30+ min. |
| "My app runs at 60fps, that's fine" | ProMotion devices support 120Hz. display-performance configures the correct frame rate. |
| "I'll just use SceneKit for the 3D model" | SceneKit is soft-deprecated. RealityView and Model3D are the modern path. axiom-realitykit covers SwiftUI integration. |
| "I don't need ECS for one 3D model" | Model3D shows one model with zero ECS. RealityView scales to complex scenes. axiom-realitykit shows both paths. |
metal-migration:
metal-migration-ref:
metal-migration-diag:
display-performance:
axiom-realitykit (non-game 3D):
axiom-realitykit-ref (API):
User: "Should I use MetalANGLE or rewrite in native Metal?"
→ See skills/metal-migration.md
User: "I'm porting projectM from OpenGL ES to iOS"
→ See skills/metal-migration.md
User: "How do I convert this GLSL shader to Metal?"
→ See skills/metal-migration-ref.md
User: "Setting up MTKView for the first time"
→ See skills/metal-migration-ref.md
User: "My ported app shows a black screen"
→ See skills/metal-migration-diag.md
User: "Performance is worse after porting to Metal"
→ See skills/metal-migration-diag.md
User: "My app is stuck at 60fps on iPhone Pro"
→ See skills/display-performance.md
User: "How do I configure CADisplayLink for 120Hz?"
→ See skills/display-performance.md
User: "ProMotion not working in my Metal app"
→ See skills/display-performance.md
User: "How do I show a 3D model in my SwiftUI app?"
→ See skills/realitykit.md
User: "I need to display a USDZ model"
→ See skills/realitykit.md
User: "How do I set up RealityView?"
→ See skills/realitykit-ref.md
User: "My 3D model isn't showing in RealityView"
→ See skills/realitykit-diag.md
User: "How do I use RealityRenderer with Metal?"
→ See skills/realitykit-ref.md
User: "I need AR in my app"
→ See skills/realitykit.md