Класс 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 или выше через абстракцию графического API. Это значение было введено в Qt 5.14. |
QSGRendererInterface::Direct3D11Rhi |
6 |
Direct3D 11 через абстракцию графического API. Это значение было введено в Qt 5.14. |
QSGRendererInterface::VulkanRhi |
7 |
Vulkan 1.0 через абстракцию графического API. Это значение было введено в Qt 5.14. |
QSGRendererInterface::MetalRhi |
8 |
Metal через абстракцию графического API. Это значение было введено в Qt 5.14. |
QSGRendererInterface::NullRhi |
9 |
Null (нет вывода) через абстракцию графического API. Это значение было введено в 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 — псевдоним для 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
Запрашивает графический ресурс в 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.15/qsgrendererinterface.html