opengl: вопрос о glutMainLoop () - PullRequest
0 голосов
/ 24 мая 2010

Может кто-нибудь объяснить, как работает glutMainLoop?и второй вопрос, почему glClearColor(0.0f, 0.0f, 1.0f, 1.0f); определено после glutDisplayFunc(RenderScene); потому что сначала мы вызываем glClear(GL_COLOR_BUFFER_BIT);, а только потом определяем glClearColor(0.0f, 0.0f, 1.0f, 1.0f);

int main(int argc, char* argv[])
    {
        glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(800, 00);
        glutInitWindowPosition(300,50);
    glutCreateWindow("GLRect");
    glutDisplayFunc(RenderScene);
        glutReshapeFunc(ChangeSize);
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);  <--
    glutMainLoop();

        return 0;
    }

void RenderScene(void)
    {
    // Clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);

    // Set current drawing color to red
    //         R     G     B
    glColor3f(1.0f, 0.0f, 1.0f);

    // Draw a filled rectangle with current color
    glRectf(0.0f, 0.0f, 50.0f, -50.0f);

    // Flush drawing commands
    glFlush();
    }

Ответы [ 2 ]

1 голос
/ 24 мая 2010

glutMainLoop() просто запускает цикл событий, специфичный для платформы, и при необходимости вызывает любые зарегистрированные glut*Func() обратные вызовы.

RenderScene() не будет вызываться GLUT, пока вы не позвоните glutMainLoop(). Так что в действительности сначала вызывается glClearColor(), а не glClear().

0 голосов
/ 25 мая 2010
glutDisplayFunc(RenderScene);

Это только устанавливает функцию обратного вызова, на самом деле она не вызывает ее, пока не войдет в основной цикл приложения в вызове на glutMainLoop. Так что glClearColor предшествует glClear.

...