OpenGL и рисование на экране
Подумал тут, куря маны по GLUT, если GL всегда создаёт окна, а мне вот хочется, чтобы на рабочем столе снежинки падали, например или шарик летал, при этом сам рабочий стол не закрывался бы, то сделать так не получится? GL же окно создаёт, которое рабочий стол будет закрывать.
Можно ли как-то сделать, чтобы окно не создавалось или тут придётся уже нативными апи рисовать без создания окна?
А проблема то в чём? Получаете контекст рабочего стола и на нём прямо рисуете.
Я получал контекст окон функцией GetDC в которую передаётся хендл, но не для рисования, а для извлечения цвета по определённым координатам. А для рабочего стола может вообще есть отдельная функция в которую ничего не нужно передавать.
GL не занимается управлением окнами (равно как их созданием, изменением или удалением), а также не устанавливает режим дисплея.
GLUT - это кроссплатформенная библиотека, которая использует функции оконной системы Windows API, системы сообщений и устройств ввода а также функции с приставкой wgl*. На *nix-платформах, вместо этого GLUT использует интерфейс GLX. Следовательно, совершенно необязательно использовать GLUT, чтобы использовать OpenGL.
Для инициализации OpenGL в Windows нужно:
1. Получить графический контекст нужного окна, вызовом GetDC.
2. Установить формат пикселя. Пары вызовов ChoosePixelFormat/SetPixelFormat хватит в большинстве случаев.
3. Создать OpenGL-контекст и сделать его активным. Вызовы wglCreateContext и wglMakeCurrent соответственно.
После того, как контекст выбран, все функции GL будут его использовать. Для отрисовки вы можете в своем приложении взводить таймер, срабатывающий FPS раз в секунду, т.е. таймаут таймера должен быть равен 1000 / FPS. FPS задавайте сами. Для нединамичной сцены (в вашем случае), вполне хватит 30. Отрисовка при перехвате сообщения WM_PAINT слишком медленна, а организовывать бесконечный цикл - пустая трата %CPU.
Понял, спасибо.
GL не занимается управлением окнами (равно как их созданием, изменением или удалением), а также не устанавливает режим дисплея.
Созданием, изменением или удалением он точно не занимается, но OS X и Compiz в линуксе насколько я знаю в OpenGL и отображают окна. GDI мог (незнаю может ли сейчас) рисовать по рабочему столу если контекст от 0-го окна получать. Скорее всего в системах где OpenGL не используется для вывода окон это сделать нельзя (я имею ввиду ту самую систему).