GL/GLUT Tastatureingaben verzögert



  • Hi,

    ich hab da dieses recht simple Programm, dass mit Glut ein Dreieck auf den Bildschirm zeichnet. Beim drücken auf Links-Rechts solle es sich drehen. Mein Problem ist nun, dass die Eingabe verzögert behandelt wird. Heisst ich drücke die Taste und es dauert etwa 1-2 Sekunden, bis das Programm reagiert. Weiß jemand Rat?
    Hier hatte jemand das gleiche Problem:
    http://lists.kde.org/?l=kde-games-devel&m=107773675017835&w=2

    Das ganze läuft bei mir logischerweise unter X11 (oder besser X.org)

    😕

    #include <GL/glut.h>
    #include <stdlib.h>
    
    float angle=0.0;
    
    void renderScene(void);
    void processSpecialKeys(int key, int x, int y);
    
    int main(int argc, char** argv) {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(320,200);
        glutCreateWindow("3D Tech- GLUT Tutorial");
        glutIdleFunc(renderScene);
        glutSpecialFunc(processSpecialKeys);
        glEnable(GL_DEPTH_TEST);
        glutMainLoop();
        return 0;
    }
    
    void renderScene(void) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
        glRotatef(angle,0.0,1.0,0.0);
        glBegin(GL_TRIANGLES);
            glVertex3f(-0.5,-0.5,0.0);
            glVertex3f(0.5,0.0,0.0);
            glVertex3f(0.0,0.5,0.0);
        glEnd();
        glPopMatrix();
        glutSwapBuffers();
    }
    
    void processSpecialKeys(int key, int x, int y) {
        switch(key) {
            case GLUT_KEY_LEFT:
                printf("++\n");
                angle++;
                break;
            case GLUT_KEY_RIGHT:
                printf("--\n");
                angle--;
                break;
            default:
                break;
        }
    }
    

    Edit:
    Das ganze läuft flüssig, wenn ich die Idle-Funktion entferne. Was soll ich mit der Idle-Funktion, wenn die alles stört!! Gibts da Abhilfe?


Anmelden zum Antworten