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 :

Problèmes affichage fenêtre [SDL 2.0]


Sujet :

SDL

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    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 régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    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 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
    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 régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    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 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
    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 régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    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 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
    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 régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    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 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
    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 régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    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