SDL2 Utilisation de la fonction SDL_Blitsurface()
Résolu
poparnassus
Messages postés
462
Statut
Membre
-
poparnassus Messages postés 462 Statut Membre -
poparnassus Messages postés 462 Statut Membre -
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
affichage.c void chargement_image(Input *input, ecran *ecran, menu_droit *menu_droit, menu_haut *menu_haut, menu_gauche *menu_gauche, menu_bas *menu_bas, camera *camera,zozor *zozor) { int w = 10 , h = 10; //SDL_RenderFillRect(ecran->renderer1, &ecran->screen1); SDL_RenderClear(ecran->renderer1); SDL_SetRenderDrawColor(ecran->renderer1,255,255,255,255); //BLANC ecran->SimageFond_1 = SDL_LoadBMP("./image/fond7.bmp"); if (ecran->SimageFond_1 == NULL) { //SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image fond1.",NULL); } else { //Affichage image de fond ecran->TimageFond_1 = SDL_CreateTextureFromSurface(ecran->renderer1,ecran->SimageFond_1); SDL_RenderCopy(ecran->renderer1,ecran->TimageFond_1 ,NULL,&ecran->Rscreen); } //Fonction Temps time_t now = time (NULL); struct tm tm_now = *localtime (&now); //strftime (xdate, sizeof xdate, "%d:%m:%Y", &tm_now); strftime (xtime, sizeof xtime, "%H:%M:%S", &tm_now); //Affichage temps sprintf(xtime_p, "%s",xtime); //SDL_SetRenderDrawColor(ecran->renderer1,219,191,36,0); //SDL_RenderFillRect(ecran->renderer1, &menu_gauche->Rcase1); menu_gauche->Scase1 = TTF_RenderText_Blended(ecran->police, xtime_p ,ecran->couleurRouge); menu_gauche->Tcase1 = SDL_CreateTextureFromSurface(ecran->renderer1, menu_gauche->Scase1); SDL_QueryTexture(menu_gauche->Tcase1, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_gauche->Tcase1, NULL, &menu_gauche->Rcase1); //affichage du boutton QUITTER menu_gauche->Scase2 = SDL_LoadBMP("./image/quitter.bmp"); //Chargement de l'image quitter dans la surfase Scase1 if (menu_gauche->Scase2 == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image du boutton quitter.",NULL); } else { menu_gauche->Tcase2 = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Scase2); SDL_RenderCopy(ecran->renderer1,menu_gauche->Tcase2,NULL,&menu_gauche->Rcase2); } 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_DestroyTexture(menu_haut->TstatueCAM); SDL_FreeSurface(menu_haut->SstatueCAM); } else if (menu_haut->statueCAM == 1) //Camera connecter { camera->SimageFondCam = SDL_LoadBMP("./image/6wd.bmp"); if (camera->SimageFondCam == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image 6wd.bmp.",NULL); } else { 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 ); camera->TimageFondCam = SDL_CreateTextureFromSurface(ecran->renderer1,camera->SimageFondCam); //SDL TEXTURE SDL_RenderCopy(ecran->renderer1, camera->TimageFondCam , NULL, &camera->Rcamera ); } SDL_DestroyTexture(menu_haut->TstatueCAM); SDL_FreeSurface(menu_haut->SstatueCAM); SDL_DestroyTexture(camera->TimageFondCam); SDL_FreeSurface(camera->SimageFondCam); } if (menu_droit->lumiere == 1) { SDL_SetRenderDrawColor(ecran->renderer1,255,255,0,0); menu_droit->SVlumiere = TTF_RenderText_Blended(ecran->police, " Lumiere ON ",ecran->couleurNoire); menu_droit->TVlumiere = SDL_CreateTextureFromSurface(ecran->renderer1, menu_droit->SVlumiere); SDL_RenderFillRect(ecran->renderer1, &menu_droit->RVlumiere); SDL_QueryTexture(menu_droit->TVlumiere, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_droit->TVlumiere, NULL, &menu_droit->RVlumiere); } else if(menu_droit->lumiere == 0) { SDL_SetRenderDrawColor(ecran->renderer1,255,201,14,0); menu_droit->SVlumiere = TTF_RenderText_Blended(ecran->police, " Lumiere OFF ",ecran->couleurNoire); menu_droit->TVlumiere = SDL_CreateTextureFromSurface(ecran->renderer1, menu_droit->SVlumiere); SDL_RenderFillRect(ecran->renderer1, &menu_droit->RVlumiere); SDL_QueryTexture(menu_droit->TVlumiere, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_droit->TVlumiere, NULL, &menu_droit->RVlumiere); } //Detection de deconnexion joystique if (SDL_NumJoysticks() < 1) { //int w = 5 , h = 5; SDL_SetRenderDrawColor(ecran->renderer1,255,201,14,0); SDL_RenderFillRect(ecran->renderer1, &menu_haut->RVjoystick); menu_haut->SVjoystick = TTF_RenderText_Blended(ecran->police, "Joystick deconnecter",ecran->couleurNoire); menu_haut->TVjoystick = SDL_CreateTextureFromSurface(ecran->renderer1, menu_haut->SVjoystick); SDL_QueryTexture(menu_haut->TVjoystick, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_haut->TVjoystick, NULL, &menu_haut->RVjoystick); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_WARNING,"Erreur","Erreur: Le joystique viens de se deconnecter, veuillez le reconnecter",NULL); SDL_JoystickClose(input->joystick); SDL_DestroyTexture(menu_haut->TVjoystick); SDL_FreeSurface(menu_haut->SVjoystick); } else { SDL_SetRenderDrawColor(ecran->renderer1,63,241,58,0); SDL_RenderFillRect(ecran->renderer1, &menu_haut->RVjoystick); menu_haut->SVjoystick = TTF_RenderText_Blended(ecran->police, "Joystick connecter",ecran->couleurNoire); menu_haut->TVjoystick = SDL_CreateTextureFromSurface(ecran->renderer1, menu_haut->SVjoystick); SDL_QueryTexture(menu_haut->TVjoystick, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_haut->TVjoystick, NULL, &menu_haut->RVjoystick); input->joystick = SDL_JoystickOpen(0); SDL_JoystickEventState(SDL_ENABLE); SDL_DestroyTexture(menu_haut->TVjoystick); SDL_FreeSurface(menu_haut->SVjoystick); } if (input->mode_pilotage == 1) { //JGX sprintf(input->JGXX, "X %d",input->JGX); //SDL_SetRenderDrawColor(ecran->renderer1,255,255,255,255); //BLANC //SDL_RenderFillRect(ecran->renderer1, &menu_bas->RJoy12); menu_bas->SJoy12 = TTF_RenderText_Solid(ecran->police,input->JGXX,ecran->couleurNoire); menu_bas->TJoy12 = SDL_CreateTextureFromSurface(ecran->renderer1, menu_bas->SJoy12); SDL_QueryTexture(menu_bas->TJoy12, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_bas->TJoy12, NULL, &menu_bas->RJoy12); //JGY JGYY sprintf(input->JGYY, "Y %d",input->JGY); //SDL_SetRenderDrawColor(ecran->renderer1,255,255,255,255); //BLANC //SDL_RenderFillRect(ecran->renderer1, &menu_bas->RJoy13); menu_bas->SJoy13 = TTF_RenderText_Solid(ecran->police,input->JGYY,ecran->couleurNoire); menu_bas->TJoy13 = SDL_CreateTextureFromSurface(ecran->renderer1, menu_bas->SJoy13); SDL_QueryTexture(menu_bas->TJoy13, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_bas->TJoy13, NULL, &menu_bas->RJoy13); //JDX JDXX sprintf(input->JDXX, "X %d",input->JDX); //SDL_SetRenderDrawColor(ecran->renderer1,255,255,255,255); //BLANC //SDL_RenderFillRect(ecran->renderer1, &menu_bas->RJoy22); menu_bas->SJoy22 = TTF_RenderText_Solid(ecran->police,input->JDXX,ecran->couleurNoire); menu_bas->TJoy22 = SDL_CreateTextureFromSurface(ecran->renderer1, menu_bas->SJoy22); SDL_QueryTexture(menu_bas->TJoy22, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_bas->TJoy22, NULL, &menu_bas->RJoy22); //JDY JDYY sprintf(input->JDYY, "Y %d",input->JDY); //SDL_SetRenderDrawColor(ecran->renderer1,255,255,255,255); //BLANC //SDL_RenderFillRect(ecran->renderer1, &menu_bas->RJoy23); menu_bas->SJoy23 = TTF_RenderText_Solid(ecran->police,input->JDYY,ecran->couleurNoire); menu_bas->TJoy23 = SDL_CreateTextureFromSurface(ecran->renderer1, menu_bas->SJoy23); SDL_QueryTexture(menu_bas->TJoy23, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_bas->TJoy23, NULL, &menu_bas->RJoy23); //Affichage puissance moteur gauche et droit sprintf(input->PRoueGx, "%d",input->PRoueG); // SDL_SetRenderDrawColor(ecran->renderer1,0,0,0,0); //BLANC //SDL_RenderFillRect(ecran->renderer1, &menu_bas->Rproueg); menu_bas->Sproueg = TTF_RenderText_Solid(ecran->police,input->PRoueGx,ecran->couleurNoire); menu_bas->Tproueg = SDL_CreateTextureFromSurface(ecran->renderer1, menu_bas->Sproueg); SDL_QueryTexture(menu_bas->Tproueg, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_bas->Tproueg, NULL, &menu_bas->Rproueg); sprintf(input->PRoueDx, "%d",input->PRoueD); // SDL_SetRenderDrawColor(ecran->renderer,0,0,0,0); //BLANC //SDL_RenderFillRect(ecran->renderer1, &menu_bas->Rproued); menu_bas->Sproued = TTF_RenderText_Solid(ecran->police,input->PRoueDx,ecran->couleurNoire); menu_bas->Tproued = SDL_CreateTextureFromSurface(ecran->renderer1, menu_bas->Sproued); SDL_QueryTexture(menu_bas->Tproued, NULL, NULL, &w, &h); SDL_RenderCopy(ecran->renderer1, menu_bas->Tproued, NULL, &menu_bas->Rproued); //BOUTTON Y if(input->BOUTTON_Y == 1) { menu_bas->SbouttonY = SDL_LoadBMP("./image/BouttonY.bmp"); if (menu_bas->SbouttonY == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image du boutton A.",NULL); } else { menu_bas->TbouttonY = SDL_CreateTextureFromSurface(ecran->renderer1,menu_bas->SbouttonY); SDL_RenderCopy(ecran->renderer1,menu_bas->TbouttonY,NULL,&menu_bas->RbouttonY); } SDL_DestroyTexture(menu_bas->TbouttonY); SDL_FreeSurface(menu_bas->SbouttonY); } if(input->BOUTTON_X == 1) { menu_bas->SbouttonX = SDL_LoadBMP("./image/BouttonX.bmp"); if (menu_bas->SbouttonX == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image du boutton A.",NULL); } else { menu_bas->TbouttonX = SDL_CreateTextureFromSurface(ecran->renderer1,menu_bas->SbouttonX); SDL_RenderCopy(ecran->renderer1,menu_bas->TbouttonX,NULL,&menu_bas->RbouttonX); } SDL_DestroyTexture(menu_bas->TbouttonX); SDL_FreeSurface(menu_bas->SbouttonX); } if(input->BOUTTON_A == 1) { menu_bas->SbouttonA = SDL_LoadBMP("./image/BouttonA.bmp"); if ( menu_bas->SbouttonA == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image du boutton A.",NULL); } else { menu_bas->TbouttonA = SDL_CreateTextureFromSurface(ecran->renderer1,menu_bas->SbouttonA); SDL_RenderCopy(ecran->renderer1,menu_bas->TbouttonA,NULL,&menu_bas->RbouttonA); } SDL_DestroyTexture(menu_bas->TbouttonA); SDL_FreeSurface(menu_bas->SbouttonA); } if(input->BOUTTON_B == 1) { menu_bas->SbouttonB = SDL_LoadBMP("./image/BouttonB.bmp"); if (menu_bas->SbouttonB == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image du boutton A.",NULL); } else { menu_bas->TbouttonB = SDL_CreateTextureFromSurface(ecran->renderer1,menu_bas->SbouttonB); SDL_RenderCopy(ecran->renderer1,menu_bas->TbouttonB,NULL,&menu_bas->RbouttonB); } SDL_DestroyTexture(menu_bas->TbouttonB); SDL_FreeSurface(menu_bas->SbouttonB); } //Destruction texture SDL_DestroyTexture(menu_bas->TJoy23); SDL_DestroyTexture(menu_bas->TJoy22); SDL_DestroyTexture(menu_bas->TJoy13); //boutton SDL_DestroyTexture(menu_bas->TJoy12); SDL_DestroyTexture(menu_bas->Tproueg); SDL_DestroyTexture(menu_bas->Tproued); //Liberation des surfaces SDL_FreeSurface(menu_bas->SJoy23); SDL_FreeSurface(menu_bas->SJoy13); SDL_FreeSurface(menu_bas->SJoy12); SDL_FreeSurface(menu_bas->SJoy22); SDL_FreeSurface(menu_bas->Sproued); SDL_FreeSurface(menu_bas->Sproueg); //boutton } if(menu_gauche->wifi == 0) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi0.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi0.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 1) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi1.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 2) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi2.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 3) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi3.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 4) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi4.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 5) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi5.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 6) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi6.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 7) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi7.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } else if(menu_gauche->wifi == 8) { menu_gauche->Swifi = SDL_LoadBMP("./image/wifi8.bmp"); if ( menu_gauche->Swifi == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger l'image wifi1.",NULL); } else { menu_gauche->Twifi = SDL_CreateTextureFromSurface(ecran->renderer1,menu_gauche->Swifi); SDL_RenderCopy(ecran->renderer1, menu_gauche->Twifi, NULL, &menu_gauche->Rcase3); } SDL_DestroyTexture(menu_gauche->Twifi); SDL_FreeSurface(menu_gauche->Swifi); } SDL_RenderPresent(ecran->renderer1); SDL_DestroyTexture(menu_gauche->Tcase2); SDL_FreeSurface(menu_gauche->Scase2); SDL_DestroyTexture(menu_droit->TVlumiere); SDL_FreeSurface(menu_droit->SVlumiere); //Fonction temps SDL_DestroyTexture(menu_gauche->Tcase1); SDL_FreeSurface(menu_gauche->Scase1); SDL_DestroyTexture(ecran->TimageFond_1); SDL_FreeSurface(ecran->SimageFond_1); }main.c int main(int argc, char** argv) { //declaration des structures ecran ecran; Input input; menu_bas menu_bas; menu_gauche menu_gauche; menu_droit menu_droit; menu_haut menu_haut; camera camera; zozor zozor; reseau reseau; /* //Strcuture Reseau WSADATA WSAData; SOCKET sock; SOCKET csock; SOCKADDR_IN sin; SOCKADDR_IN csin; WSAStartup(MAKEWORD(2,0), &WSAData); sock = socket(AF_INET, SOCK_STREAM, 0 ); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(23); bind(sock,(SOCKADDR *) &sin, sizeof(sin)); listen(sock, 0); */ //Initialisation des structures init_structure(&ecran, &input, &menu_bas, &menu_gauche, &menu_droit, &menu_haut, &camera,&zozor); //Init SDL2 et SDL_TTF initialisation("Programme Wild Thumper: Station de pilotage",&input, &ecran); init_reseau(&reseau); while (!input.quitter) { updateEvent(&input, &ecran, &menu_gauche); pilotage(&input,&ecran, &menu_droit, &menu_haut, &menu_gauche, &menu_bas); //Definition des variables, et mise a jour position image. chargement_image(&input, &ecran, &menu_droit, &menu_haut, &menu_gauche, &menu_bas, &camera,&zozor); if (menu_haut.statueCAM == 1) { camera_camera(&camera, &menu_haut); } send_data_pilotage (&input); SDL_Delay(1); } /* closesocket(csock); closesocket(sock); WSACleanup(); */ cleanup(&input, &ecran, &menu_bas, &menu_gauche, &menu_droit, &menu_haut, &camera); return 0; }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
init.c void initialisation(const char *titre,Input *input, ecran *ecran) { if (SDL_Init( SDL_INIT_VIDEO |SDL_INIT_JOYSTICK) != 0) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible de charger la librairie SDL2.0.",NULL); EXIT_FAILURE; } else { //Creation de la fenetre ecran->screen1 = SDL_CreateWindow(titre,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_W,WINDOW_H,SDL_WINDOW_SHOWN); //Creation du renderer ecran->renderer1 = SDL_CreateRenderer( ecran->screen1,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if ( ecran->screen1 == NULL || ecran->renderer1 == NULL) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Impossible d'initialiser la fenetre ou/et d'afficher le rendu.",NULL); } //Verifie si un joystixk est connecter if (SDL_NumJoysticks() < 1) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,"Erreur","Erreur: Pas de joystick connecter.",NULL); EXIT_FAILURE; } else { SDL_JoystickEventState(SDL_ENABLE); input->joystick = SDL_JoystickOpen(0); } }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 :/