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 :

MFC et WGL_EXT_swap_control


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut MFC et WGL_EXT_swap_control
    Cela fait plusieurs jours que je recherche comment gérer le rafraichissement d'une fenetre OpenGL dans une Boite de dialogue MFC.

    J'ai réussi avec des timers à rafraichir ma fenètre OpenGL, mais lorsque j'y ai intégré un compteur de FPS j'ai vu qu'elle ne tournait qu'à 60fps (en moyenne). Par contre, lorsque je passais la souris sur la fenetre, alors les fps passaient à 85. Ca aussi j'ai réussi à palier le problème en modifiant le corps de la fonction OnTimer().

    Maintenant, ma fenetre OpenGL tourne tout le temps à 85fps et je cherche à la faire tourner à bien plus, pour pouvoir faire une sorte de bench perso pour voir l'efficacité de mes programmes. J'ai cherché pas mal sur le forum et j'ai vu que l'on pouvait désactiver la synchronisation verticale avec WGL_EXT_swap_control. Je l'ai implémenté mais ma fenetre OpenGL ne tourne toujours pas plus vite.
    NB: En désactivant la V-Sync dans les drivers, la fenêtre tournait entre 3000 et 5000fps (ce que je recherche à faire, en gros).

    Je ne comprends pas pourquoi cela ne marche pas : j'ai limpression que la MFC bloque le rafraichissement. Voici juste le code de la création de la fenetre OpenGL (juste au cas où).
    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
     
    int COpenGLControl::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	char* extensions = NULL;
    	if (CWnd::OnCreate(lpCreateStruct) == -1) return -1;
     
    	// Initial Setup:
    	static PIXELFORMATDESCRIPTOR pfd =
    	{
    		sizeof(PIXELFORMATDESCRIPTOR),
    		1,
    		PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
    		PFD_TYPE_RGBA,
    		32, // bit depth
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		16, // z-buffer depth
    		0, 0, 0, 0, 0, 0, 0,
    	};
     
    	// Get device context only once.
    	m_hdc = GetDC()->m_hDC;
     
    	// Pixel format.
    	m_nPixelFormat = ChoosePixelFormat(m_hdc, &pfd);
    	SetPixelFormat(m_hdc, m_nPixelFormat, &pfd);
     
    	// Setup the OpenGL Window's timer to render
    	m_uipTimer = SetTimer(1, 1, NULL);
     
    	// Create the OpenGL Rendering Context.
    	m_hrc = wglCreateContext(m_hdc);
    	wglMakeCurrent(m_hdc, m_hrc);
    	SetCursor(LoadCursor(NULL, IDC_ARROW));
     
    	// Enable/Disable the vertical synchronization
    	extensions = (char*)glGetString(GL_EXTENSIONS);
    	if (strstr(extensions, "WGL_EXT_swap_control"))
    	{
    		//MessageBox(extensions);
    		wglSwapInterval = reinterpret_cast<PFNWGLSWAPINTERVALEXT>(wglGetProcAddress("wglSwapIntervalEXT"));
    		wglGetSwapInterval = reinterpret_cast<PFNWGLGETSWAPINTERVALEXT>(wglGetProcAddress("wglGetSwapIntervalEXT"));
    		wglSwapInterval(1);
    		//if (wglGetSwapInterval() > 0) MessageBox("Synchronisation Verticale activée");
    	}
     
    	oglInitialize();
    	return 0;
    }
    Si quelqu'un arrivait à me dire où ça bloque... j'en peux plus de chercher et d'arriver à rien dès que j'entrevois une solution.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut
    Mais quel boulet...

    Je viens juste de trouver la solution : il fallait juste passer
    à
    ... et en plus j'avais mon messagebox() qui indiquait la réponse.

    Désolé du dérangement. Mais en tout cas, ça marche !!

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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