2011-02-02 1 views
1

J'ai porté mon projet Opengl de Qt vers MFC avec succès .. uniquement en mode débogage.Dessin OpenGL invisible en mode release (lorsque _DEBUG est défini)

Tout fonctionne très bien en mode débogage.

Il fonctionne même en mode release, tant que _DEBUG est défini. Si ce n'est pas le cas, chaque fonction OpenGL est appelée, mais sans résultat sur l'écran.

Je n'utilise aucune fonction assert n'importe où dans le code. J'utilise Glew pour obtenir des pointeurs de fonction OpenGL.

est ici la fonction OpenGL (lent), même si je ne pense pas que cela va vraiment aider:

void COpenGLView::Render() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glBegin(GL_QUADS); 
    for(u32 i = 0; i < 144; ++i) 
    { 
     for(u32 j = 0; j < 160; ++j) 
     { 
      switch(lcd_[(i * 160)+j] & 0x3) 
      { 
      case WHITE:  glColor3f(0.75f,1.0f,0.75f); break; 
      case LIGHT_GREY: glColor3f(0.50f, 0.80f, 0.50f); break; 
      case DARK_GREY: glColor3f(0.25f,0.60f,0.25f); break; 
      case BLACK:  glColor3f(0.0f,0.0f,0.0f); break; 
      } 
      glVertex2d(j,i); 
      glVertex2d(j,i + 1); 
      glVertex2d(j + 1,i + 1); 
      glVertex2d(j + 1,i); 
    } 
    } 
    glEnd(); 

    FinishRender(); 
} 

Le problème principal est le suivant: Il est lié OpenGL rien sur l'écran si _DEBUG est non défini!

Quelqu'un sait d'où vient ce problème?

+1

Publiez un programme minimal et complet qui illustre le problème. – genpfault

+0

Possible de faire un buffer-swap si _DEBUG est défini? Mais c'est comme deviner sans plus de code ... – Constantin

Répondre

0

Ceci est probablement dû à une mauvaise utilisation de MFC. Dans le cas où vous n'utilisez pas #ifdef _DEBUG ou ASSERT() n'importe où dans votre code, il est toujours possible qu'il soit utilisé dans certaines macros définies par le MFC. MFC est assez lourd sur les macros qui appellent juste une fonction WinAPI, et ces macros peuvent très bien contenir quelques #ifdefs eux-mêmes.

Mais peu importe, MFC et OpenGL devraient être très simples à mélanger. Il suffit de poster votre code d'initialisation OpenGL pour voir si nous pouvons y arriver.