« Programmation avec la SDL/Les surfaces » : différence entre les versions

Contenu supprimé Contenu ajouté
Ajout du paragraphe modifier une surface
Ligne 105 :
SDL_QueryTexture(maTexture,NULL,NULL,&maTexture_position.w,&maTexture_position.h); //permet d'initialiser correctement maTexture_position.w et maTexture_position.h.
 
SDL_RenderCopy(renderer,maTexture,NULL,&maTexture_position);//Attention, cette fonction doit se trouver à l'intérieur de votre boucle d'affichage,
//sinon, elle ne s'affichera que pendant une milliseconde au début de votre programme
//pour un exemple de code plus complet, voir le TP1
</source>
 
Ligne 114 ⟶ 116 :
SDL_DestroyTexture(maTexture);
</source>
 
Si vous avez essayé d'afficher une surface et que vous n'y êtes pas arrivé, il se peut que ce soit parce que votre surface est complètement noire étant donné qu'il n'y a rien dessus et que , par conséquent si votre fond est noir, vous ne la voyez pas. Il est également possible que vous ayez pla
 
===Affichage avancé===
Ligne 129 ⟶ 133 :
*La destination est un rectangle relatif à la texture dans lequel on va afficher la source. En fait, c'est comme si l'on considérait que la source était une nouvelle texture de la taille du rectangle relatif à la texture et qu'on l'affichait à la position indiquée par la destination. Quand à la largeur et à la hauteur de la destination, on s'arrangera pour que ce soit les mêmes que la taille et la hauteur de la source, ce qui explique pourquoi dans le code précédent on a eu besoin de faire appel à la fonction '''SDL_QueryTexture''' pour récupérer la largeur et la hauteur de la texture dans son entier.
 
==CouleursModifier etune transparencesurface==
Maintenant que nous savons afficher une surface, il est temps de pouvoir la modifier.
{{...}}
 
==Modifier manuellement la surface==
===Colorier un rectangle===
{{...}}
La principale fonctionnalité des surfaces consiste à colorier les rectangles. En théorie, il suffirait de cela pour créer n'importe quelle image si on remplit la surface pixel par pixel et c'est d'ailleurs souvent ce que l'on fait lorsqu'on veut créer des formes géométriques tels que des cercles. On utilise pour cela les fonctions
<source lang = "c">
int SDL_FillRect(SDL_Surface* dst , const SDL_Rect* rect , Uint32 color);
int SDL_FillRects(SDL_Surface* dst , const SDL_Rect* rects , Uint32 color);
</source>
 
Comme vous l'aurez probablement deviné, la première fonction remplit un seul rectangle (l'argument ''rect'' est un pointeur vers un unique ''SDL_Rect'') et la seconde en remplit autant qu'on veut (''rects'' est un tableau d'éléments de type ''SDL_Rect''). Ainsi, la fonction '''SDL_Rects''' permet de remplir les rectangles ''rects'' de la surface ''dst'' (pour destination) avec la couleur ''color''. Voici par exemple comment colorier une surface entière en rouge :
<source lang = "c">
SDL_Surface *surface = SDL_CreateRGBSurface(0,100,100,32,0,0,0,0);
SDL_Rect surface_rect = {0,0,100,100};
SDL_FillRect(surface; &surface_rect; SDL_MapRGB(surface->format,255,0,0));
</source>
 
Vous avez sans doute remarqué que l'on a utilisé dans ce code une nouvelle fonction : '''SDL_MapRGB'''. Celle-ci demande en argument le format de la couleur puis la valeur en rouge, vert et bleu de la couleur que vous voulez envoyer. Pour le format, envoyez toujours le format de la surface que vous êtes en train de modifier puisqu'il faut que les deux formats correspondent.