Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C | SDL] Envoyer une surface dans une fonction.

    21 octobre 2006 à 20:58:31

    Bonjour a tous,

    j'aimerai savoir comment faire pour que une surface déclarée dans la fonction main puisse etre envoyée dans une autre fonction, pour qu'elle soit par exemple modifiée.
    J'ai essayé en fesant comme ceci mais ca ne marche pas:

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran=NULL, *surface=NULL;
       
        ...

        ModifierSurface(surface);

        ...

        SDL_BlitSurface(surface, NULL, ecran, NULL);
    }

    void ModifierSurface(SDL_Surface *surface)
    {
        surface=IMG_Load("image.bmp");
    }


    Voila donc il faudrait que surface soit modifiée dans la fonction ModifierSurface et ensuite blitée dans la fonction main.
    Si quelqu'un sait comment faire, ca m'aiderait beaucoup
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      21 octobre 2006 à 21:04:10

      Plutôt comme ça :

      void ModifierSurface(SDL_Surface *surface)
      • Partager sur Facebook
      • Partager sur Twitter
        21 octobre 2006 à 21:04:35

        Il faut indiquer le type :
        void ModifierSurface(SDL_Surface *surface)
        ;)

        Grillé
        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2006 à 21:10:34

          heu oui excusez moi j'ai mal recopié :euh:
          mais ca marche toujours pas :(
          • Partager sur Facebook
          • Partager sur Twitter
            21 octobre 2006 à 21:12:23

            Et quel est le problème en fait ?
            (Tu n'as pas oublié SDL_Init() et SDL_Quit() tu les as juste pas recopiés hein ?)
            • Partager sur Facebook
            • Partager sur Twitter
              21 octobre 2006 à 21:15:04

              SDL_BlitSurface(surface, NULL, ecran, NULL);

              Le dernier NULL me semble incorrect, il faut que tu initialises ta position à une valeur (enfin des valeurs, x et y).
              • Partager sur Facebook
              • Partager sur Twitter
                21 octobre 2006 à 21:15:38

                oui bien sur les includes, prototype et tout je les ais pas mis, pour simplifier, enfaite ce que je voudrai savoir c'est comment faire passer la surface dans la fonction puis la modifier.
                Mais en fesant comme ca rien ne se blite.

                [EDIT]Pour le NULL je pense pas que c'est le probleme parce que lorsque j'inisialise la surface dans la fonction main, ca marche sans probleme.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 octobre 2006 à 21:28:51

                  Citation : NRG500

                  oui bien sur les includes, prototype et tout je les ais pas mis, pour simplifier, enfaite ce que je voudrai savoir c'est comment faire passer la surface dans la fonction puis la modifier.
                  Mais en fesant comme ca rien ne se blite.


                  Bah comme tu as fais. C'est correct normalement.

                  Rappel :
                  int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface  *dst, SDL_Rect *dstrect);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 octobre 2006 à 21:47:43

                    oui moi aussi ca me semble correcte mais ca ne marche pas. Et c'est très
                    embetant parce que sans ca ma fonction main est beaucoup trop longue :(
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      22 octobre 2006 à 11:20:06


                      int main(int argc,char** argv){
                          SDL_Surface* ecran=SDL_SetVideoMode(...);
                          SDL_Surface* surface;
                          modifierSurface(&surface);
                          SDL_BlitSurface(surface,0,ecran,0);
                      }

                      void modifierSurface(SDL_Surface** surface){
                          *surface=IMG_Load("image.bmp");
                      }


                      Il faut revoir le cours sur les pointeurs et leur application relative aux passements de paramètres par référence...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        22 octobre 2006 à 14:27:23

                        ou alors t'es pas con et tu retourne la surface ^^
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 octobre 2006 à 18:02:12

                          ouai ca marche comme ca, merci beaucoup.Il y a juste un petit message d'erreur lors de la compilation: "passing arg 1 of "modifierSurface" from incompatible pointer type", mais apart ca, ca marche.

                          ps: Barbidou54, si je demande ca c'est justement pour modifier plusieur surface dans cette fonction, sinon ca n'aurai pas d'intéret.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [C | SDL] Envoyer une surface dans une fonction.

                          × 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