Класс QSGRendererInterface
Интерфейс, предоставляющий доступ к некоторым внутренним данным графического API, специфичным для сцены. Подробнее...
| Заголовок: | #include <QSGRendererInterface> |
| qmake: | QT += quick |
| С момента: | Qt 5.8 |
Этот класс был добавлен в Qt 5.8.
Типы публичного доступа
| перечисление | GraphicsApi { Unknown, Software, OpenGL, Direct3D12, OpenVG, …, NullRhi } |
| перечисление | Resource { DeviceResource, CommandQueueResource, CommandListResource, PainterResource, RhiResource, …, RenderPassResource } |
| перечисление | Тип компиляции шейдера { RuntimeCompilation, OfflineCompilation } |
| флаги | Типы компиляции шейдеров |
| перечисление | Тип источника шейдера { ShaderSourceString, ShaderSourceFile, ShaderByteCode } |
| флаги | Типы источников шейдеров |
| перечисление | Тип шейдера { UnknownShadingLanguage, GLSL, HLSL, RhiShader } |
Публичные функции
| virtual void * | getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const |
| virtual void * | getResource(QQuickWindow *window, const char *resource) const |
| virtual QSGRendererInterface::GraphicsApi | graphicsApi() const = 0 |
| virtual QSGRendererInterface::ShaderCompilationTypes | типКомпиляцииШейдера() const = 0 |
| virtual QSGRendererInterface::ShaderSourceTypes | типИсточникаШейдера() const = 0 |
| virtual QSGRendererInterface::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::OpenGL |
2 |
OpenGL ES 2.0 или выше |
QSGRendererInterface::Direct3D12 |
3 |
Direct3D 12 |
QSGRendererInterface::OpenVG |
4 |
OpenVG через EGL |
QSGRendererInterface::OpenGLRhi |
5 |
OpenGL ES 2.0 или выше через слой абстракции графики. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::Direct3D11Rhi |
6 |
Direct3D 11 через слой абстракции графики. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::VulkanRhi |
7 |
Vulkan 1.0 через слой абстракции графики. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::MetalRhi |
8 |
Metal через слой абстракции графики. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::NullRhi |
9 |
Null (без вывода) через слой абстракции графики. Это значение было добавлено в Qt 5.14. |
перечисление 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::PhysicalDeviceResource |
5 |
Ресурс — указатель на физический объект устройства, используемый сценаграфикой, если применимо. Например, VkPhysicalDevice *. Обратите внимание, что с Vulkan возвращаемое значение — указатель на VkPhysicalDevice, а не сам дескриптор. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::OpenGLContextResource |
6 |
Ресурс — указатель на QOpenGLContext, используемый сценаграфикой (в потоке отрисовки), если применимо. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::DeviceContextResource |
7 |
Ресурс — указатель на контекст устройства, используемый сценаграфикой, если применимо. Например, ID3D11DeviceContext *. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::CommandEncoderResource |
8 |
Ресурс — указатель на активный объект-кодировщик команд отрисовки, используемый сценаграфикой, если применимо. Например, MTLRenderCommandEncoder *. Этот объект имеет ограниченный срок действия и валиден только во время записи прохода отрисовки для следующего кадра сценаграфикой. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::VulkanInstanceResource |
9 |
Ресурс — указатель на QVulkanInstance, используемый сценаграфикой, если применимо. Это значение было добавлено в Qt 5.14. |
QSGRendererInterface::RenderPassResource |
10 |
Ресурс — указатель на проход отрисовки, используемый сценаграфикой, описывающий цвет и глубину/стецил-приложения и способ их использования. Например, VkRenderPass *. Это значение было добавлено в Qt 5.14. |
перечисление QSGRendererInterface::ShaderCompilationTypeфлаги QSGRendererInterface::ShaderCompilationTypes
| Константа | Значение | Описание |
|---|---|---|
QSGRendererInterface::RuntimeCompilation |
0x01 |
Поддерживается компиляция исходного кода шейдера во время выполнения |
QSGRendererInterface::OfflineCompilation |
0x02 |
Поддерживается предварительно скомпилированный байткод |
Тип ShaderCompilationTypes — это typedef для QFlags<ShaderCompilationType>. Он хранит результат побитового ИЛИ значений ShaderCompilationType.
перечисление QSGRendererInterface::ShaderSourceTypeфлаги QSGRendererInterface::ShaderSourceTypes
| Константа | Значение | Описание |
|---|---|---|
QSGRendererInterface::ShaderSourceString |
0x01 |
Исходный код шейдера может быть предоставлен в виде строки в соответствующих свойствах ShaderEffect |
QSGRendererInterface::ShaderSourceFile |
0x02 |
Поддерживаются локальные или ресурсные файлы, содержащие исходный код шейдера |
QSGRendererInterface::ShaderByteCode |
0x04 |
Поддерживаются локальные или ресурсные файлы, содержащие байткод шейдера |
Тип ShaderSourceTypes — это typedef для 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
Запрашивает графический ресурс в window. Возвращает null, если запрашиваемый ресурс не поддерживается или недоступен.
При успехе возвращаемый указатель — это либо прямой указатель на интерфейс (и может быть приведён, например, к ID3D12Device *), либо указатель на неявный дескриптор, который необходимо сначала разыменовать (например, 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] 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-5.14/qsgrendererinterface.html