Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Прога не выгружается из процессов после закрытия


Автор: Georgy90 13.11.2009, 18:10
Вообщем проблемма в том, что программа невыгружается из процессов после закрытия. Пишу на (VS2008) C++ с преминением OpenGL.
Т.е. я на крестик жму, окно закрываю, но в процессах всеравно весит программа. А если из VS запускать на отладку, то после закрытия окна отладка не завершается (панель с кнопками для отладки висит), приходиться принудительно завершать отладку. Программы без применения OpenGL работают нормально.

На всякий случай кусок кода:

Код

#include <windows.h>            // Header File For Windows
#include <gl\gl.h>            // Header File For The OpenGL32 Library
#include <glut.h>                // Header File For The Glut Library

//Вызывается процедура рисования сцены
void RenderScene(void)
{
    //Окно очищается текущим цветом очистки
    glClear(GL_COLOR_BUFFER_BIT);
    //В качестве текущего цвета рисования задается красный
    //R G B
    glColor3f(1.0f, 0.0f, 0.0f);
    //Рисует прямоугольник, закрашенный текущим цветом
    glRectf(-25.0f, 25.0f, 25.0f, -25.0f);
    glRectf(25.0f, -25.0f, 50.0f, -50.0f);
    //Очищает очередь текущих команд
    glFlush();
}

//Устанавливается состояние визуализации
void SetupRC(void)
{
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}

//Вызывается библиотека GLUT при изменении  размеров окна
void ChangeSize(GLsizei w, GLsizei h) {
    GLfloat aspectRatio;
    //Предотвращает деление на нуль
    if(h == 0)
        h = 1;
    //Устанавливает поле просмотра с размерами окна
    glViewport(0, 0, w, h);
    //Обновляет систему координат
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //С помощью плоскостей отсечения (левая, правая, нижняя, верхняя, ближняя, дальняя)
    //устанавливает обьем отсечения
    aspectRatio = (GLfloat)w / (GLfloat)h;
    if(w <= h)
        glOrtho (-100.0, 100.0, -100/aspectRatio, 100.0/aspectRatio, 1.0, -1.0);
    else
        glOrtho (-100.0 * aspectRatio, 100.0 * aspectRatio, -100, 100.0, 1.0, -1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

//Точка входа основной программы
void main(void)
{
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutCreateWindow("GLRect");
    glutDisplayFunc(RenderScene);
    glutReshapeFunc(ChangeSize);
    SetupRC();
    glutMainLoop();
}


P.S. OpenGL в начальной стадии изучения. Подскажите, может пока далеко не ушел лучше изучать directx или openGl сначала а потом directx ?

Автор: Solomon 17.11.2009, 14:28
по симптомам похоже на неправильную работу с динамической памятью.
это все исходники? или еще что то естЬ? по этому коду ничего такого поидеи недолжно быть...

Автор: VirtualVoid 18.11.2009, 20:41
Ну из OpenGL там вызывается всего несколько простых функций, поэтому проблема не в опенгл, а в glut. Что если написить glutTimerFunc, glutPostRedisplay, SpecialKeys и т.д., т.е. сделать более полноценное использование глута?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)