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

OpenGL Discussion :

[SDL OpenGL]Plein écran plus lent qu'en fenêtré ?!


Sujet :

OpenGL

  1. #1
    Invité
    Invité(e)
    Par défaut [SDL OpenGL]Plein écran plus lent qu'en fenêtré ?!
    Bonjour

    J'utilise SDL, OpenGL, Windows 2000 mon écran est en 1024x768, vraies couleur, affichage 75 Hz.

    J'ai une démo qui tourne, et bizarrement, quand je passe en FULLSCREEN, l'application est plus lente.

    En fenêtré 1024x768, elle tourne à 75 Hz et en 1024x768 ou 800x600 plein écran elle tourne à 50 Hz, voire moins...

    Vous auriez une idée d'où ça vient ?

    Voici mon code d'initialisation...

    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
     
    int main(int argc, char *argv[]) {
      const SDL_VideoInfo* pSDL_videoInfo = NULL;
     
      // initialisation de SDL
      if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("Video initialization failed: %s\n", SDL_GetError());
        quit(1);
      }
      pSDL_videoInfo = SDL_GetVideoInfo();
      if (!pSDL_videoInfo) {
        printf("Video query failed: %s\n", SDL_GetError());
        quit(1);
      }
     
      SDL_WM_SetCaption("Titre", NULL);
     
      // propriétés de la fenêtre (RGB, profondeur et double buffer)
      int ncLargeur = 1024;//800 // 1024;
      int ncHauteur = 768;//600 // 768;
      int bpp = 0;
      bpp = pSDL_videoInfo->vfmt->BitsPerPixel;
      SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
      SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
      SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
      SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
      SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
     
      int flags = SDL_OPENGL;/* |*/;
      //flags |= SDL_FULLSCREEN;
      flags |= SDL_GL_DOUBLEBUFFER ;
      //flags |= SDL_HWSURFACE;
      //flags |= SDL_HWPALETTE;
      //flags |= SDL_HWACCEL;
      //flags |= SDL_RESIZABLE;
     
      pSDL_surface_principale = SDL_SetVideoMode(ncLargeur, ncHauteur, bpp, flags);
      if (pSDL_surface_principale == NULL ) {
        printf("Erreur de selection du mode video : %s\n", SDL_GetError());
        quit(1);
      }
     
      fnInitialiserAffichage(ncLargeur, ncHauteur);
      // Boucle d'affichage
      while(1) {        
        fnGestionDesEvenements();
        fnAfficher();
      }
      return 0;

  2. #2
    Membre régulier Avatar de Groove
    Inscrit en
    Décembre 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 97
    Points : 93
    Points
    93
    Par défaut
    As tu desactivés la synchronisation vertical dans les setting des drivers?

  3. #3
    Invité
    Invité(e)
    Par défaut ??
    Citation Envoyé par Groove
    As tu desactivés la synchronisation vertical dans les setting des drivers?
    Aucune idée !!
    Comment fait-on ça ?

  4. #4
    Invité
    Invité(e)
    Par défaut Ca marche !
    J'ai cherché un peu sur internet et j'ai trouvé le code suivant :

    Je l'ai essayé et... Waouh !! Ma démo est devenue une véritable fusée !!! (beaucoup trop rapide).
    Il faut que j'ajoute du code pour calculer (et brider) mon nombre de fps...

    Le code que j'ai mis en commentaire ci-dessous sert à quoi ? (je l'ai récupéré ici : http://jegx.free.fr/coding/gfx_coding_part5.php )

    Par contre ça m'inquiète un peu de ne plus être synchro avec l'affichage... Ca ne va pas me faire des "bavures" si je dessine pendant le rafraichissement écran ?

    Et pourquoi la synchronisation verticale est plus faible en plein écran (50 Hz) qu'en fenêtré (75 Hz) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
    typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
     
     
    void fnInitialiserAffichage( int ncLargeur, int ncHauteur ) {
      // Disable vertical synchronisation if possible --------------------
      //if( checkOGLExtension("WGL_EXT_swap_control")==1 )
      //{
      PFNWGLSWAPINTERVALEXTPROC glSwapIntervalEXT;
      glSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
      //}
        if (glSwapIntervalEXT) {
            glSwapIntervalEXT(0);
        }

  5. #5
    Invité
    Invité(e)
    Par défaut Merci !
    Merci Groove !

    NB :
    Par contre en mode fenêtre, ça ne change rien. C'est normal ?

Discussions similaires

  1. plein écran plus disponible
    Par Infophile dans le forum Gnome
    Réponses: 0
    Dernier message: 08/10/2010, 14h12
  2. [Ubuntu 8.04]Firefox : mode plein écran + disparition du gestionnaire des fenêtres
    Par MaliciaR dans le forum Applications et environnements graphiques
    Réponses: 14
    Dernier message: 24/08/2008, 05h57
  3. [Cal3D] OpenGL/Cal3D 20x plus lents sous windows
    Par nicoenz dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 17/11/2006, 12h36
  4. Réponses: 3
    Dernier message: 23/08/2006, 12h29
  5. SDL+opengl+drivers nvidia 56.72 et plus
    Par ttf dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/05/2004, 14h28

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