Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема с приложением OpenGL

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблема с приложением OpenGL
Имя
Сообщение << Старые топики   Новые топики >>
Проблема с приложением OpenGL - 2011-01-04 00:27:10.050000   
autom

Сообщений: 4
Оценки: 0
Присоединился: 2009-11-05 15:26:17.813333
Написал программу, легкую, для вывода прямых
Она работает, но после нажатия на крестик у окна, она закрывается, а в процессах остается и жрет 18 мб.
Меня бесит, приходится каждый раз ее через таскмененджер закрывать.
Вот код:
#include &lt;GL/gl.h&gt; #include &lt;GL/glu.h&gt; #include &lt;GL/glut.h&gt; void display(){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glColor3f(0.0, 0.0, 0.0); //Цвет для 1 линии glVertex2f(0.25, 0.25); glVertex2f(0.75, 0.75); glColor3f(1.0, 0.0, 0.0); //Цвет для 2 линии glVertex2f(0.75, 0.25); glVertex2f(0.25, 0.75); glEnd(); glFlush(); } int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(400, 400); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL test"); glClearColor(1.0, 1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glutDisplayFunc(display); glutMainLoop(); return 0; }
Post #: 1
RE: Проблема с приложением OpenGL - 2011-01-04 10:07:49.676666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Видимо, не сам писал ;)
Post #: 2
RE: Проблема с приложением OpenGL - 2011-01-04 23:57:07.546666   
autom

Сообщений: 4
Оценки: 0
Присоединился: 2009-11-05 15:26:17.813333
Сам, не сам))
Так вы знаете, в чем дело? Компилил через Code::Blocks.
PS У вас на forum.antichat.ru заходит?
Post #: 3
RE: Проблема с приложением OpenGL - 2011-01-05 00:54:50.543333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: _SaZ_
Видимо, не сам писал ;)

Да без разницы. Что-то я припоминаю похожее. Но не уверен, что испытал это именно с glut и не знаю как с этим бороться. В glut все коллбеки необязательны, так что это сильно похоже на глюк (баг?). Но я бы попробовал перерыть API glut, на предмет функций вида glut*Func. А вдруг там можно установить коллбек на закрытие окна. Или на что-нибудь, что включает в себя закрытие окна. И вот из этого коллбека, я бы попробовал glutExitMainLoop (или как там это называется?). А если бы это не сработало, то тупо использовал бы exit(0).
Post #: 4
RE: Проблема с приложением OpenGL - 2011-01-05 01:04:13.253333   
autom

Сообщений: 4
Оценки: 0
Присоединился: 2009-11-05 15:26:17.813333
Хорошо, спасибо.
Наверно глюк, потому, что программы без glut, выходят спокойно!
Post #: 5
RE: Проблема с приложением OpenGL - 2011-01-06 13:04:12.326666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Просто нажатие "крестика" в консоли не есть нормальное завершение работы программы и цикл сообщений спокойно продолжает себе крутиться. Соответственно, нужно либо корректно делать работу с консолью, либо компилировать приложение как оконное (опции компилирования: subsystem = windows, а не console).
Post #: 6
RE: Проблема с приложением OpenGL - 2011-01-07 12:18:00.023333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Я не думаю что речь идёт о "крестике в консоли". Скорее всего используется крестик окошка с opengl-выводом.
Post #: 7
RE: Проблема с приложением OpenGL - 2011-01-07 13:14:22.663333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Всех тонкостей не знаю, но, имхо, у оконного приложения (по крайней мере в MSVS) прототип точки входа по-умолчанию это WinMain, а не main.
Post #: 8
RE: Проблема с приложением OpenGL - 2011-01-07 14:13:03.703333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: _SaZ_
Всех тонкостей не знаю, но, имхо, у оконного приложения (по крайней мере в MSVS) прототип точки входа по-умолчанию это WinMain, а не main.

Насколько я знаю, это особенность MSVC. Всякие там CodeBlocks, думающие о кроссплатформенности, используют main.
Post #: 9
RE: Проблема с приложением OpenGL - 2011-01-07 14:28:37.890000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Тогда, возможно, изначально пример писался под MSVS, у которого есть одна хитрая особенность - дёргать ExitProcess в функции main вместо return-а. А с нормальными компиляторами этот трюк не прокатывает.
Post #: 10
RE: Проблема с приложением OpenGL - 2011-01-07 16:19:39.706666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Если ты заглянешь в примеры идущие в комплекте с glut, там всё организовано именно так, никаких слов про win-main там нет. Я думаю, что всё дело в том, что main-loop glut "забывает" правильно среагировать на WM_QUIT или что-то типа того. Он не завершается и программа навечно зависает в glutMainLoop. Может это связано с версией вендовс – скажем на семёрке приходят какие-то несколько другие сообщения, и glutMainLoop не получает того "завершительного" эвента, которое он ждёт для завершения цикла. Гадать об этом можно долго, но узнать точно можно лишь одним способом: влезть в сорцы glut, найти там main-loop, и выяснить при каких условиях этот main-loop завершается. А дальше используя знание win32api дедуктивным путём выяснить в чём дело. Или можно просто заняться отладкой glut.
И я говорю, что-то подобное я наблюдал, и возможно именно с глут. Сейчас проверить не удаётся, ибо X-сервер у меня без ускорения: никак мне не добраться и не выяснить, с чего это вдруг nvidia-drivers поссорились с последними версиями ядра.

Но есть и другой способ: можно просто научить glut приложение реагировать на кнопку esc, и оттуда вызывать glutQuit/glutExitMainLoop/glutKillYouself или что-то в этом роде, предназначенное для завершения glutMainLoop.
Post #: 11
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблема с приложением OpenGL







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.