2016-08-02 4 views
0

normalerweise ein GLUT-Anwendung wird in folgendem Schema aufgebaut sein:OpenGL/GLUT Änderung Rückrufe innerhalb glutMainLoop()

  • einige Initialisierung Sachen
  • glutMainLoop()

ich nur Zugriff auf eine Zeichnung haben Callback-Funktion innerhalb der Hauptschleife. Ich kann den Initialisierungsteil nicht ändern. Gibt es eine Möglichkeit, eine Callback-Funktion wie glutKeyboardFunc() innerhalb dieser Schleife zu ändern? Oder gibt es eine andere Möglichkeit, Tastatureingaben ohne Zugriff auf den Initialisierungsteil zu erfassen?

Dank

Antwort

1

Ja, Sie glut…Func jederzeit anrufen können. Zum Beispiel könnten Sie auf Tastatur-Handler-Funktionen haben und zwischen ihnen wechseln (Kontexttasten)

void keyfunc_edit(unsigned char key, int x, int y); 
void keyfunc_select(unsigned char key, int x, int y); 

void keyfunc_edit(unsigned char key, int x, int y) 
{ 
    switch(key){ 
    case 'x': 
    case 'X': 
     /* switch to select mode */ 
     glutKeyboardFunc(keyfunc_select); 
     break; 
} 

void keyfunc_select(unsigned char key, int x, int y) 
{ 
    switch(key){ 
    case 'e': 
    case 'E': 
     /* switch to edit mode */ 
     glutKeyboardFunc(keyfunc_edit); 
     break; 
} 

Dies funktioniert für jede GLUT Rückruf, so dass Sie Rückrufe für die Anzeige, Leerlauf und so weiter, jederzeit wechseln können. Angenommen, Sie möchten einen Ladebildschirm anzeigen, dann ist es sinnvoll, den Display-Callback auf eine Ladebildschirm-Anzeigefunktion umzustellen. Sobald der Ladevorgang abgeschlossen ist, wechseln Sie zu einer Szenen-Renderfunktion.