QSGRendererInterface Класс
Интерфейс, предоставляющий доступ к некоторым внутренним аспектам графического API сцены. Подробнее...
| Заголовок: | #include <QSGRendererInterface> |
| CMake: | find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| С момента: | Qt 5.8 |
Типы публичного доступа
| перечисление | GraphicsApi { Unknown, Software, OpenVG, OpenGL, Direct3D11, …, Null } |
| перечисление | RenderMode { RenderMode2D, RenderMode2DNoDepthBuffer, RenderMode3D } |
| перечисление | Resource { DeviceResource, CommandQueueResource, CommandListResource, PainterResource, RhiResource, …, RenderPassResource } |
| перечисление | ShaderCompilationType { RuntimeCompilation, OfflineCompilation } |
| флаги | ShaderCompilationTypes |
| перечисление | ShaderSourceType { ShaderSourceString, ShaderSourceFile, ShaderByteCode } |
| флаги | ShaderSourceTypes |
| перечисление | ShaderType { UnknownShadingLanguage, GLSL, HLSL, RhiShader } |
Публичные функции
| виртуальный void * | getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const |
| виртуальный void * | getResource(QQuickWindow *window, const char *resource) const |
| виртуальный QSGRendererInterface::GraphicsApi | graphicsApi() const = 0 |
| виртуальный QSGRendererInterface::ShaderCompilationTypes | shaderCompilationType() const = 0 |
| виртуальный QSGRendererInterface::ShaderSourceTypes | shaderSourceType() const = 0 |
| виртуальный QSGRendererInterface::ShaderType | shaderType() const = 0 |
Статические публичные члены
| bool | isApiRhiBased(QSGRendererInterface::GraphicsApi api) |
Подробное описание
Интерфейсы рендеринга позволяют получать доступ к функциональности, специфичной для графического API, в дереве сцены. Такие внутренние детали обычно не экспонируются. Однако при интеграции пользовательского рендеринга через QSGRenderNode, например, может потребоваться запросить определенные значения, такие как графический процессор (например, Direct3D или Vulkan), используемый деревом сцены.
Функции QSGRendererInterface имеют различную доступность. Запросы к API и языку, такие как graphicsApi() или shaderType(), всегда доступны, что означает, что достаточно построить QQuickWindow или QQuickView, и графический API или используемый язык шейдеров можно запросить сразу после этого через QQuickWindow::rendererInterface(). Это гарантирует, что утилиты, такие как тип QML GraphicsInfo, смогут сообщать правильные значения как можно раньше, без условных значений свойств — зависящих, например, от shaderType() — оцениваемых неожиданным образом.
Доступ к функциям, специфичным для движка, например, getResource(), доступен только после инициализации дерева сцены. Кроме того, могут существовать ограничения, специфичные для бэкэнда, на то, когда можно вызывать такие функции. Единственный гарантированный способ — вызвать их, когда активен рендеринг узла (т. е. подготовка списка команд для следующего кадра). На практике это обычно означает QSGRenderNode::render().
Документация по типам членов
перечисление QSGRendererInterface::GraphicsApi
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::Unknown |
0 |
Используется неизвестный графический API |
QSGRendererInterface::Software |
1 |
Используется Qt Quick 2D рендерер |
QSGRendererInterface::OpenVG |
2 |
OpenVG через EGL |
QSGRendererInterface::OpenGL |
3 |
OpenGL ES 2.0 или выше через абстракцию графического слоя. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::Direct3D11 |
4 |
Direct3D 11 через абстракцию графического слоя. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::Vulkan |
5 |
Vulkan 1.0 через абстракцию графического слоя. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::Metal |
6 |
Metal через абстракцию графического слоя. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::Null |
7 |
Null (нет вывода) через абстракцию графического слоя. Это значение было добавлено в Qt 5.14. |
перечисление QSGRendererInterface::RenderMode
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::RenderMode2D |
0 |
Обычный 2D рендеринг |
QSGRendererInterface::RenderMode2DNoDepthBuffer |
1 |
Обычный 2D рендеринг с отключенным буфером глубины |
QSGRendererInterface::RenderMode3D |
2 |
Сцена рендерится как часть 3D графика |
перечисление QSGRendererInterface::Resource
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::DeviceResource |
0 |
Ресурс — указатель на графический устройство, если применимо. Например, VkDevice *, MTLDevice * или ID3D11Device *. Обратите внимание, что при использовании Vulkan возвращаемое значение — указатель на VkDevice, а не сам дескриптор. Это связано с тем, что дескрипторы Vulkan могут не быть указателями и могут использовать размер, отличающийся от размера указателя архитектуры, поэтому простое приведение типов к/из void * неверно. |
QSGRendererInterface::CommandQueueResource |
1 |
Ресурс — указатель на очередь графических команд, используемую графическим процессом, если применимо. Например, VkQueue * или MTLCommandQueue *. Обратите внимание, что при использовании Vulkan возвращаемое значение — указатель на VkQueue, а не сам дескриптор. |
QSGRendererInterface::CommandListResource |
2 |
Ресурс — указатель на список или буфер команд, используемый графическим процессом, если применимо. Например, VkCommandBuffer * или MTLCommandBuffer *. Действительность этого объекта ограничена и сохраняется только во время подготовки следующего кадра графическим процессом. Обратите внимание, что при использовании Vulkan возвращаемое значение — указатель на VkCommandBuffer, а не сам дескриптор. |
QSGRendererInterface::PainterResource |
3 |
Ресурс — указатель на активный объект QPainter, используемый графическим процессом при использовании программного бэкенда. |
QSGRendererInterface::RhiResource |
4 |
Ресурс — указатель на экземпляр QRhi, используемый графическим процессом, если применимо. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::RhiSwapchainResource |
5 |
Ресурс — указатель на экземпляр QRhiSwapchain, связанный с окном. Значение равно null, если окно используется в сочетании с QQuickRenderControl. Это значение было добавлено в Qt 6.0. |
QSGRendererInterface::RhiRedirectCommandBuffer |
6 |
Ресурс — указатель на экземпляр QRhiCommandBuffer, связанный с окном и его QQuickRenderControl. Значение равно null, если окно не связано с QQuickRenderControl. Это значение было добавлено в Qt 6.0. |
QSGRendererInterface::RhiRedirectRenderTarget |
7 |
Ресурс — указатель на экземпляр QRhiTextureRenderTarget, связанный с окном и его QQuickRenderControl. Значение равно null, если окно не связано с QQuickRenderControl. Это значение было добавлено в Qt 6.0. |
QSGRendererInterface::PhysicalDeviceResource |
8 |
Ресурс — указатель на физическое устройство, используемое графическим процессом, если применимо. Например, VkPhysicalDevice *. Обратите внимание, что при использовании Vulkan возвращаемое значение — указатель на VkPhysicalDevice, а не сам дескриптор. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::OpenGLContextResource |
9 |
Ресурс — указатель на QOpenGLContext, используемый графическим процессом (в потоке отрисовки), если применимо. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::DeviceContextResource |
10 |
Ресурс — указатель на контекст устройства, используемый графическим процессом, если применимо. Например, ID3D11DeviceContext *. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::CommandEncoderResource |
11 |
Ресурс — указатель на активный объект кодировщика команд отрисовки, используемый графическим процессом, если применимо. Например, MTLRenderCommandEncoder *. Объект имеет ограниченную область действия и действителен только во время записи прохода отрисовки для следующего кадра. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::VulkanInstanceResource |
12 |
Ресурс — указатель на QVulkanInstance, используемый графическим процессом, если применимо. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::RenderPassResource |
13 |
Ресурс — указатель на проход отрисовки, используемый графическим процессом, описывающий цвет и глубину/маски, а также то, как они используются. Например, VkRenderPass *. Это значение было добавлено в Qt 5.14. |
перечисление QSGRendererInterface::ShaderCompilationTypeфлаги QSGRendererInterface::ShaderCompilationTypes
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::RuntimeCompilation |
0x01 |
Поддерживается компиляция кода шейдеров во время выполнения |
QSGRendererInterface::OfflineCompilation |
0x02 |
Поддерживается предварительно скомпилированный байткод |
Тип ShaderCompilationTypes — псевдоним для QFlags<ShaderCompilationType>. Он хранит логическое ИЛИ комбинацию значений ShaderCompilationType.
перечисление QSGRendererInterface::ShaderSourceTypeфлаги QSGRendererInterface::ShaderSourceTypes
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::ShaderSourceString |
0x01 |
Исходный код шейдеров может быть передан в виде строки в соответствующих свойствах ShaderEffect |
QSGRendererInterface::ShaderSourceFile |
0x02 |
Поддерживаются локальные или ресурсные файлы, содержащие исходный код шейдеров |
QSGRendererInterface::ShaderByteCode |
0x04 |
Поддерживаются локальные или ресурсные файлы, содержащие байткод шейдеров |
Тип ShaderSourceTypes — псевдоним для QFlags<ShaderSourceType>. Он хранит логическое ИЛИ комбинацию значений ShaderSourceType.
перечисление QSGRendererInterface::ShaderType
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::UnknownShadingLanguage |
0 |
Еще неизвестно из-за отсутствия окна и графического процесса |
QSGRendererInterface::GLSL |
1 |
GLSL или GLSL ES |
QSGRendererInterface::HLSL |
2 |
HLSL |
QSGRendererInterface::RhiShader |
3 |
Использует экземпляры QShader, содержащие варианты шейдеров для нескольких целевых языков и промежуточных форматов. Это значение было добавлено в Qt 5.14. |
Документация по функциям-членам
[virtual] void *QSGRendererInterface::getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const
Запрашивает графический ресурс в окне. Возвращает null, если запрашиваемый ресурс не поддерживается или недоступен.
При успехе возвращаемый указатель является либо прямым указателем на интерфейс, либо указателем на непрозрачный дескриптор, который необходимо сначала разыменовать (например, VkDevice dev = *static_cast<VkDevice *>(result)). Последнее необходимо, так как такие дескрипторы могут иметь размер, отличный от размера указателя.
Примечание: Владелец возвращаемого указателя никогда не передаётся вызывающей стороне.
Примечание: Эта функция должна вызываться только в потоке отрисовки.
[virtual] void *QSGRendererInterface::getResource(QQuickWindow *window, const char *resource) const
Запрашивает графический ресурс. resource — ключ, специфичный для бэкенда. Это позволяет поддерживать любые будущие ресурсы, которые не перечислены в перечислении Resource.
Примечание: Владелец возвращаемого указателя никогда не передаётся вызывающей стороне.
Примечание: Эта функция должна вызываться только в потоке отрисовки.
[pure virtual] QSGRendererInterface::GraphicsApi QSGRendererInterface::graphicsApi() const
Возвращает графический API, используемый Qt Quick графическим процессом.
Примечание: Эта функция может вызываться из любого потока.
[static, since 5.14] bool QSGRendererInterface::isApiRhiBased(QSGRendererInterface::GraphicsApi api)
Возвращает true, если api базируется на абстрактном уровне графического процессора (QRhi), а не на непосредственном вызове родного API графического процессора.
Примечание: Эта функция может вызываться из любого потока.
Эта функция была добавлена в Qt 5.14.
[pure virtual] QSGRendererInterface::ShaderCompilationTypes QSGRendererInterface::shaderCompilationType() const
Возвращает маску битов подходов к компиляции шейдеров, поддерживаемых Qt Quick бэкендом, используемым приложением.
Примечание: Данную функцию можно вызывать в любом потоке.
См. также QtQuick::GraphicsInfo.
[pure virtual] QSGRendererInterface::ShaderSourceTypes QSGRendererInterface::shaderSourceType() const
Возвращает битовую маску поддерживаемых способов предоставления источников шейдеров в элементах ShaderEffect.
Примечание: Данную функцию можно вызывать в любом потоке.
См. также QtQuick::GraphicsInfo.
[pure virtual] QSGRendererInterface::ShaderType QSGRendererInterface::shaderType() const
Возвращает язык шейдерного языка, поддерживаемый бэкендом Qt Quick, используемым приложением.
Примечание: Данную функцию можно вызывать в любом потоке.
См. также QtQuick::GraphicsInfo.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qsgrendererinterface.html