Écrire un jeu vidéo à partir de zéro comme en 1987
Ce que nous construisons
- La 11e version du protocole X est née en 1987.
- X11 est un modèle antérieur à l’arrivée des GPU, il s’accorde donc mal avec le matériel actuel.
- Tous les systèmes Unix disposent d’un serveur X, et il est aussi possible d’exécuter des applications Linux avec interface graphique sur macOS et Windows.
- Le protocole X11 est relativement simple et l’on peut commencer simplement en créant un socket.
- Pour les applications 2D, il est possible de fonctionner sans interagir avec le GPU.
Authentification
- Dans l’article précédent, la connexion au serveur X se faisait sans authentification.
- Désormais, le protocole d’authentification X est pris en charge.
- C’est nécessaire parce que certains environnements de bureau utilisant XWayland exigent une authentification.
- L’authentification est gérée via le mécanisme MIT-MAGIC-COOKIE-1.
Ouvrir une fenêtre
- Un socket de domaine UNIX est ouvert pour communiquer avec le serveur X.
- Une connexion au serveur est établie via le handshake X11.
- Un contexte graphique est créé et une fenêtre est ouverte.
- L’appel
map_window est utilisé pour afficher la fenêtre.
Chargement des ressources
- Les images nécessaires au jeu sont chargées puis converties vers le format d’image X11.
- Un Pixmap est créé, l’image est téléversée, puis les parties nécessaires sont copiées dans la fenêtre.
L’avis de GN⁺
- La simplicité de X11 : le protocole X11 est relativement simple, au point qu’il est possible de communiquer directement via un socket. Cela aide les ingénieurs débutants à comprendre les bases du réseau et des interfaces graphiques.
- Potentiel d’optimisation : en utilisant des buffers hors écran comme Pixmap, on peut téléverser une image une seule fois puis la recopier rapidement ensuite. C’est un bon exemple d’optimisation des performances.
- Les atouts du langage Odin : le langage Odin fournit des fonctionnalités qui simplifient des tâches complexes comme la gestion mémoire. Cela permet une programmation plus efficace.
- Prise en charge des systèmes anciens : cette méthode peut aussi fonctionner sur de vieux systèmes. C’est utile lorsqu’un logiciel doit s’exécuter dans des environnements variés.
- Ressource d’apprentissage : manipuler directement un protocole bas niveau comme X11 aide grandement à comprendre le fonctionnement interne des interfaces graphiques. Cela peut contribuer à faire progresser les compétences des ingénieurs.
1 commentaires
Commentaires Hacker News
Premier commentaire : Les PC de 1987 avaient 1 à 2 Mo de RAM, et la Super NES disposait de 128 Ko de RAM. On produisait des exécutables bien plus petits que les programmes de Microsoft. Lien
Deuxième commentaire : X11 est ancien, mais si l’on implémente seulement les fonctionnalités de base nécessaires au développement de jeux, il n’y a pas besoin de se soucier du reste. Utiliser Xlib peut simplifier le travail.
Troisième commentaire : J’ai développé un clone du Démineur pour PC DOS en Turbo Pascal. J’ai rencontré des problèmes d’algorithme récursif sur les grands niveaux, et j’ai ajouté une fonctionnalité permettant de choisir une position de départ sûre.
Quatrième commentaire : Développer un jeu en 1987 était bien plus difficile qu’aujourd’hui. DOS ne prenait pas en charge le multitâche, ce qui rendait le flux de travail très inefficace. Lien
Cinquième commentaire : J’ai été déçu par la taille minimale de 50 Mo des fichiers wasm du moteur Godot. Surtout pour des jeux 2D simples, une optimisation est nécessaire. Dans l’ensemble, c’était impressionnant.
Sixième commentaire : La langue Odin a éveillé mon intérêt. Comme Zig, Odin transmet un allocateur mémoire aux fonctions, mais dispose d’un mécanisme qui permet de le gérer plus simplement.
Septième commentaire : Le Démineur de Windows 3.1 avait un code de triche. En entrant une certaine combinaison de touches, on pouvait distinguer les cases sûres de celles contenant des bombes.
Huitième commentaire : Avec une bibliothèque comme SDL, il n’y a pratiquement pas de surcoût et l’on peut prendre en charge divers systèmes d’exploitation. En utilisant l’ancienne branche SDL 1.x, il est même possible de prendre en charge d’anciennes versions de Linux.
Neuvième commentaire : L’exécutable Windows de Mines de Simon Tatham pèse environ 180 KiB. Lien