SDL2 Utilisation de la fonction SDL_Blitsurface()
Résolu
poparnassus
Messages postés
426
Date d'inscription
Statut
Membre
Dernière intervention
-
poparnassus Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
poparnassus Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
Salut la team,
J'ai un probleme sur l'utilisation de la fonction
Je suis sous Win7 avec Code::block, je n'arrive pas à utiliser le 4eme parametre de la fonction qui est donc la position, je develeoppe:
Ca c'est mon morceau de code où pour le cas statueCAM == 0 J'affiche CAMERA OFF et ma fenetre qui affiche la camera doit disparaitre (le SDL_Rect de la fenetree camera c'est " camera->Rcamera ").
Et pour le cas ou " statueCAM ==1 " J'affiche camera on et la je balance les images de la camera dans ma surface Rcamera !
PROBLEME; Jusqua present j'ai utiliser cette fonction pour copier les image static
J'aimerai des explication sur l'utilisation de
Ca provient du Wiki sdl, j'arrive pas à utiliser le dernier parametre en passant par ma structure
ecran->SimageFond_1 = La surface ou j'ai chargé mon image
NULL = Car je copie l'integralité de l'image sur la surface cible
camera->Rcamera = Surface cible
? = Position de mon image , que j'arrive pas a integrer .....
J'ai un probleme sur l'utilisation de la fonction
SDL_BlitSurface();!!!
Je suis sous Win7 avec Code::block, je n'arrive pas à utiliser le 4eme parametre de la fonction qui est donc la position, je develeoppe:
Ca c'est mon morceau de code où pour le cas statueCAM == 0 J'affiche CAMERA OFF et ma fenetre qui affiche la camera doit disparaitre (le SDL_Rect de la fenetree camera c'est " camera->Rcamera ").
Et pour le cas ou " statueCAM ==1 " J'affiche camera on et la je balance les images de la camera dans ma surface Rcamera !
PROBLEME; Jusqua present j'ai utiliser cette fonction pour copier les image static
SDL_RenderCopy(ecran->renderer1, menu_haut->TstatueCAM, NULL, &menu_haut->RstatueCAM );, en revanche j'arrive pas a les supprimer, sauf si je rempli de la couleur blanche mon rectangle, mais ca me fait un joile troue dans mon image de fond ...
J'aimerai des explication sur l'utilisation de
SDL_BlitSurface();sur le dernier parameter
Ca provient du Wiki sdl, j'arrive pas à utiliser le dernier parametre en passant par ma structure
menu_gauche->Rcamera
int SDL_BlitSurface(SDL_Surface* src, const SDL_Rect* srcrect, SDL_Surface* dst, SDL_Rect* dstrect)
SDL_blitSurface(ecran->SimageFond_1,NULL,camera->Rcamera, ?)
ecran->SimageFond_1 = La surface ou j'ai chargé mon image
NULL = Car je copie l'integralité de l'image sur la surface cible
camera->Rcamera = Surface cible
? = Position de mon image , que j'arrive pas a integrer .....
<souligne>prototype.h</souligne> typedef struct camera camera; struct camera { SDL_Surface *SimageFondCam; SDL_Texture *TimageFondCam; SDL_Rect Rcamera; SDL_Surface *Scamera; SDL_Texture *Tcamera; }; <souligne>affichage.c</souligne> ... if(menu_haut->statueCAM == 0) //camera deconnecter { SDL_SetRenderDrawColor(ecran->renderer1,255,201,14,0); //orange SDL_RenderFillRect(ecran->renderer1, &menu_haut->RstatueCAM); menu_haut->SstatueCAM = TTF_RenderText_Blended(ecran->police, " Camera OFF ",ecran->couleurNoire); menu_haut->TstatueCAM = SDL_CreateTextureFromSurface(ecran->renderer1, menu_haut->SstatueCAM); SDL_RenderFillRect(ecran->renderer1, &menu_haut->RstatueCAM ); SDL_QueryTexture(menu_haut->TstatueCAM, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_haut->TstatueCAM, NULL, &menu_haut->RstatueCAM ); SDL_RenderPresent(ecran->renderer1); //SDL_SetRenderDrawColor(ecran->renderer1,0,0,0,0); //SDL_RenderFillRect(ecran->renderer1, &camera->Rcamera); } else if (menu_haut->statueCAM == 1) //Camera connecter { int w = 5 , h = 5; SDL_SetRenderDrawColor(ecran->renderer1,63,241,58,0); //vert SDL_RenderFillRect(ecran->renderer1, &menu_haut->RstatueCAM); menu_haut->SstatueCAM = TTF_RenderText_Blended(ecran->police, " Camera ON ",ecran->couleurNoire); menu_haut->TstatueCAM = SDL_CreateTextureFromSurface(ecran->renderer1, menu_haut->SstatueCAM); SDL_RenderFillRect(ecran->renderer1, &menu_haut->RstatueCAM ); SDL_QueryTexture(menu_haut->TstatueCAM, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_haut->TstatueCAM, NULL, &menu_haut->RstatueCAM ); SDL_SetRenderDrawColor(ecran->renderer1,255,255,255,255); SDL_RenderFillRect(ecran->renderer1, &camera->Rcamera); SDL_RenderPresent(ecran->renderer1); } ...
1 réponse
SDL_BlitSurface() permet de copier une surface sur une autre, exactement comme SDL_RenderCopy() copie une texture sur un renderer. Le dernier paramètre est quasiment le même: il s'agit du SDL_Rect qui indique la position à laquelle il faut copier la surface (les membres w et h sont ignorés, seuls x et y importent). Finalement donc une seule différence entre le 4ème paramètre de SDL_BlitSurface() et celui de SDL_RenderCopy(), c'est que SDL_RenderCopy est capable d'étirer ou de rétrécir la texture au moyen des membres w et h (que SDL_BlitSurface() ignore).
Mais SDL_BlitSurface() n'est plus utile et dépassée en SDL2, je ne comprends par ton problème avec SDL_RenderCopy()... En SDL, on nettoie toujours le renderer (avec SDL_RenderClear() et une couleur que tu choisis avec SDL_
SetRenderDrawColor()) avant de commencer à tracer, ce qui efface tout. Il ne faut pas avoir peur de retracer l'écran en entier dès qu'on modifie un petit détail, c'est ce que tout le monde fait.
Mais SDL_BlitSurface() n'est plus utile et dépassée en SDL2, je ne comprends par ton problème avec SDL_RenderCopy()... En SDL, on nettoie toujours le renderer (avec SDL_RenderClear() et une couleur que tu choisis avec SDL_
SetRenderDrawColor()) avant de commencer à tracer, ce qui efface tout. Il ne faut pas avoir peur de retracer l'écran en entier dès qu'on modifie un petit détail, c'est ce que tout le monde fait.
Par contre j'ai un autre probleme que je n'arrive pas a identifié, j'ai une fonction chargement_image() qui est appeler dans la boucle principale, cette fonction definit mon rendu sur mon interface, donc j'ai mis une jolie petite image "Quitter" j'aai definit le SDL_Rect, SDL_Surface je la charge dans la fonction chargement_image(), elle s'affiche tout va bien, mais des que je rentre ce code dans ma fonction evenement:
avec la condition pour quitter quand la souris est dans le rectangle:
Quand je clique sur Quitter ca quitte ! Mais limage de fond se deplace avec la souris je pige pas, je peux mettre une video si tu veux.
Mais déjà vérifie que tu n'utilises pas ecran->Rscreen ou input->sourisX dans cette fonction.
La fonction affichage gere uniquement la partie graphique, donc debut de fonction j'efface le render, ensuite je charge les images si les conditions sont valider j'affiche les images , sauf pour l'image de fond qui est charger et afficher a chaque appel de la fonction; en debut de fonction
La ces ma fonction qui initialise la librairie SDL2, j'ai lu qu on pouvait integrer une texture dans le dernier parametre de SDL_createwindows, je me suis dit que cest peut la quon charge un arriere plan, mais j'ai pas trouver + dinfo
Si tu veux nettoyer le renderer en le remplissant de blanc, il faut mettre le SetRenderDrawColor() avant :-)
Ou, vu que tu copies l'image sur tout l'écran, plus simplement:
(J'ai juste mis le 4ème paramètre à NULL.)
j'ai lu qu on pouvait integrer une texture dans le dernier parametre de SDL_init, je me suis dit que cest peut la quon charge un arriere plan, mais j'ai pas trouver + dinfo
Non, SDL_Init ne prend qu'un seul paramètre (ses flags).
DSL, je ne comprends pas en quoi la souris pourrait influer dans la façon dont l'image de fond est tracée :/