Désafficher une texture en SDL/C++
Fermé[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 24 mai 2023 à 12:21
- Désafficher une texture en SDL/C++
- Sdl no available video device ✓ - Forum C
- Minecraft 1.0 texture glitch - Forum Minecraft
- Exercice sur la texture du sol - Forum Loisirs / Divertissements
- Bug texture fortnite - Forum jeux en ligne
- SDL ou SDL2 !?! - Forum C
1 réponse
Modifié le 24 mai 2023 à 12:56
Salut Xaecoremixx,
je n'arrive pas à les désafficher, ce qui est problématique pour les déplacements d'images tels que les monstres ou l'avatar du joueur.
J'ai cherché sur internet comment le faire, mais la seule chose que j'ai trouvé me parle de réafficher toutes les textures par dessus la texture qu'on veut désafficher.
La boucle d'animation ne fonctionne pas comme cela. A chaque itération tu dois redessiner complètement l'écran.
En gros, ta boucle resseble à ceci :
-
tu utilises SDL_RenderClear() pour vider le renderer avec la couleur de dessin par défaut (par exemple le noir si tu as définit cette couleur)
-
tu copies ta texture à un autre endroit avec SDL_RenderCopy() et, plus généralement, tu envoies au renderer tous les éléments nécessaires au dessin complet de l'écran
-
tu utilises SDL_RenderPresent() pour afficher le résultat à l'écran
(bien sûr dans la boucle tu gères aussi les entrées éventuelles du clavier, souris, joystick, mais là ta question porte sur l'affichage)
Les textures de SDL sont gérées au niveau de la carte graphique, sur la VRAM en utilisant l'accélération matérielle.
Sur un ordinateur moderne, le fait de devoir effacer tout l'écran et de devoir le redessiner complètement à chaque itération n'est pas problématique. Tu dois même gérer un temps d'attente pour éviter que ton FPS n'explose les ressources du processeur pour les opérations gérées par celui-ci en faisant tourner inutilement à fond la boucle.
Théoriquement, tu pourrais, au lieu de faire SDL_RenderClear() gérer pour chaque objet que tu veux faire "bouger" deux sprites : un qui conserve le fond d'écran tel qu'il est avant de dessiner à un endroit donné et un autre qui représente ce que tu veux dessiner.
En pratique, cela complique considérablement la gestion de ta boucle pour un gain très discutable.
Cela serait totalement inadapté aux textures qui reposent sur l'usage du GPU et il faudrait travailler avec les surfaces qui utilisent le CPU.
avez-vous une recommandation pour une bibliothèque graphique haut niveau qui permette de désafficher des images ?
Non, mais je ne les connais pas toutes.