Discussion: Problèmes affichage fenêtre [SDL 2.0]

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : août 2013
    Messages : 150
    Points : 60
    Points
    60

    Par défaut Problèmes affichage fenêtre

    Bonsoir, je suis entrain de m'initier à SDL2 ; connaissant déjà la première version, je n'ai pas de difficultés mis à part quelques problèmes : Jusqu'à présent, lorsque je voulais mettre ma fenêtre en plein écran, je récupérais les coordonnées du bureau en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const *SDL_VideoInfo bureau=SDL_GetVideoInfo();
     
    int largeurBureau=bureau->current_w;
    int hauteurBureau=bureau->current_h;
    Puis j'utilisais ces valeurs pour dimensionner la fenêtre et je masquais la barre de titres avec "SDL_NOFRAME". Alors oui, il existe le flag "SDL_FULLSCREEN", mais j'ai arrêté de l'utiliser lorsque j'ai constaté que mon PC refusait d'adapter correctement la fenêtre à l'écran.
    Avec SDL2, j'ai deux problèmes :

    - Il n'y a plus de type SDL_VideoInfo et de fonction SDL_GetVideoInfo() donc je ne sais pas comment récupérer les dimensions du bureau.
    - La fenêtre ne s'affiche pas lorsque j'utilise le flag "SDL_WINDOW_BORDERLESS", elle s'affiche en fait seulement dans la barre des tâches. Idem lorsque je fais "SDL_WINDOW_FULLSCREEN", la résolution du bureau change mais je ne vois pas la fenêtre.

    Voici le code :

    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
    #include <SDL2/SDL.h>
    #include <stdio.h>
     
    int main(int argc,char *argv[])
    {
        SDL_Window *fenetre;
        SDL_Event evenement;
     
        if(SDL_Init(SDL_INIT_VIDEO)<0)
        {
            printf("Erreur initialisation SDL !");
            return 0;
        }
     
        fenetre=SDL_CreateWindow("Initiation SDL 2",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS);
     
        while(1)
        {
            SDL_PollEvent(&evenement);
            if(evenement.window.event==SDL_WINDOWEVENT_CLOSE)
                break;
            if(evenement.type==SDL_KEYDOWN)
            {
                if(evenement.key.keysym.sym==SDLK_ESCAPE)
                    break;
            }
        }
     
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
        return 0;
    }
    J'ai testé la valeur de "fenetre" après l'appel de SDL_CreateWindow(), aucun problème de ce côté.

    Merci par avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : août 2013
    Messages : 150
    Points : 60
    Points
    60

    Par défaut

    Bon finalement j'ai résolu le problème : Il fallait tout simplement un rendu :

    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
    #include <SDL2/SDL.h>
    #include <stdio.h>
     
    int main(int argc,char *argv[])
    {
        SDL_Window *fenetre;
        SDL_Renderer *renderer;
        SDL_Event evenement;
     
        if(SDL_Init(SDL_INIT_VIDEO)<0)
        {
            printf("Erreur initialisation SDL !");
            return 0;
        }
     
        fenetre=SDL_CreateWindow("Initiation SDL 2 (Renderer)",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS);
     
        renderer=SDL_CreateRenderer(fenetre,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC);
     
        SDL_SetRenderDrawColor(renderer,255,0,255,255);
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
     
        while(1)
        {
            SDL_PollEvent(&evenement);
            if(evenement.window.event==SDL_WINDOWEVENT_CLOSE)
                break;
            if(evenement.type==SDL_KEYDOWN)
            {
                if(evenement.key.keysym.sym==SDLK_ESCAPE)
                    break;
            }
     
            //
        }
     
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
        return 0;
    }
    J'ai également trouvé le moyen de récupérer la résolution du bureau :

    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
    #include <SDL2/SDL.h>
    #include <stdio.h>
     
    int main(int argc,char *argv[])
    {
        SDL_Window *fenetre;
        SDL_Event evenement;
        SDL_DisplayMode *Bureau;
     
        if(SDL_Init(SDL_INIT_VIDEO)<0)
        {
            printf("Erreur initialisation SDL !");
            return 0;
        }
     
        SDL_GetCurrentDisplayMode(0,Bureau);
        printf("%d %d\n",Bureau->w,Bureau->h);
     
        fenetre=SDL_CreateWindow("Initiation SDL 2 (Resolution courante)",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,SDL_WINDOW_SHOWN);
     
        while(1)
        {
            SDL_PollEvent(&evenement);
            if(evenement.window.event==SDL_WINDOWEVENT_CLOSE)
                break;
            if(evenement.type==SDL_KEYDOWN)
            {
                if(evenement.key.keysym.sym==SDLK_ESCAPE)
                    break;
            }
     
            //
        }
     
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
        return 0;
    }

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

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 307
    Points : 6 783
    Points
    6 783

    Par défaut

    Un peu HS , mais si tu fait de l'OpenGL , la SDL2 n'apporte pas vraiment un grand plus (vu que derrière c'est de l'OpenGL 1/2) .

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : août 2013
    Messages : 150
    Points : 60
    Points
    60

    Par défaut

    Je me tourne justement vers SDL2 dans le but de m'initier à des versions plus récentes d'OpenGL.

    Edit : Et puis SDL2 présente des avantages par rapport à la première version, comme le multi-fenêtrage.

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

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 307
    Points : 6 783
    Points
    6 783

    Par défaut

    Je ne vois pas trop le rapport entre les deux OpenGL moderne et SDL 2 ^^'

    Edit : Et puis SDL2 présente des avantages par rapport à la première version, comme le multi-fenêtrage.
    Je ne parlais pas de SDL 1 ici mais OpenGL
    OpenGL s'utilise autre part que avec la SDL fort heureusement

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : août 2013
    Messages : 150
    Points : 60
    Points
    60

    Par défaut

    A partir du moment où on maîtrise SDL1 et sachant que SDL2 permet de charger OpenGL 3/4, autant se tourner vers SDL2.

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

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 307
    Points : 6 783
    Points
    6 783

    Par défaut

    Oui mais cela n'a rien n'a voir avec OpenGL , la SDL ici te sert pour le fenêtrage et les évents !
    Tu peux faire de l'OpenGL 3/4 avec freeglut , GLFW , Qt etc etc bref rien n'a voir avec la SDL donc
    Attention je ne dis pas de changer mais que la phrase que "la SDL 2 permet d'apprendre OpenGL" est faux , la SDL permet de s’interfacer avec OGL ni plus ni moins.
    On peut aussi faire de OpenGL 3 et 4 avec la SDL 1 comme fenetrage par exemple.

    Sinon par info ce tuto est mauvais et donc je te le déconseille

  8. #8
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : août 2013
    Messages : 150
    Points : 60
    Points
    60

    Par défaut

    SDL me sert pour créer un contexte OpenGL, bien sûr qu'on peut utiliser Qt et d'autres lib, mais je choisis SDL car je connais déjà.

    Citation Envoyé par Kannagi
    On peut aussi faire de OpenGL 3 et 4 avec la SDL 1 comme fenetrage par exemple.
    Euh ah bon ??? Donc si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre=SDL_SetVideoMode(800,600,32,SDL_OPENGL)
    Je pourrai utiliser OpenGL 3 ou 4 ???

    Citation Envoyé par Kannagi
    Sinon par info ce tuto est mauvais et donc je te le déconseille
    Par curiosité, qu'est-ce qu'il y a de mauvais ?

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

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 307
    Points : 6 783
    Points
    6 783

    Par défaut

    Comme je te l'ai dit , je ne te demande pas de changer ,j’utilise moi même SDL1 /OpenGL , mais je revenais juste que si tu faisais de la SDL2 pour utiliser les fonctions d'affichages ce n'est pas forcément utile quand on sait utiliser OpenGL, ni même qu'il y a un lien entre SDL et OpenGL (voila le forum se veut de donner des info fiables tout de même ! :p ).
    Comme dire que le C permet d'apprendre le C++ etc etc

    Citation Envoyé par KevinduC Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre=SDL_SetVideoMode(800,600,32,SDL_OPENGL)
    Je pourrai utiliser OpenGL 3 ou 4 ???
    Oui , par contre il faut utiliser GLEW (ou équivalent comme GL3W , GLAD) pour faire de l'OpenGL 2 ou plus.
    Mais je n'ai pas fait de l'OGL 4 personnellement mais théoriquement y'a pas de raison que cela ne marche pas

    Le tutoriel deja utilise un ton qui est proche de prendre le lecteur pour un abruti , c'est un style.... qu'il faut aimer , de plus OCR a tendance de faire des raccourci trop rapide sur certain point important !
    Comme dragonjoker59 je conseille ceux là : https://jeux.developpez.com/tutoriels/OpenGL-ogldev/ et http://ogldev.atspace.co.uk/

  10. #10
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : août 2013
    Messages : 150
    Points : 60
    Points
    60

    Par défaut

    Alors là je suis bluffé, j'ai toujours cru jusqu'à présent que SDL1 n'était pas compatible avec les versions modernes d'OpenGL.

    Merci pour les liens.

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

Discussions similaires

  1. [XL-2007] Problème affichage fenêtre (msgbox, inputbox, userform..)
    Par Leilou65 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/03/2017, 19h38
  2. Problème affichage fenêtre
    Par titou31000 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 28/11/2012, 14h29
  3. Problème affichage fenêtre simple
    Par grimmjow69 dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 10/04/2012, 19h51
  4. Réponses: 2
    Dernier message: 15/02/2007, 11h32
  5. Problème d'affichage: fenêtres (frames) vides!
    Par NdmaX dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 12/07/2005, 21h23

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