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 :

Probleme de destruction d'une fenêtre SDL 1.3


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Probleme de destruction d'une fenêtre SDL 1.3
    Bonjour a tous,

    Cela fait maintenant 2 jours que je suis embêté pur fermer une fenetre SDL 1.3.

    j'utilise la fonction winId=SDL_CreateWindowfrom(widgetId) pour lier SDL a un Widget Qt.

    j'arrive ensuite a dessiner dans ma fenêtre SDL, mais quand j'utilise les instructions SDL_DestroyWindow(winId) et SDL_Quit(), je me retrouve avec un segfault.

    voici mon code(trés basique)
    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
     
    MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent){
        setupUi(this);
     
        if (SDL_Init(SDL_INIT_VIDEO) != 0) {
            printf("Error initializing SDL:  %s\n", SDL_GetError());
        }
     
     
        qlonglong window_id=reinterpret_cast<qlonglong>(widget->winId());
     
        fenetre=SDL_CreateWindowFrom((void*)window_id);
        if (fenetre == 0) {
            qDebug()<<SDL_GetError();
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MainWindow::~MainWindow()
    {
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
    }
    Voila rien que le code ci dessus fait planter l'appli sur fermeture de celle ci.

    J'espère que quelqu'un pourra m'aider à trouver une solution.

    Cyrille

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 551
    Points
    218 551
    Billets dans le blog
    118
    Par défaut
    Bonjour,

    Je pense que le problème est assez simple .

    En fait, Qt va créer une fenêtre (window_id comme identifiant). Celle-ci sera utilisé par la SDL. Jusque là, rien de grave.
    Sauf que lors de la destruction, votre widget demande à la SDL de détruire ce window_id, mais Qt, qui gère sa mémoire tout seul, va détruire aussi la fenêtre (il ne sait pas que celle-ci est utilisé par la SDL / et qu'elle est déjà détruite).

    Donc, moi j'enlèverai le SDL_DestroyWindow.

    Après, je ne peux pas confirmer, car je n'ai jamais vu de code SDL 1.3 et puis car la documentation ne parle pas de cela. Mais cela peut être une piste à suivre.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Je me doutais de quelque chose comme cela,
    en fait j'ai ecrit a l amailing list de libsdl,

    ils m'ont donné un patch qui corrige le probleme.

    si cela interresse quelqu'un, voici le fix

    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
     
    # HG changeset patch
    # User Ryan C. Gordon <icculus@icculus.org>
    # Date 1311631422 25200
    # Node ID 5ae512481858a6dd287e7bb6787447a9db447f86
    # Parent  c8862e1bc41f3be30c7c67002b5a51d12e0eccb2
    Windows: restore event procedure on destroy if we didn't create the window.
     
    diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c
    --- a/src/video/windows/SDL_windowswindow.c
    +++ b/src/video/windows/SDL_windowswindow.c
    @@ -636,6 +636,15 @@
             ReleaseDC(data->hwnd, data->hdc);
             if (data->created) {
                 DestroyWindow(data->hwnd);
    +        } else {
    +            /* Restore any original event handler... */
    +            if (data->wndproc != NULL) {
    +#ifdef GWLP_WNDPROC
    +                SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR) data->wndproc);
    +#else
    +                SetWindowLong(hwnd, GWL_WNDPROC, (LONG_PTR) data->wndproc);
    +#endif
    +            }
             }
             SDL_free(data);
         }

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

Discussions similaires

  1. Probleme d'apparition d'une fenêtre
    Par mdordenart dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 17/03/2010, 16h20
  2. Réponses: 1
    Dernier message: 02/03/2010, 23h54
  3. Problème de caption sur une fenêtre SDL
    Par Verbalinsurection dans le forum C++
    Réponses: 2
    Dernier message: 31/10/2007, 18h52
  4. Réponses: 3
    Dernier message: 18/09/2007, 14h54
  5. Réponses: 10
    Dernier message: 15/10/2006, 17h23

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