Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGL во втором потоке, Рисовать сцену не в главном потоке 
:(
    Опции темы
amarenkov
Дата 3.10.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Доброе время суток.

В проекте занимался графикой на GDI+. Для того чтобы интерфейс не тормозил (отрисовка могла быть очень длительная - карта с топографическими объектами на ней), я вынес функцию рисования в отдельный поток. Там я все рисовал на битмап в памяти. Через определенные интервалы времени (или по завершению рисования) я этот битмап отрисовывал на экран. 

Теперь графику хочу переделать под OpenGL.

Внимание, вопрос smile: возможно ли рисовать через OpenGL во втором потоке в какой-нибудь буфер, который потом отображать на экран? Получится ли так рисовать в задний буфер? Или вообще надо сделать как-то иначе?

Заранее спасибо.


PM MAIL ICQ   Вверх
Mazzi
Дата 3.10.2008, 14:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



В OpenGL так всё и происходит, даже есть команда свопбуфер, для переключения буферов для рисования и отображения.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
amarenkov
Дата 3.10.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Нет, я не это имел в виду smile.

Да, два буфера - это хорошо, но команды рисования проходят обычно через главный поток. Попробуйте сделать на форме панельку, на которую будете выводить через OpenGL. И отрисуйте пару миллиардов примитивных полигонов. Пока будет идти отрисовка, интерфейс будет отморожен - ни окно передвинуть, ни на что-то другое нажать - ничего нельзя будет сделать.

Для этого, я выносил рисование в отдельный поток - и интерфейс не умирал smile.

Вот в этом и вопрос: я OpenGL могу без проблем рисовать из второго потока?
PM MAIL ICQ   Вверх
Rickert
Дата 3.10.2008, 19:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



amarenkov, у вас все пара миллионов примитивов всегда в кадре?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
amarenkov
Дата 6.10.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Rickert, нет, не всегда.

И тем не менее, вопрос в силе. Пусть у меня даже несколько тысяч полигонов в кадре - на слабых машинах может очень просто тормозить.

Я делаю не игру. Мне не очень важна динамика и частая смена кадров. Мне важно, чтобы при построении сцены остальной интерфейс не умирал, чтобы все приложение целиком не подвешивалось. Это возможно?
PM MAIL ICQ   Вверх
Rickert
Дата 6.10.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



amarenkov, все-го лишь несколько тысяч?
На Intel Xeon в 440 Мгц, с Geforce 2 на 32 метра я выводил статическую модель через трианглы + линии, на 82 000. Лагов не было никаких.
Учитывая, что частота кажра была  порядка 26.
Всё что вам нужно - это поработать над оптимизацией вывода объектов. bsp, octre, frustum culling, ну и простые механические методы отброса. + отображать через списки (glDrawArray)


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
amarenkov
Дата 6.10.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Rickert, спасибо за совет, и тем не менее...

Никто не может поручиться, что пользователь не забъет столько данных, что на их обработку и вывод будет уходить много времени. Даже АвтоКад получалось довести до торможения с очень сложными трехмерными сценами. 

Я хочу обезопаситься от этого и вынести во второй поток процесс рисования. Возможно ли это?
PM MAIL ICQ   Вверх
Mazzi
Дата 6.10.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



Если работаете под Виндой, то простое средство для вас - использовать два взаимосвязанных приложения, одно из которых предоставляет пользователю интерфейс, а второе рисует с помощью ОпенГЛ.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
amarenkov
Дата 6.10.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Mazzi , любопытное предложение.

А с многопоточными приложениями просто никто не разбирался в этом аспекте?
PM MAIL ICQ   Вверх
mes
Дата 6.10.2008, 16:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: нет
Всего: 250



Цитата(amarenkov @  3.10.2008,  15:39 Найти цитируемый пост)
Вот в этом и вопрос: я OpenGL могу без проблем рисовать из второго потока? 

контекст устройства должен должен быть создан в том же потоке , что и вывод опенгл. Если вы будете рисовать в память, а потом оттуда отображать на окно , то получится.
Если напрямую  рисовать на окно которое в другом потоке, то вряд ли.


--------------------
PM MAIL WWW   Вверх
Rickert
Дата 7.10.2008, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Цитата(amarenkov @  6.10.2008,  12:11 Найти цитируемый пост)
Никто не может поручиться, что пользователь не забъет столько данных, что на их обработку и вывод будет уходить много времени. Даже АвтоКад получалось довести до торможения с очень сложными трехмерными сценами. 

Интересные у вас пользователи, которые не делом хотят заниматься, а ставят себе задачу расхреначить купленное приложение smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
amarenkov
Дата 7.10.2008, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Rickert, smile). Пользователи нормальные, просто могут ооочень много данных ввести. 

Цитата(mes @  6.10.2008,  16:11 Найти цитируемый пост)
Если вы будете рисовать в память

А как это можно сделать? Во задний буфер рисовать - это в память?

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.