2017-03-27 3 views
0

Ich arbeite gerade an einem OpenGL 2.1/Freeglut Projekt in C++ und ich brauche einen Rückgabewert von einer Glutschleife mit der glutMainLoop() Funktion, ohne sofort die aktuelle zu verlassen Programm. Die Lösung, die ich gefunden habe, ist, das glutLeaveMainLoop() aufzurufen, aber es verlässt das Programm vollständig.Einen Rückgabewert von einem Freeglut/OpenGL 2.1 Projekt bekommen

Also hier ist meine Frage, gibt es eine Möglichkeit, direkt einen Rückgabewert zu einer beliebigen Freeglut-Funktion (da Überschwang erlaubt keine Aktionen wie diese), oder andere Techniken, um die Überlauffenster zu schließen, ohne das aktuelle Programm zu verlassen ?

Sorry, wenn meine Frage kann Idiot und danke für das Lesen.

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; 
} 

Sorry über den fehlenden Code, hoffe, es wird verständlicher.

+0

Hallo Lezard, Willkommen zu stackoverflow, bitte teilen Sie Ihren Code-Ausschnitt, was Sie bisher versucht haben und welchen Fehler Sie konfrontiert sind. – ravi

+0

@ravi Danke, dass es erledigt ist, hoffe, dass es jetzt klarer ist. –

+0

Gibt es einen Grund, warum Sie die Hauptschleife verlassen müssen? Was versuchst du insgesamt zu erreichen? – Vallentin

Antwort

2

diese Codezeile hinzufügen, bevor Sie glutMainLoop(); nennen:

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); 

oder

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION); 

je nach Ihren Bedürfnissen.

+0

Vielen Dank, genau das, was ich brauchte! –

Verwandte Themen