Изменение размера окна приводит к чёрному экрану, SDL2 + OpenGL - C (СИ)
Формулировка задачи:
Здравствуйте!
Собственно, вот такая проблема. Есть некоторое приложение, рисующее несколько 3D-фигур. Если не менять изначально заданный размер окна - всё прекрасно работает. Если изменить - всё. Всё что не относится к плоскому отображению (пока что для тестов тёмно-красный квадрат в углу) просто напросто исчезает. Чёрный экран. Попробовал добавить к обработчику изменения размеров gluPerspective... Ничего, в общем, хорошего: половина размеров дают тот же чёрный экран (остальная половина вроде как отображается)
Сделал скринкапт, наглядно это демонстрирующий.
http://haont.16mb.com/server/demo6.zip
http://youtu.be/w9pgIidDCtQ
Добавил SDL_GetWindowSize (замер размера окна) и ReadyMatrices (пересчёт матрицы) перед каждым выводом изображения, но, как я понимаю, это сильно скажется на производительности.
Есть какие-либо лучшие решения?
Решение задачи: «Изменение размера окна приводит к чёрному экрану, SDL2 + OpenGL»
textual
Листинг программы
if(event->type == SDL_WINDOWEVENT) { if(event->window.event == SDL_WINDOWEVENT_CLOSE) cont->quit = 1; if(event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) { int r = 0; int w = event->window.data1; int h = event->window.data2; cont->windowWidth = w; cont->windowHeight = h; ReadyMatrices(cont); } }
Объяснение кода листинга программы
- Если тип события равен SDL_WINDOWEVENT
- Если событие окна закрытия (SDL_WINDOWEVENT_CLOSE)
- Если событие изменения размера окна произошло (SDL_WINDOWEVENT_SIZE_CHANGED)
- Объявляем переменные: а) r (0) б) w (event->window.data1) в) h (event->window.data2)
- Присваиваем новые размеры окна переменным w и h и сохраняем их в структуру cont
- Вызываем функцию ReadyMatrices(cont)
Пояснение:
- В данном коде мы обрабатываем два возможных события, которые могут произойти с окном: закрытие и изменение размера.
- Если произошло событие закрытия окна, то мы устанавливаем флаг quit в 1, что приведет к выходу из программы.
- Если произошло событие изменения размера окна, то мы сохраняем новые размеры в структуре cont и вызываем функцию ReadyMatrices(cont). Эта функция, скорее всего, занимается подготовкой матриц для дальнейшей работы с OpenGL.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д