![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| amarenkov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Доброе время суток.
В проекте занимался графикой на GDI+. Для того чтобы интерфейс не тормозил (отрисовка могла быть очень длительная - карта с топографическими объектами на ней), я вынес функцию рисования в отдельный поток. Там я все рисовал на битмап в памяти. Через определенные интервалы времени (или по завершению рисования) я этот битмап отрисовывал на экран. Теперь графику хочу переделать под OpenGL. Внимание, вопрос Заранее спасибо. |
|||
|
||||
| Mazzi |
|
|||
|
Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: нет Всего: 21 |
В OpenGL так всё и происходит, даже есть команда свопбуфер, для переключения буферов для рисования и отображения.
-------------------- Мне нужны помощники. |
|||
|
||||
| amarenkov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Нет, я не это имел в виду
Да, два буфера - это хорошо, но команды рисования проходят обычно через главный поток. Попробуйте сделать на форме панельку, на которую будете выводить через OpenGL. И отрисуйте пару миллиардов примитивных полигонов. Пока будет идти отрисовка, интерфейс будет отморожен - ни окно передвинуть, ни на что-то другое нажать - ничего нельзя будет сделать. Для этого, я выносил рисование в отдельный поток - и интерфейс не умирал Вот в этом и вопрос: я OpenGL могу без проблем рисовать из второго потока? |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
amarenkov, у вас все пара миллионов примитивов всегда в кадре?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| amarenkov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Rickert, нет, не всегда.
И тем не менее, вопрос в силе. Пусть у меня даже несколько тысяч полигонов в кадре - на слабых машинах может очень просто тормозить. Я делаю не игру. Мне не очень важна динамика и частая смена кадров. Мне важно, чтобы при построении сцены остальной интерфейс не умирал, чтобы все приложение целиком не подвешивалось. Это возможно? |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
amarenkov, все-го лишь несколько тысяч?
На Intel Xeon в 440 Мгц, с Geforce 2 на 32 метра я выводил статическую модель через трианглы + линии, на 82 000. Лагов не было никаких. Учитывая, что частота кажра была порядка 26. Всё что вам нужно - это поработать над оптимизацией вывода объектов. bsp, octre, frustum culling, ну и простые механические методы отброса. + отображать через списки (glDrawArray) -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| amarenkov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Rickert, спасибо за совет, и тем не менее...
Никто не может поручиться, что пользователь не забъет столько данных, что на их обработку и вывод будет уходить много времени. Даже АвтоКад получалось довести до торможения с очень сложными трехмерными сценами. Я хочу обезопаситься от этого и вынести во второй поток процесс рисования. Возможно ли это? |
|||
|
||||
| Mazzi |
|
|||
|
Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: нет Всего: 21 |
Если работаете под Виндой, то простое средство для вас - использовать два взаимосвязанных приложения, одно из которых предоставляет пользователю интерфейс, а второе рисует с помощью ОпенГЛ.
-------------------- Мне нужны помощники. |
|||
|
||||
| amarenkov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Mazzi , любопытное предложение.
А с многопоточными приложениями просто никто не разбирался в этом аспекте? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
контекст устройства должен должен быть создан в том же потоке , что и вывод опенгл. Если вы будете рисовать в память, а потом оттуда отображать на окно , то получится. Если напрямую рисовать на окно которое в другом потоке, то вряд ли. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 2 Всего: 52 |
Интересные у вас пользователи, которые не делом хотят заниматься, а ставят себе задачу расхреначить купленное приложение -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| amarenkov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |