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 :

SDL+OpenGL problème FullScreen


Sujet :

SDL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut SDL+OpenGL problème FullScreen
    Bonjour,

    Je fait un projet avec les librairies SDL2 et OpenGL 4.5.

    Si la fenêtre est en mode Windowed ou en mode FullScreen avec la résolution de mon l'écran(1920x1080) tous va bien!
    Mais quand je change la résolution en mode FullScreen rien ne va plus.

    Voici un exemple de code que j'utilise: (J'ai simplifié le code pour une meilleur compréhension avec une résolution 640x480)
    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
    void AppRenderer::ResizeWindows(bool isFullScreen)
    {
         if(m_isFullScreen)
         {
              SDL_DisplayMode mode;
              for(int i = 0; i < SDL_GetNumDisplayModes(0); ++i)
              {
                   SDL_GetDisplayMode(0, i, &mode);
     
                   if(mode.w == 640 && mode.h == 480 && mode.refresh_rate == 60)
                   {
                        break;	// La résolution 640x480 a été Trouvée!
                   }
              }
     
              SDL_SetWindowFullscreen(m_fenetre, SDL_WINDOW_OPENGL);
              SDL_SetWindowDisplayMode(m_fenetre, &mode);
              SDL_SetWindowFullscreen(m_fenetre, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP);
         }
         else
         {
              SDL_SetWindowFullscreen(m_fenetre, SDL_WINDOW_OPENGL);
              SDL_SetWindowSize(m_fenetre, 640, 480);
         }
     
         glViewport(0, 0, 640, 480);
    }
    J'ai fait des testes et voici ce que j'obtient:
    Cliquer sur l'image pour l'agrandir.


    On peut voir le problème en mode FullScreen avec la résolution 640x480(voir l'image).
    On peut voir que le rendu de la scene est dans le coin en bas à gauche de la fenêtre. Et non au centre de la fenêtre comme il devrait être.

    J'ai perdu beaucoup de temps sur internet pour trouver la réponse à mon problème(sans résultat).
    J'aurais besoin de votre aide.

    Savez-vous pourquoi mon code ne fonctionne pas?
    Avez-vous des exemples de code fonctionnel à me donner?

    Merci pour votre aide!

  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
    A l'époque de la SDL1.2 , je sais que le fullscreen buggais ,donc est qu'il continu à bug ?
    C'est pas impossible

    Sinon je pense que tu peux oublier OpenGL 4.5 , ce n'est clairement plus utilisé , trop complexe et obsolète.
    Donc je te conseille soit d'utiliser OpenGL 3.3 (qui reste obsolète mais plus largement utilisé) soit Vulkan.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci Kannagi pour ta réponse!

    Je vais essayer de garder l'api OpenGL 4.5 car mon code est trop avancé et j'utilise des fonction qui ne sont pas présente dans l'api OpenGL 3.3.
    Je vais changer d'api graphique seulement en dernier recours.

    J'ai l'impression que le problème est la fonction SDL_SetWindowDisplayMode() qui ne fait pas son travail.
    J'ai l'impression que la résolution reste toujours à 1920x1080 en mode FullScreen même si je la modifie.
    Pourtant ce code en bas ne me donne aucun message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(SDL_SetWindowDisplayMode(m_fenetre, &mode) < 0)
    {
         std::cout << "Unable to set the Window DisplayMode! Error: " << SDL_GetError() << std::endl;
    }
    Je vais surement changer ma librairie SDL pour aller vers la librairie GLFW.
    Ou regarder le code de la fonction SDL_SetWindowDisplayMode() dans le mercurial de la SDL pour voir ce qui cloche.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bonjour j'ai fini par trouver mon erreur!

    J'ai downloader le Mercurial de la SDL et je suis allé voir le code de la fonction SDL_SetWindowDisplayMode().

    voici le code de la fonction SDL_SetWindowDisplayMode().
    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
    #define FULLSCREEN_VISIBLE(W)  (((W)->flags & SDL_WINDOW_FULLSCREEN) && ((W)->flags & SDL_WINDOW_SHOWN) && !((W)->flags & SDL_WINDOW_MINIMIZED))
     
    int SDL_SetWindowDisplayMode(SDL_Window * window, const SDL_DisplayMode * mode)
    {
        CHECK_WINDOW_MAGIC(window, -1);
     
        if (mode) {
            window->fullscreen_mode = *mode;
        } else {
            SDL_zero(window->fullscreen_mode);
        }
     
        if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
            SDL_DisplayMode fullscreen_mode;
            if (SDL_GetWindowDisplayMode(window, &fullscreen_mode) == 0) {
                SDL_SetDisplayModeForDisplay(SDL_GetDisplayForWindow(window), &fullscreen_mode);
            }
        }
        return 0;
    }
    On peut voir que pour corriger mon erreur je doit seulement changer le flag SDL_WINDOW_FULLSCREEN_DESKTOP pour le flag SDL_WINDOW_FULLSCREEN.
    Maintenant tous les résolutions de fenêtre fonctionne bien en mode Windowed et en mode FullScreen!

    Merci

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    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 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Cool que vous ayez trouvé la solution! Quelque fois, un oeil dans le code source, ça aide

    En annexe, votre problème m'a rappelé cet article : https://www.gamasutra.com/blogs/Maso...ie_sort_of.php (bon, c'est pas la même chose, mais ça parlait de plein écran)
    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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Intéressant le lien de la discussion sur le mode plein écran exclusif!

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

Discussions similaires

  1. [SDL allié à OpenGL] Problème l'écran n'affiche rien
    Par Harlock le Fléau dans le forum SDL
    Réponses: 5
    Dernier message: 04/11/2010, 14h16
  2. Réponses: 3
    Dernier message: 23/08/2006, 12h29
  3. SDL+opengl+drivers nvidia 56.72 et plus
    Par ttf dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/05/2004, 14h28
  4. [Debutant] Sdl & OpenGl link ne marche pas
    Par Riko dans le forum OpenGL
    Réponses: 9
    Dernier message: 18/02/2004, 16h13
  5. OPENGL Couleurs Fullscreen
    Par Boublou dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/09/2002, 13h00

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