Класс 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 } |
Публичные функции
| 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 | shaderCompilationType() const = 0 |
| virtual QSGRendererInterface::ShaderSourceTypes | shaderSourceType() const = 0 |
| virtual 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
Запрашивает графический ресурс в window. Возвращает 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.0/qsgrendererinterface.html