Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C / SDL] Ex: Degradé

Il est beau mon code ?

Sujet résolu
    23 octobre 2006 à 11:04:58

    Bonjour tout le monde !

    Je viens de reussir l'exercice de dégradé (noir->blanc), mais mon code est assez different de celui du prof. Du coup je me demandais si ça allais ou pas, si je code proprement ou pas.

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *rectangle = NULL;
        SDL_Rect coordonnees;
        Uint32 degrade_couleur[256] = {NULL};
        long i = 0;

        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(640, 256, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Ma super fenetre SDL !", NULL);

        for (i = 0; i < 256; i++)
        {
            degrade_couleur[i] = SDL_MapRGB(ecran->format, i, i, i);

            rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, i, 32, 0, 0, 0, 0);
            //SDL_FillRect(rectangle, NULL, couleur2);

                coordonnees.x = 0;
                coordonnees.y = i;

            SDL_FillRect(rectangle, NULL, degrade_couleur[i]);

            SDL_BlitSurface(rectangle, NULL, ecran, &coordonnees);
        }

        SDL_Flip(ecran);

        pause();

        SDL_FreeSurface(rectangle);
        SDL_Quit();

        return EXIT_SUCCESS;
    }


    Y-a-t-til des choses qui ne vont pas, des choses à ne pas faire ?

    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 octobre 2006 à 15:03:27

      Inutile de faire un tableau d'Uint32. Un seul Uint32 suffit.


      //Non-testé
      int main(int argc, char *argv[])
      {
          SDL_Surface *ecran = NULL, *rectangle = NULL;
          SDL_Rect coordonnees;
          Uint32 couleurActuelle = 0;
          long i = 0;

          SDL_Init(SDL_INIT_VIDEO);
          ecran = SDL_SetVideoMode(640, 256, 32, SDL_HWSURFACE);
          SDL_WM_SetCaption("Ma super fenetre SDL !", NULL);

          for (i = 0; i < 256; i++)
          {
              couleurActuelle = SDL_MapRGB(ecran->format, i, i, i);

              rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, i, 32, 0, 0, 0, 0);

                  coordonnees.x = 0;
                  coordonnees.y = i;

              SDL_FillRect(rectangle, NULL, couleurActuelle);

              SDL_BlitSurface(rectangle, NULL, ecran, &coordonnees);
          }

          SDL_Flip(ecran);

          pause();

          SDL_FreeSurface(rectangle);
          SDL_Quit();

          return EXIT_SUCCESS;
      }


      Voilà, comme tu as fait c'est très juste aussi, mais passer par un tableau est un peu inutile je trouve.
      Sinon ça me parait bien.
      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2006 à 17:40:33

        Ne jamais oublier de libérer les surfaces precédemment allouées. (Même si dans ce cas ici c'est négligeable)

        C'est la cause de fuite de mémoire, et si on l'oublie ça lorsqu'on fait un jeu, sa peut vite devenir chiant a réglé.


        // A placer avant la création de la surface via SDL_CreateRGBSurface()
        if(rectangle != NULL)
                SDL_FreeSurface(rectangle)


        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2006 à 19:29:25

          Ton code est beaucoup trop petit pour être sale, si c'etait le cas il aurait vraiment fallu que tu le fasse exprès.
          • Partager sur Facebook
          • Partager sur Twitter

          [C / SDL] Ex: Degradé

          × 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.
          • Editeur
          • Markdown