IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

débuts avec la librairie SDL_Layer


Sujet :

SDL

  1. #1
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut débuts avec la librairie SDL_Layer
    Bonjour !

    Je viens de trouver cette lib sur google, et je pense qu'elle peut etre assez sympathique pour me rapprocher du fonctionnement web (comme des DIV) tout en utilisant la SDL pour un jeu !

    Donc, voici la librairie: http://code.google.com/p/sdl-layer/s...e/#svn%2Ftrunk

    Et voici mon code,
    J'essaye pour l'instant simplement de mettre une image sur un layer.
    Le but finale etant de pouvoir faire un menu entier sur un layer, comme ceci

    layer contient:
    -- image background
    -- image des boutons
    --- quand on passe sur limage dun bouton, on change l'image avec une autre, effet hover !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    static int GUIThread(void *nothing)
    {
        SDLayer_Display *wlayers;
        SDL_Event event;
        SDL_Surface *surf;
        SDL_Rect rect, rect2;
        int order;
        int arg1, arg2;
     
        // gfx init
        int w[2] = {WIN_DEFAULT_WIDTH,WIN_DEFAULT_WIDTH};
        int h[2] = {WIN_DEFAULT_HEIGHT,WIN_DEFAULT_HEIGHT};
    	wlayers = SDLayer_CreateRGBLayeredDisplay(SDL_ANYFORMAT, SDLAYER_RECTS, 2, w, h, WIN_DEFAULT_BPP, 0, 0, 0, 0);
     
     
    	// gfx loop
        while(WaitEvent(&event, Threads::GUIEventWait(), Threads::GUIEventLock()))
        {
            if(event.type == SDL_USEREVENT)
            {
                order = (int)event.user.code;
                arg1 = (int)event.user.data1;
                arg2 = (int)event.user.data2;
     
                if(order == T_ORDER_LOADMENU)
                {
                    MessageBox(NULL, "load menu", "order", MB_OK);
                    SDL_Surface* img = load_image("bg.bmp");
                    if(img != (SDL_Surface *)0)
                    {
                        surf = SDL_DisplayFormat(img);
                        if(img == (SDL_Surface*)0)
                        {
                            MessageBox(NULL, SDL_GetError(), "error", MB_OK);
                        }
                        else
                        {
                            //SDL_FreeSurface(img);
                            MessageBox(NULL, "blit !", "thread", MB_OK);
                            rect.x = 0;
                            rect.y = 0;
                            rect2.x = 50;
                            rect2.y = 50;
                            //LAYER(wlayers, 1);
                            SDLayer_Blit(surf, &rect, wlayers, &rect, 1);
                            //MessageBox(NULL, SDL_GetError(), "error", MB_OK);
                        }
                    }
                    else
                    {
                        MessageBox(NULL, SDL_GetError(), "error", MB_OK);
                    }
                }
                else if(order == T_ORDER_FADE)
                {
     
                }
                else if(order == T_ORDER_SCREEN)
                {
     
                }
     
            }
            else if(event.type == SDL_QUIT)
            {
                break;
            }
            if(event.type == SDL_MOUSEBUTTONDOWN)
            {
                MessageBox( NULL, "mousebutton down", "Warning", MB_OK );
            }
        }
        return 0;
    }
    Je n'ai aucune erreur de compilation, en revanche mon programme affiche les deux MessageBox
    "load menu", et "blit !"
    ensuite, il freeze.
    Voici le résultat du mode debug:
    Citation Envoyé par LOG
    Program received signal SIGSEGV, Segmentation fault.
    In SDL_DisplayFormat () (C:\Program Files (x86)\CodeBlocks\MinGW\bin\SDL.dll)
    At D:\C++\projects\SDL_Layer\SDL_Layer.c:42
    Citation Envoyé par CALLSTACK
    #0 6812591F SDL_DisplayFormat() (C:\Program Files (x86)\CodeBlocks\MinGW\bin\SDL.dll?)
    #1 66E420B6 __SDLayer_InitLayer(layer=0x395384, flags=268435456, sfactor=1, width=1024, height=768, bitsPerPixel=32, Rmask=0, Gmask=0, Bmask=0, Amask=0) (D:\C++\projects\SDL_Layer\SDL_Layer.c:42)
    #2 66E42339 SDLayer_CreateRGBLayeredDisplay(flags=268435456, refresh_method=0, n_layers=2, widths=0x3ebfe74, heights=0x3ebfe6c, bitsPerPixel=32, Rmask=0, Gmask=0, Bmask=0, Amask=0) (D:\C++\projects\SDL_Layer\SDL_Layer.c:139)
    #3 00402B24 GUIThread(nothing=0x0) (D:/C++/projects/Client/Threads.h:64)
    #4 6810B03F SDL_snprintf() (C:\Program Files (x86)\CodeBlocks\MinGW\bin\SDL.dll?)
    #5 6813AA48 SDL_SemPost() (C:\Program Files (x86)\CodeBlocks\MinGW\bin\SDL.dll?)
    #6 6813AA9E SDL_SemPost() (C:\Program Files (x86)\CodeBlocks\MinGW\bin\SDL.dll?)
    #7 75491287 msvcrt!_itow_s() (C:\Windows\syswow64\msvcrt.dll?)
    #8 75491328 msvcrt!_endthreadex() (C:\Windows\syswow64\msvcrt.dll?)
    #9 7676339A KERNEL32!BaseCleanupAppcompatCacheSupport() (C:\Windows\syswow64\kernel32.dll?)
    #10 00000000 0x00395320 in ??() (???)
    #11 00000000 0x03ebffd4 in ??() (???)
    #12 778A9EF2 ntdll!RtlpNtSetValueKey() (C:\Windows\system32\ntdll.dll?)
    #13 00000000 0x00395320 in ??() (???)
    #14 00000000 0x6debd9a4 in ??() (???)
    #15 00000000 0x00000000 in ??() (???)
    Comment reparer ca ? :o

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Déjà il y a une erreur tu libère pas la mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Surface* img = load_image("bg.bmp");
    il n'y pas de free (sauf en commentaire).


    Comment réparer ça ?
    Je pense qu'il faut enlever la lib SDL layer , elle est pas utile pour faire un jeu vu que ton debug écrit cela.
    At D:\C++\projects\SDL_Layer\SDL_Layer.c:42
    Apparament elle vient de la lib.
    Dans la lib la ligne 42 ce qui peut clocher est ton "wlayers"
    tu devrais regarder si wlayers n'est pas NULL.

    Apres on ne fait jamais de IMG_Load dans une boucle (sauf a très rare cas).
    les test se font comme cela en general :
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    surf = SDL_DisplayFormat(img);
    Pourquoi faire une copie , a quoi sert elle a part faire du calcul en plus ?

    Apres je ne sais pas ce que fais SDLayer_Blit ,apres fait s'il fait pareil que SDL_blit ?

  3. #3
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    En gros SDLAyer permet d'avoir le meme fonctionnement qu'une page html avec des divs, (enfin, je crois )
    enre je rajoute des trucs dans un layer, je blit. visible/invisible. Les trucs cool quoi.

    Et pour les img_load dans ma boucle, ben pour linstant jessaye dabord de tout faire marcher, ensuite je vais nettoyer et mettre ca dans une classe que ma boucle va appeler si necessaire.

    Et pour le DisplayFormat, ah oui, j'avais pas vu :p merci.

    Aussi, le programme freeze quand je le lance a chaque fois, (ca doit aller avec l'erreur hein.
    Et le dans mon debug, je n'ai plus rien, le programme ne fait simplement rien, et il freeze. :s

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Moi je vois pas vraiment erreur ^^', a tu verifier le retour de wlayer ?

    Je voudrais que tu teste en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SDLayer_Blit(surf, &rect, wlayers, &rect, 1);
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_BlitSurface(image,NULL,ecran,&position);
    et me dire si ton programme freeze encore (si c'est le cas on a déterminé le problème si ce n'est pas le cas le problème vient ailleurs).

    As tu fais un SDLayer_InitLayer ?
    Je connais pas la lib , mais apparament il faut initialisé.

  5. #5
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    Bonjour, en effet la librairie SDLayer est un peu naze. Dommage !
    Du coup oui je suis retourné a simplement SDL :]
    Je vais simplement me pencher sur ses fonctions
    Merci quand meme !
    nico

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. debutant: erreur LNK2001 avec la librairie GSL
    Par drill3 dans le forum MFC
    Réponses: 6
    Dernier message: 25/04/2005, 13h58
  2. Mes premiers débuts avec Dev-C++ : ca bloque !
    Par fab56 dans le forum Dev-C++
    Réponses: 6
    Dernier message: 20/02/2005, 16h24
  3. Réponses: 3
    Dernier message: 25/01/2005, 11h27
  4. Réponses: 3
    Dernier message: 13/08/2004, 18h52
  5. impression HTML avec la librairie wxwindows
    Par farscape dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 23/12/2003, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo