Avant de commencer
Ce livre est né d'un constat simple : l'API Metal n'a pas son LearnOpenGL.com !
En dehors de la documentation d'Apple — dense, uniquement en anglais, parfois datée et rarement pensée comme un parcours progressif — il n'existe presque aucune ressource sérieuse sur Metal. Ce site comble ce vide.
Tu vas apprendre à programmer le GPU directement, en C++ et en MSL, sur Apple Silicon. Pas de framework tiers, pas d'abstraction opaque — on utilisera metal-cpp, le wrapper C++ officiel d'Apple : une fine couche de headers au-dessus de l'API Objective-C native. Même ABI, zéro overhead, et on reste en C++ pur.
Swift — bindings natifs, très propres, c'est ce qu'Apple met en avant.
Objective-C — l'API Metal d'origine, toujours supportée à 100 %.
Que tu sois débutant, passionné ou adepte du vibe coding, ces tutoriels sont faits pour toi. Bienvenue dans la communauté !
Ce livre contient beaucoup de liens Wikipédia. Il est recommandé de les consulter en anglais — les articles techniques anglophones sont systématiquement plus complets, mieux sourcés, et plus à jour que leurs équivalents français.
La très grande majorité de la documentation (pages man, samples Apple Metal, références C++, PDF de spécification, …) est en anglais également.
Ce dont tu as besoin
Matériel
Ce livre est écrit sur un M2 Pro, qui expose Metal 4 — mais pas encore les Mesh Shaders (disponibles à partir du M3). Tout le code de ce livre est testé sur cette configuration. Un Mac avec d'une puce Apple Silicon M1 ou plus récent suffit.
Sur les puces M, le CPU et le GPU partagent physiquement la même mémoire. Un buffer GPU n'est pas une copie — c'est le même bloc d'octets. Ça change fondamentalement la façon de concevoir un pipeline de données.
↘ Vérifier ton environnement (clang, xcrun, SDK)
Logiciel
Xcode (gratuit sur le Mac App Store) — version 15 minimum.
Terminal (pré-installé). Il te fera gagner un temps considérable.
Comment lire ce livre
Chaque chapitre suit à peu près la même structure :
- Un concept, expliqué avec les maths qu'il faut
- Le terme technique lié à sa page Wikipédia — de préférence en anglais
- Le code Metal correspondant, compilable tel quel via un Makefile
- Parfois, un sample Apple officiel qui illustre le concept ↗ Apple Samples
Tous les projets de ce livre se compilent en ligne de commande avec make. Aucun projet Xcode n'est imposé — même si on l'utilisera aussi — et tu comprends exactement ce qui se passe à chaque étape de compilation.
Le chapitre Makefile fournit un modèle de base très solide que l'on réutilisera pour l'intégralité du cours.
Notre communauté est là pour te répondre.
Configuration de l'environnement de travail recommandé
Deux approches, toutes les deux valables :
Makefile
Xcode
Ø„Ø — Étape 1 — Création du projet
Nouveau Projet → Multi-plateforme → Jeu → Metal → Objective-C
Ø„Ø — Étape 2 — Suppression du storyboard
Supprimer le fichier Storyboard → Main.storyboard → Supprimer l'emplacement sélectionné en bleu sur la capture d'écran → Main storyboard file base name (macOS).
Nous utiliserons une application partagée, entièrement pilotée depuis le code.
Ø„Ø - Étape 3 — Récupérer metal-cpp et ses extensions
Points importants concernant la documentation Apple (metal-cpp) (que tu dois suivre), elle ne contient pas les wrapper d'extensions (metal-cpp-extensions) de l'API Metal dans ce que tu es invité à télécharger.
Comme tu peux le voire sur la capture d'écran, le fichier compressé metal-cpp_26.4.zip dans lequel se trouve le dossier de fichiers metal-cpp ne contient pas les Wrappers AppKit & MetalKit.
Deux solutions s'offrent à toi : soit le trouver dans le projet de la WWDC2022 sur le lien soit cloner le repository du cours :
# Shell
git clone https://github.com/remdal/Metal-x-C---LearnMSL.dev.git learnmsl
Il se trouve dans le dossier Frameworks/.
*„* - Étape 4 — Régler le projet
Trois réglages à modifier dans Build Settings, au même endroit que la capture de l'étape 2. Utilise le champ de recherche en haut à droite :
- Dans Build Settings → Recherche →
- Apple Clang - Language C++ → C++ Language Dialect →
C++17 [-std=c++17] - Dans Header Search Paths → Frameworks → recursive. Il doit être écrit
Frameworks/** - Apple Clang - Custom Compiler Flags → Other C++ Flags →
-fno-objc-arc(double-click)
C++
-fno-objc-arc : metal-cpp gère lui-même les compteurs de références.Quelques rappels
Un pixel (picture element) est la plus petite unité adressable d'un écran : une case dans une grille 2D — ton framebuffer — qui stocke une couleur.
Un écran 1920×1080 contient 2 073 600 cases ; un écran 1280×720 en contient 921 600. Le GPU remplit ces cases à chaque frame.
En Metal, ces cases sont alimentées par des fragments : ce que produit la fonction de fragment, un float4 (R, G, B, A). Attention, un fragment n'est pas exactement un pixel — plusieurs fragments peuvent contribuer à la même case (recouvrement, MSAA) et certains sont éliminés avant d'être écrits (test de profondeur, discard).
Physiquement, un pixel est composé de trois sous-pixels — rouge, vert, bleu. C'est leur intensité relative qui produit la couleur perçue.
Certains panneaux ajoutent un quatrième sous-pixel blanc (RGBW sur certains LCD, WRGB sur les OLED de téléviseurs) pour gagner en luminosité.
L'alpha, lui, n'existe pas côté écran : c'est une notion purement logicielle qui indique au GPU « à quel point ce fragment est-il opaque ? », pour le blending.
L'ordre des chapitres compte pour pouvoir essayer les pratiques en direct. Et si tu ne comprends pas certaines choses, avance et tu peux y revenir plus tard. Prends tout de même note du code dans ton projet du cours pour être raccord avec la suite.
Chaque chapitre est autonome, mais l'ordre compte : les exemples se construisent les uns sur les autres et tu peux les tester au fur et à mesure. Si un point te résiste, avance et reviens-y plus tard — pense simplement à reporter le code dans ton projet du cours pour rester raccord avec la suite.