OpenGL пропускает основную функцию в visual studio - PullRequest
2 голосов
/ 23 января 2012

Я пытаюсь запустить следующий код opengl c ++ в Visual Studio 2010. Я использую openglut в качестве набора утилит opengl.

#include <iostream>
#include <gl\openglut.h>

using std::cout;
using std::endl;

void RenderScene()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
}

void SetupRC()
{
    glClearColor(0, 0, 1.0f, 1.0f);
}

int main(int argc, char* argv[])
{
    cout << "Test1" << endl;

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();

    glutMainLoop();

    cout << "Test2" << endl;

    return 0;
}

Код компилируется правильно, но при запуске без отладки на консоли ничего не отображается. Когда я создаю точку останова в первом операторе cout и запускаю с отладкой, он не останавливается на точке останова. Кажется, пропускает основную функцию. После того, как я закомментировал перенасыщение операторов gl между 2 утверждениями cout и чистым решением, он ведет себя правильно (останавливается на точке останова). Если я не очищаю решение, оно ведет себя неправильно, но я вижу, что Visual Studio компилирует код после внесения изменений. Такое странное поведение происходит только тогда, когда я включаю код opengl. Мне не нужно чистить раствор после того, как я внесу изменения в обычном режиме. Что является причиной этого?

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Оказывается, я должен был положить файл freeglut.dll рядом с исполняемым файлом. Прежде чем положить его в папку system32, чтобы не загромождать вещи. Код работает сейчас. Visual Studio должна была выдать какую-то ошибку, но она не показала ошибок или предупреждений.

0 голосов
/ 23 января 2012

Обычно функция glutMainLoop не возвращает . Когда вы закроете окно, эта функция полностью остановит приложение. Так что после этого вызова функции ничего не будет выполнено.

Даже если более поздний код будет выполнен, это произойдет только тогда, когда вы закроете окно. glutMainLoop - это то, что сидит и ждет, когда вы сделаете что-то с вашим окном. Он вызывает функции обратного вызова, которые вы зарегистрировали, когда события происходят в окне (перемещение мыши, нажатие мыши, отображение на дисплее требует обновления, таймеры и т. Д.).

Думайте об этом как о while(true) петле.

...