Класс 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, объединенных по оператору OR.
перечисление QSGRendererInterface::ShaderSourceTypeфлаги QSGRendererInterface::ShaderSourceTypes
| Постоянная | Значение | Описание |
|---|---|---|
QSGRendererInterface::ShaderSourceString |
0x01 |
Код шейдера может быть передан в виде строки в соответствующих свойствах ShaderEffect |
QSGRendererInterface::ShaderSourceFile |
0x02 |
Поддерживаются локальные или ресурсы файлы, содержащие исходный код шейдера |
QSGRendererInterface::ShaderByteCode |
0x04 |
Поддерживаются локальные или ресурсы файлы, содержащие байткод шейдера |
Тип ShaderSourceTypes — это псевдоним для QFlags<ShaderSourceType>. Он хранит комбинацию значений ShaderSourceType, объединенных по оператору OR.
перечисление 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.
END_OF_DOCUMENT_MARKER ```
[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.2/qsgrendererinterface.html