Расскажите, пожалуйста, про Qt RHI.
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 23.09.20 15:44
Оценка: 2 (1)
Qt RHI (Rendering Hardware Interface) это новая обёртка (абстрагирующий слой) поверх 3D API разных разработчиков ПО:
Metal (macOS и iOS, Apple)
Direct 3D 12 (Windows 10, Microsoft)
Vulkan (Android и Linux, Google и непойми кто)
Совместимость с OpenGL тоже останется, но как-то внутри.
Эта обёртка впервые появилась в Qt 5.14, затем Qt 5.15 LTS и официально будет стандартной подсистемой для 3D-графики в Qt 6.

Реализация интерфейса находится в библиотеке QtGUI.

Для того, чтобы задействовать подсистему в Qt 5.14+ надо определить пару переменных окружения (QSG_RHI=1 QSG_RHI_BACKEND=vulkan),
или вызывать в main() специальную функцию API — QQuickWindow::setSceneGraphBackend(???).

Программы для графического сопроцессора (они называются "шейдеры"), надо писать заранее и компилировать в SPIR-V.
Чтобы понять как это, надо гуглить слова "glslang" (GLSL->SPIR-V) и "SPIRV-Cross".

Получается файл, внутри которого лежат программы на разных языках для разных графических API.
Этот файл засовывают в ресурсы, а потом в коде грузят ресурс в C++ объект и передают в функции API.
А рантайм потом выбирает подходящую.

Вопросы у меня такие:
1) можно ли рисовать в различных местах экрана разными ядрами CPU? (т.е. чтобы шейдеры загружались в многопоточном режиме)
2) что делать если графическая видеокарта двухпроцессорная? Как использовать разные сопроцессоры?
3) что делать, если в машине несколько видеокарт (к разным мониторам)?
4) как узнавать, какие мониторы подключены и где на них располагаются окна?
5) какая библиотека оборачивает это всё для использования в C# (желательно для Avalonia)
Re: Расскажите, пожалуйста, про Qt RHI.
От: Zhendos  
Дата: 23.09.20 17:08
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Вопросы у меня такие:

ЭФ>1) можно ли рисовать в различных местах экрана разными ядрами CPU? (т.е. чтобы шейдеры загружались в многопоточном режиме)

Смотря что имеется ввиду под рисовать, если ренерить что-нибудь в видео памяти
то можно сколько угодно для этого потоков использовать, а вот нарисовать результат на
экране это другой вопрос. По умолчанию в Qt вроде один поток занимается сбором того
что нужно нарисовать и отправкой команд видеокарте.

ЭФ>2) что делать если графическая видеокарта двухпроцессорная? Как использовать разные сопроцессоры?


В смысле двупроцессорная? Обычно в ней шейдерных процессоров намного больше,
например в nvidia 2060 — 1920 шейдерных процессоров

ЭФ>3) что делать, если в машине несколько видеокарт (к разным мониторам)?


Зависит от того что вы хотите сделать

ЭФ>4) как узнавать, какие мониторы подключены и где на них располагаются окна?


У QQuickWindow есть mapToGlobal/mapFromGlobal и у каждого QQuickView есть
"attached" свойство Screen
Re[2]: Расскажите, пожалуйста, про Qt RHI.
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 23.09.20 20:37
Оценка:
ЭФ>> в многопоточном режиме
Z> в Qt вроде один поток занимается сбором

Ну понятно, что меньше одного — никак. Даёт ли мне ваш ответ какую-нибудь информацию,
которую я не знал ранее?

Z> Обычно в ней шейдерных процессоров намного больше,

Z> например в nvidia 2060 — 1920 шейдерных процессоров

Не в ней, а в графическом процессоре.

Z>В смысле двупроцессорная?


В прямом смысле. На плате два графических процессора.

Radeon HD 4870 X2 — На ней два GPU, в каждом 800 шейдерных юнитов. Конкретно это плата старая, но
ничего не мешает таким быть новым, а тут вопрос принципа.

ЭФ>>3) что делать, если в машине несколько видеокарт (к разным мониторам)?

Z>Зависит от того что вы хотите сделать

Удобный пользовательский интерфейс под Linux, в частности тащение окна с монитора на монитор.
Была раньше Xinerama, да где она теперь, после прихода randr?

ЭФ>>4) как узнавать, какие мониторы подключены и где на них располагаются окна?

Z> У QQuickWindow есть mapToGlobal/mapFromGlobal и у каждого QQuickView есть
Z> "attached" свойство Screen

Спасибо, надо будет посмотреть.
Отредактировано 09.10.2020 20:23 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 24.09.2020 5:19 Эйнсток Файр . Предыдущая версия .
Отредактировано 24.09.2020 5:17 Эйнсток Файр . Предыдущая версия .
Отредактировано 24.09.2020 5:13 Эйнсток Файр . Предыдущая версия .
Отредактировано 24.09.2020 5:12 Эйнсток Файр . Предыдущая версия .
Отредактировано 23.09.2020 20:39 Эйнсток Файр . Предыдущая версия .
Отредактировано 23.09.2020 20:38 Эйнсток Файр . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.