Russian Qt Forum
Ноябрь 24, 2024, 20:31
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
OpenGL, многопоточность
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: OpenGL, многопоточность (Прочитано 12002 раз)
Lestat
Гость
OpenGL, многопоточность
«
:
Ноябрь 30, 2009, 17:09 »
Здравствуйте!
Хотелось бы найти демку с рендером одной сцены OpenGL в разных виджетах...
т.е. расшаривание ресурсов контекста OpenGL
По документации Qt так и не понял ничего... не получается расшарить VBO.
Нашел неплохой тутор,
http://www.crossplatform.ru/node/241#writingmultithreadedglapplications
Попытался собрать исходники под Qt 4.6... допилил напильником)
чего-то скомпилилось, но кроме серого опенгл виджета ничего не наблюдаю)
Помогите, если кто с подобным сталкивался.
Интересует возможность загружать VBO и текстуры в отдельном потоке, т.е. рисовать в одном, загружать в другом.
Ну и расшаривание ресурсов (VBO, текстур, шейдеров) между несколькими контекстами.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: OpenGL, многопоточность
«
Ответ #1 :
Ноябрь 30, 2009, 18:04 »
Не делал этого. Мысли были но не нашел что я буду с этого иметь. Рендерить в др. нитке не очень эффективно пока все данные не загружены. А часто и просто нельзя (напр. с той же прозрачностью). Если карта не держит и/или попадется не thread-safe шейдер или еще что - надо откатываться на одиночный вариант. Все это слишком хлопотно и роль CPU не очень ясна
Вместо этого приспособил glCallLists и получил очень хороший прирост по скорости
Записан
Lestat
Гость
Re: OpenGL, многопоточность
«
Ответ #2 :
Декабрь 04, 2009, 15:59 »
Многопоточность кривая, т.к. драйверу фактически нужно передавать последовательность команд, но в некоторых случаях может пригодится!
У меня получилось собрать демку в которой реализуется рендер контекстов OpenGL с расшаренными VBO!
контекст среднего окна создает VBO которые расшариваются на контексты мелких окон.
Цветной квадратик на скрине это как раз расшаренные ресурсы... его вершины, индексы и цвет лежат в расшаренных буфферах!
Теперь хотелось бы сделать поток, в котором можно выполнять какие-нибудь операции над расшаренными VBO...
слить демку можно тут
Qt_OpenGL_multiwindow.rar
Файл проекта для Visual Studio лежит в папке ./build/msvs/
для QtCreator в ./build/QtCreator/
«
Последнее редактирование: Декабрь 04, 2009, 16:12 от Lestat
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: OpenGL, многопоточность
«
Ответ #3 :
Декабрь 05, 2009, 14:00 »
Это немного не в тему, но, по-моему, интересно. Вы дали в углах чистые цвета: red, green, blue, black - а почему раскрашено не симметрично, какая-то зеленая диагональ?
Я понимаю, OGL так делает, но почему?
Спасибо
Записан
Lestat
Гость
Re: OpenGL, многопоточность
«
Ответ #4 :
Декабрь 05, 2009, 14:39 »
потому что получается на самом деле это два треугольника... рисуется через GL_TRIANGLE_STRIP
и чистые цвета на углах этих самых двух треугольников, вот и получается градиент с зеленого на черный по длинным сторонам этих треугольников
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: OpenGL, многопоточность
«
Ответ #5 :
Декабрь 05, 2009, 14:46 »
Цитата: Lestat от Декабрь 05, 2009, 14:39
потому что получается на самом деле это два треугольника... рисуется через GL_TRIANGLE_STRIP
и чистые цвета на углах этих самых двух треугольников, вот и получается градиент с зеленого на черный по длинным сторонам этих треугольников
Спасибо, ясно. А можно ли закрасить лучше (напр. написать шейдер который будет плавно интерполировать) для 4-х угольника? Какой алгоритм?
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: OpenGL, многопоточность
«
Ответ #6 :
Декабрь 05, 2009, 18:49 »
Цитировать
Не делал этого. Мысли были но не нашел что я буду с этого иметь.
Экономию памяти в 2 раза по идее - например при реализации кабины автомобиля - лобового и бокового стекла - при рендере с расшаренными ресурсами вместо запуска 2-х копий рендера у которого все ресурсы будут свои и повторяющиеся...
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: OpenGL, многопоточность
«
Ответ #7 :
Декабрь 05, 2009, 19:05 »
Цитата: break от Декабрь 05, 2009, 18:49
Цитировать
Не делал этого. Мысли были но не нашел что я буду с этого иметь.
Экономию памяти в 2 раза по идее - например при реализации кабины автомобиля - лобового и бокового стекла - при рендере с расшаренными ресурсами вместо запуска 2-х копий рендера у которого все ресурсы будут свои и повторяющиеся...
Для этого есть glCallLists - очень удачное решение если нужны различные виды одной сцены.
Записан
Lestat
Гость
Re: OpenGL, многопоточность
«
Ответ #8 :
Декабрь 05, 2009, 20:10 »
Цитата: Igors от Декабрь 05, 2009, 14:46
Спасибо, ясно. А можно ли закрасить лучше (напр. написать шейдер который будет плавно интерполировать) для 4-х угольника? Какой алгоритм?
Можно сгенерировать текстуру с нужной интерполяцией на CPU, можно и с шейдерами поковыряться...
давно находил демки, уроки с созданием процедурных текстур
Цитата: Igors от Декабрь 05, 2009, 19:05
Для этого есть glCallLists - очень удачное решение если нужны различные виды одной сцены.
так ресурсы все равно нужно уметь расшарить для разных контекстов...
Разве glCallLists из разных контекстов будут видеть одни и те же листы? В этом я очень сильно сомневаюсь...
Текстуры тоже нужно расшаривать... кстати, glCallLists устаревшее решение, насколько я знаю на данный момент рекомендуется использовать VBO и вроде бы уже даже VAO, но VAO на практике я не юзал
«
Последнее редактирование: Декабрь 05, 2009, 20:14 от Lestat
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: OpenGL, многопоточность
«
Ответ #9 :
Декабрь 05, 2009, 21:10 »
Цитата: Lestat от Декабрь 05, 2009, 20:10
Цитата: Igors от Декабрь 05, 2009, 14:46
Спасибо, ясно. А можно ли закрасить лучше (напр. написать шейдер который будет плавно интерполировать) для 4-х угольника? Какой алгоритм?
Можно сгенерировать текстуру с нужной интерполяцией на CPU, можно и с шейдерами поковыряться...
давно находил демки, уроки с созданием процедурных текстур
Понятно, вижу что такие задачи в Ваш круг интересов не входят. Это нормально, каждому свое
Записан
xop
Гость
Re: OpenGL, многопоточность
«
Ответ #10 :
Декабрь 12, 2009, 18:04 »
Цитата: Igors от Декабрь 05, 2009, 14:46
Спасибо, ясно. А можно ли закрасить лучше (напр. написать шейдер который будет плавно интерполировать) для 4-х угольника? Какой алгоритм?
Можно, варианты - либо своя текстура (как писали выше), либо через геометрический шейдер, реализующий специальную интерполяцию (пример есть в cg toolkit от nvidia).
По основной теме - расшаривать ресурсы можно и нужно, но рендерить все лучше из одного потока, особенно если физически GPU один. Пробовал работать с несколькими контекстами из разных потоков (причем даже не для рендера, а просто для фоновой подгрузки данных) - огреб по полной программе, то ли из-за драйвера, то ли у меня руки кривые
Насчет многопоточной оптимизации рендера - есть еще вариант - подготавливать свой список команд на рендер (когда объектов в сцене много - это может быть не такой быстрой задачей) в другом потоке (или даже потоках), и потом этот буфер передавать в основной поток рендера и там эти команды выполнять. Слышал, что можно получить хороший выигрыш, но сам не пробовал.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...