Sommaire
Salut 'nal,
Si tu suivi mon journal précédent, tu as maintenant les éléments de contexte pour programmer en 3D !
On va passer à la pratique avec un exemple OpenGL 1.1 (cf. spécification), qui correspond au code typique des années fin 90-début 2000. Mais qui, magie de la rétrocompatibilité, tourne encore très bien aujourd'hui.
Installer une "glu" de fenêtrage : SDL3
OpenGL s'occupe très peu du système de fenêtrage. Eh oui, ce n'est qu'une API de dessin : gérer les événements clavier-souris-fenêtre de l'OS est en dehors de son périmètre.
C'est ainsi que chaque système fournit sa bibliothèque maison pour ça :
- sous X11 : Mesa fournit l'API GLX directement dans la bibliothèque principale libGL. Cette fusion entre les deux est d'ailleurs une erreur de conception, qui sera évitée dans la future bibliothèque OpenGL ES pour l'embarqué ;
- sous Wayland (et récemment X11) : le Khronos Group fournit l'API "universelle" EGL ; […]
- les autres OS : ne supportent en réalité pas nativement EGL, on y utilise p.ex. ça ou ça ;
- et en général avec Vulkan : universel mais rien à voir 😛.
Vous l'avez compris, ce fatras nous éloigne du sujet… on va donc faire comme des milliers de codeurs avant nous : utiliser une bibliothèque de "glu" multi-plateforme ! (Free)GLUT et GLFW sont encore très utilisées…
Mais nous préférerons SDL 3 car elle supporte toutes les combinaisons ET nous aidera plus tard pour Vulkan.
Elle n'est juste pas encore empaquetée dans les distributions les plus courantes, alors installons-la rapidement :
Prérequis
Debian/Ubuntu :
sudo apt install build-essential git make \
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev
Fedora/RHEL :
sudo dnf install gcc git-core make cmake \
alsa-lib-devel pulseaudio-libs-devel pipewire-devel \
libX11-devel libXext-devel libXrandr-devel libXcursor-devel libXfixes-devel \
libXi-devel libXScrnSaver-devel dbus-devel ibus-devel \
systemd-devel mesa-libGL-devel libxkbcommon-devel mesa-libGLES-devel \
mesa-libEGL-devel vulkan-devel wayland-devel wayland-protocols-devel \
libdrm-devel mesa-libgbm-devel libusb1-devel libdecor-devel \
pipewire-jack-audio-connection-kit-devel
Compiler
git clone https://github.com/libsdl-org/SDL --branch release-3.2.20
cd SDL
cmake -S . -B build
cmake --build build -j `nproc`
Installer
cmake --install build --prefix $HOME/sdl3220
# configurer
sed -i 's!/usr/local!'"$HOME"'/sdl3220!g' $HOME/sdl3220/lib/pkgconfig/sdl3.pc
echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/sdl3220/lib"' >> $HOME/.profile
echo 'export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$HOME/sdl3220/lib/pkgconfig"' >> $HOME/.profile
# (pour éviter un redémarrage)
source $HOME/.profile
Tester
pkg-config --modversion sdl3
# (devrait vous renvoyer :)
3.2.20
La base de tout : la croix
Nous allons afficher une croix plate interpolée en 2D, composée de 4 points reliés : rouge, vert, bleu, blanc.
et utilisant ce code source C.
Pour le récupérer et me suivre pendant que je détaille, faites sur votre Linux :
git clone https://github.com/Tarnyko/suave_code_samples
cd suave_code_samples/tree/master/C/opengl-vulkan/
editor sdl3-gl1.c
Points & Coordonnées
Le repère orthonormé par défaut d'OpenGL s'étend de -1.0 à +1.0 sur tous les axes. Cela se change, mais nous conviendra très bien pour commencer 😉.
Si on place les 4 points plutôt vers le bord :
on choisit 0.8,-0.8 comme coordonnées symétriques :
ça se matérialise facilement en code :
#define LINES 2
static const GLfloat vertex_arr[LINES * 4] = { // 2 * 4 = 8 valeurs flottantes
-0.8f, 0.8f, 0.8f, -0.8f, // point ROUGE, point VERT
-0.8f, -0.8f, 0.8f, 0.8f, // point BLEU, point BLANC
};
(chacune des 2 lignes étant constituée de 2 points eux-mêmes définis par 2 coordonnées [X,Y], cela nous donne 2 x 2 x 2 = 8 coordonnées)
Couleurs
Pour les couleurs, bien qu'on puisse utiliser des flottants également, j'ai préféré la définition RGBA32/RGBA8888 beaucoup plus usitée (y compris chez les artistes).
Si un canal couleur est défini par un entier 8-bits, c'est-à-dire "2 exposant 8", c'est-à-dire une fourchette de 0 à 255…
…et qu'une couleur complète est définie par 4 entiers "ROUGE-VERT-BLEU-OPACITÉ" dans cet ordre précis…
… cela donne le code :
static const GLubyte color_arr[LINES * 8] = { // 2 * 8 = 16 valeurs entières
255, 0, 0, 255, 0, 255, 0, 255, // ROUGE, VERT
0, 0, 255, 255, 255, 255, 255, 255, // BLEU, BLANC (= tout au max)
};
Index
Nous venons donc de définir 2 tableaux ci-dessus :
- vertex_arr : "points", alias vertex
- color_arr : couleurs
Il nous à les associer avec un tableau d'index associatifs nommé index_arr :
static const GLuint index_arr[LINES * 2] = { // 2 * 2 = 4 points
0, 1, // point 1, point 2
2, 3, // point 3, point 4
};
Code
Voici la partie réellement technique de l'API !
On crée d'abord une fenêtre de taille 800x600 à l'aide de SDL :
window = SDL_CreateWindow([...], _width, _height, SDL_WINDOW_OPENGL); // _width = 800 ; _height = 600
puis à chaque itération se produisant aussi que possible (on n'a pas encore de limiteur de FPS, ce qui n'est pas si grave sans mouvement), on redessine sur l'intégralité de la fenêtre via ce bloc :
glViewport(0, 0, _width, _height); // contexte (au départ : 800x600)
[...]
case SDL_EVENT_WINDOW_RESIZED: { _width = e.window.data1; // mis à jour si redimensionnement !
_height = e.window.data2; }
_width et _height sont des variables globales qu'on a déjà utilisées pour créer la fenêtre ; on les refournit ici à glViewport() pour dessiner sur exactement la même taille, c'est-à-dire l'intégralité du fond de la fenêtre
(ce n'est pas obligatoire : un contexte OpenGL peut cohabiter avec d'autres éléments sur la même fenêtre, typiquement des widgets comme ici par exemple).
Elles sont globales ici, car on les autorise à être modifiées par un événement externe : SDL_EVENT_WINDOW_RESIZED déclenché par la souris de l'utilisateur, qui mettra à jour _width et _height avant la prochaine itération.
De cette manière, notre croix sera redimensionnée en même temps que la fenêtre (sans SDL, on devrait écrire un code beaucoup plus long et spécifique pour gérer cette partie "système". Vous voyez l'intérêt de la "glu" ?)
Finalement le dessin commence ! D'abord on dessine un fond noir sans rien :
glClearColor(0, 0, 0, 255); // NOIR
glClear(GL_COLOR_BUFFER_BIT); // ràz avec la couleur de glClearColor()
puis on fournit nos 2 tableaux vertex_arr & color_arr à OpenGL côté CPU/RAM, en indiquant comment les interpréter :
glEnableClientState(GL_VERTEX_ARRAY); // active fonction : "vertices CPU/RAM"
glVertexPointer(2, GL_FLOAT, 0, vertex_arr); // POINTS : groupes de 2 flottants (= [x,y])
glEnableClientState(GL_COLOR_ARRAY); // active fonction : "couleurs CPU/RAM"
glColorPointer(4, GL_UNSIGNED_BYTE, 0, color_arr); // COULEURS : groupes de 4 entiers 0-255 (= RGBA32)
Finalement, on fournit le dernier tableau index_arr pour lancer le dessin des 2 lignes :
glDrawElements(GL_LINES, 4, GL_UNSIGNED_INT, index_arr);
et on rafraîchit simultanément le contexte et la fenêtre :
SDL_GL_SwapWindow(window);
Compiler & exécuter
C'est le moment de tester !
gcc -std=c11 sdl3-gl1.c `pkg-config --cflags --libs sdl3` -lGL
./a.out
Remarques
Ce code fonctionne partout ; même sur Windows 95 ou RedHat 5/Mandrake 6 (1998) en mode logiciel 😉.
Il est par contre extrêmement rétro. Et pas juste dans sa forme, mais sa fonctionnalité :
- plutôt que stocker les informations de vertices et couleurs sur le GPU (qui sait le faire depuis environ 30 ans avec les VBOs), il les stocke uniquement en RAM centrale et les transfère à chaque itération au GPU ;
- il effectue un dessin côté CPU en mode immédiat plutôt que d'utiliser un shader stocké sur le GPU ;
Ces innovations apparaîtront respectivement dans OpenGL 1.5 (2003) et 2.0 (2004).
Concrètement en les utilisant pas, nous empêchons les GPU récents d'optimiser/paralléliser en retenant beaucoup d'état et de données dans notre programme. La programmation 3D récente utilise beaucoup plus d'appels et d'extensions dédiés au GPU lui-même.
Voilà ! Pour élargir ce tutoriel, seriez-vous plutôt intéressés par :
1. faire bouger la croix (ce qui nécessitera de créer un limiteur de FPS) ;
2. afficher 3 triangles formant une pyramide en 3D (ce qui nécessitera d'ajouter le repère [Z]) ?
… ou directement de passer à du code plus moderne avec shader et VBO 😉?
# Les trois mon capitaine...
Posté par RoyalPanda . Évalué à 7 (+6/-0).
… mais je suis pas bégueule, tu as tout ton temps :).
Intéressant en tout cas, merci !
[^] # Re: Les trois mon capitaine...
Posté par Tarnyko (site web personnel) . Évalué à 3 (+1/-0).
De rien :)
Dans ce cas, ce serait dans l'ordre présenté (mouvement->pyramide->shaders) car c'est optimal 😛.
[^] # Re: Les trois mon capitaine...
Posté par Jehan (site web personnel, Mastodon) . Évalué à 8 (+5/-0).
Oui c'est assez classique pour un tuto de présenter d'abord du code basique, pas optimisé, et qui fait les choses de la manière la plus simple possible ("simple" dans le sens de suivre par exemple les mathématiques que tout le monde connaît; même si ce code est potentiellement plus long et finalement plus complexe dans certains cas). Ou encore appelé une "implémentation naïve". Puis ensuite de passer à une réimplementation avec les spécificités d'un langage, ou d'une API, les optimisations, etc.
En tous cas, ça m'intéresse aussi de voir ce code évoluer (avec du mouvement, puis en 3D…) d'abord dans sa version naïve, puis de voir tout cela réimplémenté dans un second temps avec du code GPU, parallélisé, ou que sais-je encore.
Cette série de tutoriels s'avère prometteuse.
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]
[^] # Re: Les trois mon capitaine...
Posté par Tarnyko (site web personnel) . Évalué à 4 (+2/-0).
Merci du retour Jehan !
Et oui tu as bien résumé : ici on essaie de viser la simplicité d'abord, bien cerner une notion avant de la raffiner.
C'est en fait moins courant que l'on pense… à titre perso, j'ai trouvé beaucoup de code utilisant plein de fonctions mais mal expliqué. Et l'impact concret sur les performances, qui est ici plus qu'ailleurs le motif d'utiliser de nouvelles fonctions/extensions au détriment des anciennes ; alors là c'est le plus rare, et c'est pour ça que j'insiste sur cet aspect qui va bien avec le récit en mode "ligne de temps".
Merci encore ; on va voir si j'arrive à tenir le cap 😉.
[^] # Re: Les trois mon capitaine...
Posté par gUI (Mastodon) . Évalué à 5 (+2/-0).
Perso je pars de zéro (sûrement moins même) en matière de 3D (je joue peu à des jeux 3D). Même si j'ai vu la toute première génération de cartes 3D (matrox millenium, 3DFX…) j'ai jamais trop trempé dans le délire.
Ta façon d'aborder le sujet est parfaite pour moi, merci !
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Les trois mon capitaine...
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Je t'en prie ! Ravi que le format te plaise :-).
[^] # Re: Les trois mon capitaine...
Posté par jyes . Évalué à 3 (+1/-0).
Merci pour cette série passionnante, et accessible au débutant en 3D que je suis ! Pour la suite, ça ne me semble pas plus mal de suivre l’ordre optimal :-)
[^] # Re: Les trois mon capitaine...
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
On va faire comme ça alors !
Je vais lier un peu le tout pour qu'on ne se s'ennuie pas ;-)
# Mode direct
Posté par Julien Jorge (site web personnel) . Évalué à 7 (+5/-0).
Je m'attendais à voir du glBegin()/glEnd()… Était-ce déjà dépassé à l'époque ?
Sinon je vote pour les trois tutos aussi, comme mes prédécesseurs :)
[^] # Re: Mode direct
Posté par Tarnyko (site web personnel) . Évalué à 5 (+3/-0).
Ah bon sang, glBegin()/glEnd() ! Tu sais que je l'avais presque oublié ?
Pour ceux qui ne l'ont pas, c'est une très ancienne manière de dessiner, qui ressemble à ça (copie-collé direct de mes archives) :
À un moment vers la fin je parle de mode immédiat ; mais en fait c'est ça le vrai mode immédiat "à l'ancienne" ! Celui qui a dégagé le plus vite des API récentes (car intrinsèquement inoptimisable par le GPU).
Et donc pour te répondre, je ne l'utilise pas ici car :
- ça fait tellement longtemps que ça ne m'est juste pas venu (sans rire);
- ça aurait forcé à réécrire très vite cette partie, alors qu'avec la version par tableaux… eh bien tu verras qu'on pourra la réutiliser après, même avec le très restreint OpenGL ES 😉.
[^] # Re: Mode direct
Posté par Julien Jorge (site web personnel) . Évalué à 3 (+1/-0). Dernière modification le 17 septembre 2025 à 14:26.
C'était ainsi que les fameux tutoriels de NeHe présentaient OpenGL à l'époque. Je suis allé voir le site de la personne derrière ça, où il présente une brève histoire de ses tutos, c'est assez triste. Des années d'efforts et de partage à une époque où c'était clairement la meilleure ressource sur le sujet, pour ensuite se faire rabaisser et mépriser quand le mode direct est devenu dépassé :(
[^] # Re: Mode direct
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Ah ? J'ai cherché ce que tu décris chez lui directement, mais j'ai plutôt trouvé ça sur certains réseaux sociaux (je laisserai pas la capture super longtemps) :
C'est à ça que tu fais référence ?
[^] # Re: Mode direct
Posté par Julien Jorge (site web personnel) . Évalué à 3 (+1/-0). Dernière modification le 17 septembre 2025 à 15:33.
Dans la section NeHe Tutorials: Some History de https://nehe.me/
[^] # Re: Mode direct
Posté par Tarnyko (site web personnel) . Évalué à 4 (+2/-0).
Passionnant, merci.
J'ai supprimé la capture (elle persistera un peu par la magie du cache de LinuxFR…).
J'ai pas mal ri à :
et après je suis arrivé sur ta partie… déprimant. Mais je synthétiserai avec :
NeHE n'était donc que très peu payé en regard de son travail ; l'admiration de la commu était sa réelle rétribution. Sauf que cela créait des attentes disproportionnées, avec la fameuse toxicité du net par-dessus. Le coup de grâce étant d'être jugé après sur des tutos obsolètes qu'il ne peut ni mettre à jour ni supprimer (car hébergés chez d'anciens partenaires qui ont "rompu" avec lui en gardant son contenu).
Toutes proportions gardées et sans aller si loin en perso, j'ai vécu certaines de ces choses à une époque.
Ça apprend à prendre de la distance, à toujours prioritiser son fun personnel sur les attentes de truc ou bidule. L'avatar ultime du Chaos étant le mécène qui abuse de son statut pour te traiter comme une lavasse (il y a une vidéo récente où la situation m'a fait penser exactement à ça).
Perso je trouve qu'il a fait un super taf à l'époque, et qu'il a le droit de se retirer du game quand il veut sans rien devoir à personne. D'ailleurs moi aussi je posterai peut-être plus rien après ça, pas trop décu 😄?
[^] # Re: Mode direct
Posté par Jehan (site web personnel, Mastodon) . Évalué à 6 (+3/-0).
Cette remarque m'a intrigué donc j'ai dû chercher sur le web car je ne connais pas cette histoire. Pour les autres qui sont intrigués, voici le lien (ça vous évitera de chercher aussi!): https://nehe.me/
Cette histoire est triste en effet, et malheureusement bien trop courante. Combien de personnes "brûlées" parce qu'elles se sont approchées trop proche du soleil sans jamais l'atteindre pendant des décennies? Rien que cette semaine, je lisais ce post de blog d'un contributeur majeur, pendant 25 ans, de KDE qui arrête après avoir été déçu par d'autres contributeurs (sans commentaire de ma part sur qui a raison ou non car je ne connais pas ces gens, mais c'est une histoire de sous). Ou encore le mainteneur de libxml2 qui arrête après 12 ans de contribution sur cette bibliothèque majeure utilisée massivement. Il avait déjà partagé ses réticences par rapport aux mauvais acteurs du libre qui réclamaient toujours plus de lui (notamment les fameux "chercheurs" en sécurité qui pour beaucoup — pas tous mais énormément — relèvent plus de gens qui remplissent des lignes de CVs avec le genre de bugs basique que n'importe quel dév de base corrige à la pelle plutôt que perdre du temps à faire des "CVEs"), il y a quelques mois.
Enfin bon, les parasites pullulent malheureusement sur l'internet. Ils se nourrissent du travail des autres et s'en fichent totalement de les suffoquer (ils passeront juste à autre chose si la source se tarit).
Quant à ceux qui sont productifs, mais crachent sur le code historique (comme on le lit dans l'histoire de ce Nehe) et sur les anciens contributeurs… alors même que tout leur propre travail repose sur ce code historique (et que leur propre notoriété vient de ce fait! Car ils continuent sur une base de code qui a eu des décennies pour s'affiner et se faire connaître), c'est d'une vision court-termiste et d'un manque de classe total aussi. Perso dès que quelqu'un fait une remarque désobligeante sur un bout de code historique dans GIMP, je leur fais poliment remarquer que cela ne se fait pas et que sans ce bout de code, ils ne seraient pas là non plus (sans avoir connu ces développeurs historiques moi-même; car ce n'est pas la question). C'est malheureusement bien trop courant chez certains développeurs plus jeunes qui sont prompts à vouloir faire leurs marques et à prouver qu'ils sont meilleurs que les anciens, à vouloir faire table rase bien trop facilement, quitte à causer de nouveaux problèmes. Combien de fois ai-je calmé les ardeurs de nouveaux contributeurs qui voulaient juste tout casser pour faire "mieux" et n'en avaient rien à faire des usagers ou usages historiques.
C'est d'ailleurs aussi une tendance que je remarque dans des projets relativement récents (ça peut vouloir dire 10 ou 15 ans, hein!) qui font de super trucs d'un côté, mais de l'autre veulent soit tellement se démarquer soit juste refuser les usages historiques (sans pour autant avoir de solution autre à proposer pour les problématiques qu'ils jugent "obsolètes" mais qui sont pourtant présentes dans le monde réel) parce qu'ils ne les trouvent pas correspondant à leur vision idéalisée de "ce qu'il faut faire".
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]
[^] # Re: Mode direct
Posté par Jehan (site web personnel, Mastodon) . Évalué à 10 (+7/-0).
P.S.: y a un truc que j'aime bien dire régulièrement (dans des confs ou autre), c'est que l'expression "des nains sur des épaules de géants" est bidon, et c'est juste une vision marketing où on aime bien faire de certaines personnes des sortes de héros à idolâtrer. En fait, on est surtout tous des nains sur des épaules de nains! Une pyramide de nains quoi! 😄
Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]
[^] # Re: Mode direct
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Le truc Jehan, c'est que l'important n'est pas tant de commencer ou arrêter, mais juste de faire.
On peut se (sur-)impliquer pendant des années sur un super-projet, même pour la gloire ou les vibes au détriment de l'argent, et tout ça est également valide : tant qu'on y trouve son compte.
Après si la raison d'origine disparaît, il faut parfois se reposer la question la tête froide.
Humainement on persiste toujours un peu, car il y a le biais des coûts irrécupérables (appelé par moi "effet ex-copain/copine"). Qui n'est finalement pas si mal, sinon les situations difficiles ne seraient jamais sauvées. Mais j'ai bien peur qu'il n'y ait pas d'alternative entre la déprime et relativiser/s'endurcir un peu.
Le logiciel évolue très vite, les têtes pareil ; il faut plus s'attacher à ses qualité propres qu'à ça. Faire de soi-même un roc solide pour rester stable au milieu du courant (elle est bien celle-là ou 😄 ?).
[^] # Re: Mode direct
Posté par Julien Jorge (site web personnel) . Évalué à 7 (+5/-0).
C'est une chose d'arrêter un projet parce qu'il ne nous intéresse plus et ce n'est pas vraiment un problème à mon avis. Ce qui est embêtant c'est plutôt cette tendance à vouloir mépriser les méthodes du passé et ceux qui ont créé et diffusé ces pratiques à une époque où c'était nouveau. Trop d'articles et commentaires rabaissent d'anciennes pratiques à coup de come on, it's <insert current year> now et similaires, tous les outils récents se présentent comme « modernes ». C'est à mon sens une marque d'ignorance de l'histoire de l'informatique, en particulier une ignorance des pratiques qui nous ont amené là où nous sommes aujourd'hui. C'est très facile de mépriser les initiateurs d'anciennes pratiques une fois qu'on a des dizaines d'années de recul mais c'est oublier que eux aussi, à l'époque, considéraient qu'ils étaient modernes :)
[^] # Re: Mode direct
Posté par Tarnyko (site web personnel) . Évalué à 3 (+1/-0). Dernière modification le 17 septembre 2025 à 19:52.
Évidemment !
Après si tu me permets, je trouve que riposter au nom de NeHE face à ses harceleurs d'époque (à moins qu'il en reste aujourd'hui ?), c'est un bon rappel d'histoire. Un vrai drame de l'époque. Mais juste, une fois fait, un peu redondant ?
Car est-ce qu'on méprise ici ? Non ! Jamais 😃. On explique comment ça marchait avant, pourquoi on ne le fait plus, et on se sent temporairement un-peu-plus-moderne jusqu'à atteindre le prochain palier de l'API qui remettra nos acquis en question (pour le meilleur et pour le pire).
On espère que ça nous évitera de piétiner sur place. On honore les anciens, on remet le casque de chantier et on retourne au fourneau !
(exemple sans rapport : à titre perso, je ne suis pas plus attaché que ça à la POO. Je trouve que c'est une technique excellente sur un type de projet, "meh" sur d'autres, et contre-productive sur encore d'autres. Je ne trouve pas que c'est une technique obsolète, mais qu'elle a un cadre d'usage. Par contre je n'hésiterais pas à en faire la remarque à quelqu'un qui s'acharnerait à l'utiliser "parce que c'est toujours ce qu'il fait d'habitude", hors analyse du cadre)
# distro moderne
Posté par BAud (site web personnel) . Évalué à 3 (+1/-0). Dernière modification le 17 septembre 2025 à 01:57.
tu ne donnes des exemples que pour ubuntu et fedora ?
tu aurais pu donner l'exemple de Debian comme distribution moderne et à la pointe tout de même :
apt install libsdl3-0
et hop c'est bon ;-)
ok, c'est avec trixie (donc la stable actuelle, dans la continuité de bookworm) cf. https://packages.debian.org/search?suite=trixie§ion=all&arch=any&searchon=names&keywords=libsdl et oui c'est la SDL3 en version 3.2.10 (et non 3.2.20)
Avec Mageia, comme je suis en Cauldron (l'équivalent de sid ou de rawhide), je bénéficie d'un GNOME-49 en cours de finalisation (spa sec :/ c'est bien, ça permet de réessayer enlightenment, lxqt :D) et aussi de
lib64sdl3_0
en 3.2.20 (de l'intérêt d'une distribution en rolling-release pour le dév de la version suivante : j'ai les bugs en avance, mais aussi les fonctionnalitésavec leurs nouveaux bugs:p). Je laisse les archers et gentooistes défendre leur point de vue :D[^] # Re: distro moderne
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0). Dernière modification le 17 septembre 2025 à 06:41.
Ah je t'avoue : je suis plutôt sur des distributions LTS où le paquet n'existe pas encore.
Et du coup, merci beaucoup pour la procédure ! Même si à mon avis tu auras plutôt besoin de :
(le paquet "-dev" contient les headers etc… permettant de compiler avec GCC)
Alors là-dessus, anecdote (et peut-être que tu pourras me répondre) : j'utilisais au départ la version 3.2.0, mais qui avait un souci avec Wayland. Une mauvaise utilisation de la libdecor qui masquait la fenêtre, et pour laquelle j'avais écrit un patch.
Sauf qu'après en passant à la 3.2.20, j'ai vu qu'ils avaient corrigé le problème.
Mais du coup la 3.2.10 de Debian, pile entre les deux ? Eh bien ça pourrait se tester en lançant l'exemple comme ça :
Intéressé par ton retour là-dessus (si tu as le temps bien sûr !)
PS: et du coup Mageia Cauldron, c'est impeccable, même si là ça devient plutôt GNOME l'inconnue 😛.
[^] # Re: distro moderne
Posté par gUI (Mastodon) . Évalué à 4 (+1/-0). Dernière modification le 17 septembre 2025 à 08:17.
Pour info la compilation de la croix est passée crème sur Arch (KDE/Wayland) :
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: distro moderne
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Ah super 😀, très bon à savoir. Merci !
(j'ai des amis sous Arch, mais je voulais pas trop demander…)
# SDL 3
Posté par Eldermê . Évalué à 2 (+1/-0).
Merci pour ces journaux très intéressants sur la programmation 3D !
Après des débuts sur Glut, puis un passage par sfml, j'ai longtemps utilisé SDL2 pour mes développements / bidouilles divers en OpenGL, et je suis finalement passée sur GLFW. Les principales raisons étaient une légère préférence pour l'API de GLFW, et que SDL fait plein de trucs en plus dont je n'ai pas besoin ou que je préfère faire différemment. En ce moment, je découvre Vulkan parce que pourquoi pas et je suis restée sur GLFW. D'ailleurs, le tuto que je suis pour Vulkan utilise GLFW, je ne l'ai donc pas remis en question par simplicité.
Je n'avais pas fait attention qu'une 3ème version de SDL est sortie, quasi toute neuve d'ailleurs. Est-ce que tu pourrais m'en dire plus les raisons de ta préférence pour SDL3 ?
[^] # Re: SDL 3
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0). Dernière modification le 19 septembre 2025 à 12:14.
Hello et cool que ça te plaise !
Aaah Glut… le vieil exemple que j'ai retrouvé l'utilisait encore. Et bien que je ne l'aie jamais utilisé, j'ai effectivement vu énormément de GLFW sur les codes Vulkan récents !
Tu n'as pas entièrement tort sur SDL. Il fait beaucoup de choses, et d'ailleurs on pourrait juste dessiner avec son API haut niveau en lui laissant sélectionner le moteur (OpenGL ou autre)… si ce n'était pas le sujet principal du tuto ;-).
Ce qui a motivé mon choix :
- (le point perso dont tout le monde se fiche) je fais un portage avec en ce moment ;
- un meilleur support fenêtrage de Wayland, visible en comparant le nombre de protocoles supportés par SDL2 contre SDL3 ;
- le code Vulkan à venir sera très long, je pense que tu vois ce que je veux dire… une fois démontré la première fois, je projette d'utiliser les nouvelles fonctions de SDL_GPU pour le raccourcir et se concentrer sur la boucle de rendu.
Qu'en penses-tu ?
[^] # Re: SDL 3
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Ah zut, je ne peux plus éditer, mais je comparais aussi avec le support Wayland de GLFW : au doigt mouillé, c'est entre les 2.
En vrai c'est loin d'être si important, la plupart n'utiliseront jamais tous ces protocoles, et nous alors… mais il y en a un dont je voulais être 100% sûr (même si GLFW a aussi l'air de le supporter) c'est le "pointer lock" pour verrouiller la souris dans une fenêtre ; et hors bas niveau je ne l'avais testé que là 😓.
[^] # Re: SDL 3
Posté par Eldermê . Évalué à 2 (+1/-0).
Merci pour ton retour ! Je jetterai un oeil aux différences entre les 2 en terme de support, mais il y a des chances que ce qui tranche pour moi soit le même type de "point perso dont tout le monde se fiche" : si les différences sur ce dont j'ai besoin ne sont pas significatives, autant ne pas changer de bibliothèque.
Haha, je vois carrément ce que tu veux dire ! Quand j'ai suivi le tuto Vulkan, j'ai pas compté les heures mais il m'a fallu plusieurs soirées pour simplement afficher fièrement un bête triangle !
C'est une très bonne idée en effet de ne le faire qu'une fois, et ensuite puisqu'il y a des fonctions SDL qui font ça, de les laisser gérer une partie du travail déjà montré pour que la suite ne soit pas noyée dans ce qui a déjà été fait.
[^] # Re: SDL 3
Posté par Tarnyko (site web personnel) . Évalué à 2 (+0/-0).
Oui voilà ! C'est beaucoup une question d'habitude, et là on ne les utilise pas (encore) de manière assez poussée pour voir la différence.
On se comprend 😄.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.