Salut à tous !
Je suis en ce moment sous Linux Ubuntu, et j'essaye de programmer en C...
J'utilise emacs et g++, mais ça on s'en fout (du moins je crois)
Lors des trucs en SDL, je me demandais pourquoi ma fenêtre restait noire quoi que je fasse...
Et bah en fait, elle reste noire tant qu'on a pas fait un truc qui lui demande explicitement de raffraichir, comme passer une fenetre devant, la faire sortir de l'écran puis revenir, etc... (sauf si, évidement, elle est sensée être noire ^_^)
Bon, c'est pas mortel, il suffit de faire bouger la fenetre un peu après avoir lancé le programme, mais c'est quand même assez chiant...
Je pense que une ligne de code manque, pour refrechire la fenetre apres le chargement.
Mais je ne suis pas sur, j'adment ne pas faire du SDL a longuer de journee
// Allocation de la surface (pour l'instant vide)
rectangle = SDL_CreateRGBSurface(SDL_SWSURFACE, 320, 240, 32, 0, 0, 0, 0);
// Titre de fenêtre
SDL_WM_SetCaption ("Première appli SDL", NULL);
// Boucle infinie while(1) {
SDL_Event event; // Fermer la fenêtre proprement if(SDL_PollEvent (&event) && event.type==SDL_QUIT) break;
affichage(); // Mise à jour de l'écran }
// Libération de la surface rectangle
SDL_FreeSurface(rectangle); return0; }
Ce qui donne :
Soit c'est la fonction SDL_CreateRGBSurface ( mais je doute .. ) soit c'est le fais de rafraichir comme disais Gyscos avec la fonction affichage().
EDIT 2: Pour toi Gyscos, je croix que tu doit faire absolument un while dans lequel tu appele SDL_UpdateRect ( void SDL_UpdateRect(SDL_Surface *screen, Sint32 x, Sint32 y, Sint32 w, Sint32 h); )
for(i = 0 ; i <= 255 ; i++) {
position.x = 0; // Les lignes sont à gauche (abscisse de 0)
position.y = i; // La position verticale dépend du numéro de la ligne actuelle
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, i, i, i)); // Remplissage
SDL_BlitSurface(lignes[i], NULL, ecran, &position); // Collage }
Hum...
Vous confirmez qu'avec juste le flip en plus la fenêtre est toujours rafraîchie ?
J'ai un sérieux doute, mais si vous me l'assurez je changerai le tuto en conséquence.
Le double buffering (activé avec SDL_DOUBLEBUF pour SDL_SetVideoMode()) nécessite l'appel de SDL_Flip(SDL_GetVideoSurface()) à la fin de l'affichage. Cette fonction est bloquante, et ne rend la main qu'une fois l'écran dessiné.
Vu que tu n'as pas spécifié SDL_DOUBLEBUF, tu ne devrais pas avoir à l'utiliser...
Sauf que la doc spécifie que le double buffering n'est pas utilisé, ça revient à faire un updaterect général de l'écran.
Maintenant bon je crois pas que le fait que la fonction soit bloquante soit un problème.
Et je voudrais rajouter que à chaque fois que regarde un code source je voie toujours :
atexit(SDL_Quit);
aprés
/* Initialisation de la librairie */ if( SDL_Init(SDL_INIT_VIDEO) < 0){
fprintf(stderr, "Erreur SDL: %s\n", SDL_GetError());
exit(1); }
Afin de quitter proprement ( comme ils disent ).
Je voulais savoir si c'est important, à faire ?
Oui, si on a des exit() dans le code. Sinon, si on a une sortie unique par le return de main(), c'est pas utile. Il suffit de placer SDL_Quit() avant le return.
Moi je reteste le cours de mateo, pour simplement afficher une fenetre, qui apparait avec un fond noir chez lui. Moi c'est transparant.
Et quand je prend le code pour afficher le fond vert, pareil transparant. Donc suite a notre discution, dans la boucle while de pause(); je rajoute SDL_Flip(ecran);
J'ai bien une fenêtre verte .... mais transparente !!!
Lol, ca me rassure de voir que je ne suis pas le seul à avoir un joli rectangle noir avec la SDL . Et je confirme, avec SDL_Flip, ca marche impec lol. Et Mateo, je te rassure, ce n'est pas ta fonction pause qui est en cause. J'ai essayé le code sans utiliser cette fonction, en utilisant un SDL_Delay(), et ça me faisait un beau carré tout noir alors que j'attendais un carré vert expldr!!! Donc, voila, j'ai bien fait de venir sur le forum dis donc . J'ai eu la réponse à ma question
Et la, la transparence, c'est pas un thème ! C'est une option de la console...
Et ca veut dire, que si un mec mettais un thème spéciale, je programme ou jeux apparaitrait transparent ??? o_0
Maintenant je ne vais pas remettre en doute ce que vous dites, et je vais essayer.
Et C'est un thème c'est Xgl+Compiz
EDIT : Arf ... Diable !
C'est bien Compiz qui pose problèmes !
Aprés l'avoir tué, j'ai bien le bon affichage dans ma fenêtre.
Mais alors, pourquoi est ce que le code plus haut pour afficher le carré vert fonctionne lui et n'est pas transparent ?
[SDL & LINUX]La fenetre n'affiche rien
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)