![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Здравствуйте.
Допустим, у нас есть диалог, написанный средствами чистого Win API, а в нём находится контрол IDC_EDIT, в область которого направлен вывод последовательности функций OpenGL. Экран при запуске такой : ![]() Графика нормально выводится, перерисовывается при возвращении из трея, но при перетаскивании окна за границы области экрана и обратно наблюдается вот какой эффект : ![]() То есть при перетаскивании на области контрола остаются куски изображения по траектории перетаскивания и в дальнейшем не пропадают. Причём происходит это только если выводить окно за границу экрана и перетащить его оттуда с достаточно большой скоростью. Почему это происходит? = Кто-нибудь, объясните, пожалуйста! Вот некоторые коды : Перерисовку делаю по WM_PAINT:
Само рисование - через контекст устройства :
-------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| PRIZRAK001 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 13.7.2005 Репутация: 1 Всего: 1 |
Во-первых
Это обязательно каждый раз инициализировать, а затем деинициал-ть OpenGL при прорисовке контрола? Может стоить сделать это один раз: после создания окна и перед его уничтожением? Во-вторых Я не вижу функции очистки экрана glClear(...). Если ты не используешь какие-то свои методы очистки, то эту функцию надо писать перед прорисовкой. Во-третьих Деинициализация OpenGL осуществляется следующим образом
|
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Действительно, оператор glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); в нужном месте полностью решил проблему. Спасибо большое
Под инициализацией & деинициализацией понимаются операции над контекстами в DWORD WINAPI RefreshGL(HWND hDlg)? = Я правильно понял, что Вы предлагаете один раз создавать контексты при создании окна и один раз удалять при уничтожении окна? -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| PRIZRAK001 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 13.7.2005 Репутация: 1 Всего: 1 |
Да.
Верно. Но я немного ошибся. Не "окна", а "контрола". У тебя ведь графика выводится на контроле. Следовательно, после того как контрол создан - инициализируем OpenGL, перед тем как он будет удален - деинициализируем. И ещё. Только сейчас заметил. Для меня странно, что у тебя инициализация проходит без установки формата пикселей |
||||
|
|||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |