2017-03-27 1 views
0

Je travaille actuellement sur un projet OpenGL 2.1/Freeglut en C++ et j'ai besoin d'une valeur de retour d'une boucle glut en utilisant la fonction glutMainLoop() sans quitter immédiatement le courant programme. La solution que j'ai trouvée maintenant est d'appeler le glutLeaveMainLoop() mais il laisse le programme entièrement. Donc voici ma question, est-il possible de définir directement une valeur de retour à toute fonction Freeglut existante (puisque la surabondance ne permet pas de telles actions), ou toute autre technique pour fermer la fenêtre de surabondance sans quitter le programme en cours ? Désolé, si ma question peut sembler idiote et merci de la lecture.Obtenir une valeur de retour d'un projet Freeglut/Opengl 2.1

int MenuStatus; //will be edit during the process 

void runMainLoop(int val) //called by glutTimerFunc below 
{ 
    update(); 
    render(); 
    glutTimerFunc(1000/SCREEN_FPS, runMainLoop, val); 
    //In this statement, I need the program to leave the glutMainLoop() 
    if (MenuStatus > 0) 
    glutLeaveMainLoop(); 
} 

int HandleMenu(int ac, char **av) 
{ 
    glutInit(&ac, av); 
    glutInitContextVersion(2, 1); 
    glutInitDisplayMode(GLUT_DOUBLE); 
    glutInitWindowSize(SCREEN_WIDTH, SCREEN_HEIGHT); 
    glutCreateWindow("Arcade - OpenGL"); 
    if (!initGL()) 
    { 
     std::cerr << "Unable to initialize graphics library!" << std::endl; 
     return 1; 
    } 
    glutKeyboardFunc(handleKeys); 
    glutDisplayFunc(render); 
    //runMainLoop callback 
    glutTimerFunc(1000/SCREEN_FPS, runMainLoop, 0); 
    glutMainLoop(); 
    //return statement never reached. 
    return MenuStatus; 
} 

Désolé pour le code manquant, j'espère que ce sera plus compréhensible.

+0

Salut Lezard, Bienvenue sur stackoverflow, S'il vous plaît partager votre extrait de code ce que vous avez essayé jusqu'à présent et à quelle erreur vous êtes confronté. – ravi

+0

@ravi Merci, c'est fait, j'espère que c'est plus clair maintenant. –

+0

Y a-t-il une raison pour laquelle vous devez quitter la boucle principale? Qu'est-ce que vous essayez en général d'accomplir? – Vallentin

Répondre

2

Ajouter cette ligne de code avant d'appeler glutMainLoop();:

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); 

ou

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION); 

en fonction de vos besoins.

+0

Merci beaucoup, exactement ce dont j'avais besoin! –