QSGRendererInterface Class

scenegraphのグラフィックスAPI固有の内部へのアクセスを提供するインターフェース。詳細...

Header: #include <QSGRendererInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick

パブリックタイプ

enum GraphicsApi { Unknown, Software, OpenVG, OpenGL, Direct3D11, …, Null }
enum RenderMode { RenderMode2D, RenderMode2DNoDepthBuffer, RenderMode3D }
enum Resource { DeviceResource, CommandQueueResource, CommandListResource, PainterResource, RhiResource, …, GraphicsQueueIndexResource }
enum ShaderCompilationType { RuntimeCompilation, OfflineCompilation }
flags ShaderCompilationTypes
enum ShaderSourceType { ShaderSourceString, ShaderSourceFile, ShaderByteCode }
flags ShaderSourceTypes
enum 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)

詳細説明

Renderer インターフェースは、シーングラフ内のグラフィックス API 固有の機能にアクセスできるようにします。このような内部機能は通常公開されません。しかし、例えば、QSGRenderNode を介してカスタムレンダリングを統合する場合、特定の値、例えば、シーングラフで使用されるグラフィックデバイス(例えば、Direct3D や Vulkan デバイス)をクエリする必要があるかもしれません。

QSGRendererInterfaceの関数には、さまざまな利用可能性があります。graphicsApi shaderTypeつまり、QQuickWindow またはQQuickView を構築すれば十分で、QQuickWindow::rendererInterface() を介して、その直後に使用中のグラフィックス API またはシェーディング言語をクエリできます。これにより、GraphicsInfo QML型のようなユーティリティは、shaderType()などに依存する条件付きプロパティ値が予期せぬ値に評価されることなく、できるだけ早い段階で正しい値を報告できることが保証されます。

しかし、getResource()のようなエンジン固有のアクセ サは、シーングラフが初期化された後にしか利用できません。さらに、このような関数が呼び出されるタイミングには、バックエンド固有の制限があるかもしれません。確実に成功する唯一の方法は、ノードのレンダリング(つまり、次のフレームのコマンドリストの準備)がアクティブなときに呼び出すことです。実際には、これは通常QSGRenderNode::render() を意味する。

メンバ型ドキュメント

enum QSGRendererInterface::GraphicsApi

定数説明
QSGRendererInterface::Unknown0未知のグラフィックス API が使用されている
QSGRendererInterface::Software1Qt Quick 2D Renderer が使用されています。
QSGRendererInterface::OpenVG2EGL経由のOpenVG
QSGRendererInterface::OpenGL (since Qt 5.14)3グラフィックス抽象化レイヤーを介した OpenGL ES 2.0 またはそれ以上。
QSGRendererInterface::Direct3D11 (since Qt 5.14)4グラフィックス抽象化レイヤ経由の Direct3D 11。
QSGRendererInterface::Direct3D12 (since Qt 6.6)8グラフィックス抽象化レイヤーを介したDirect3D 12。
QSGRendererInterface::Vulkan (since Qt 5.14)5グラフィックス抽象化レイヤーを介したVulkan 1.0。
QSGRendererInterface::Metal (since Qt 5.14)6グラフィックス抽象化レイヤーを介したMetal。
QSGRendererInterface::Null (since Qt 5.14)7グラフィックス抽象化レイヤーを介したNull(出力なし)。

enum QSGRendererInterface::RenderMode

定数説明
QSGRendererInterface::RenderMode2D0通常の2Dレンダリング
QSGRendererInterface::RenderMode2DNoDepthBuffer1深度バッファを無効にした通常の2Dレンダリング
QSGRendererInterface::RenderMode3D2シーンは3Dグラフの一部としてレンダリングされる

enum QSGRendererInterface::Resource

一定説明
QSGRendererInterface::DeviceResource0リソースは、該当する場合、グラフィックスデバイスへのポインタです。たとえば、VkDevice *MTLDevice * またはID3D11Device * 。 Vulkan の場合、返される値はハンドルそのものではなく、VkDevice へのポインタであることに注意してください。これは、Vulkanのハンドルがポインタではない可能性があり、アーキテクチャのポインタサイズとは異なるサイズを使用する可能性があるためで、単にvoid * への/からのキャストは間違っています。
QSGRendererInterface::CommandQueueResource1リソースは、該当する場合、scenegraphによって使用されるグラフィックコマンドキューへのポインタです。例えば、VkQueue * またはMTLCommandQueue * 。 Vulkanでは、返される値はハンドルそのものではなく、VkQueueへのポインタであることに注意してください。
QSGRendererInterface::CommandListResource2リソースは、該当する場合、シーングラフによって使用されるコマンドリストまたはバッファへのポインタです。例えば、VkCommandBuffer *MTLCommandBuffer * などです。このオブジェクトの有効期限は限られており、シーングラフが次のフレームを準備している間のみ有効です。Vulkanでは、返される値はハンドルそのものではなく、VkCommandBufferへのポインタであることに注意してください。
QSGRendererInterface::PainterResource3リソースは、ソフトウェアバックエンドで実行されている場合、シーングラフによって使用されるアクティブなQPainter へのポインタです。
QSGRendererInterface::RhiResource (since Qt 5.14)4リソースは、QRhi インスタンスへのポインタです。
QSGRendererInterface::RhiSwapchainResource (since Qt 6.0)5リソースは、ウィンドウに関連付けられたQRhiSwapchainインスタンスへのポインタである。ウィンドウがQQuickRenderControl と組み合わせて使用される場合、この値はNULLである。
QSGRendererInterface::RhiRedirectCommandBuffer (since Qt 6.0)6リソースは、ウィンドウとそのQQuickRenderControl に関連付けられたQRhiCommandBuffer インスタンスへのポインタである。ウィンドウがQQuickRenderControl と関連付けられていない場合、値はnullである。
QSGRendererInterface::RhiRedirectRenderTarget (since Qt 6.0)7リソースは、ウィンドウとそのQQuickRenderControl に関連付けられたQRhiTextureRenderTarget インスタンスへのポインタである。ウィンドウがQQuickRenderControl に関連付けられていない場合、値は NULL です。この値は常にメイン テクスチャ レンダー ターゲットを反映し、Qt Quick シーンに依存しない、つまり、ShaderEffect またはQQuickItem レイヤーによって生成される追加のテクスチャ ターゲット レンダー パスは考慮されないことに注意してください。
QSGRendererInterface::PhysicalDeviceResource (since Qt 5.14)8リソースは、該当する場合、シーングラフによって使用される物理デバイスオブジェクトへのポインタです。例えば、VkPhysicalDevice * 。 Vulkanでは、返される値は、ハンドル自体ではなく、VkPhysicalDeviceへのポインタであることに注意してください。
QSGRendererInterface::OpenGLContextResource (since Qt 5.14)9リソースは、該当する場合、シーングラフ(レンダースレッド上)で使用されるQOpenGLContext へのポインタです。
QSGRendererInterface::DeviceContextResource (since Qt 5.14)10リソースは、該当する場合、シーングラフによって使用されるデバイスコンテキストへのポインタである。例えば、ID3D11DeviceContext *
QSGRendererInterface::CommandEncoderResource (since Qt 5.14)11リソースは、該当する場合、シーングラフによって使用される現在アクティブなレンダーコマンドエンコーダオブジェクトへのポインタである。例えば、MTLRenderCommandEncoder * 。 このオブジェクトは、有効期限があり、シーングラフが次のフレームのレンダーパスを記録している間だけ有効である。
QSGRendererInterface::VulkanInstanceResource (since Qt 5.14)12リソースは、該当する場合、シーングラフによって使用されるQVulkanInstance へのポインタである。
QSGRendererInterface::RenderPassResource (since Qt 5.14)13リソースは、シーングラフによって使用されるメインレンダーパスへのポインタであり、カラーと深度/ステシルアタッチメントとそれらがどのように使用されるかを記述する。例えば、VkRenderPass * 。この値は、常にメインのレンダーターゲット(画面上のウィンドウか、QQuickRenderControl リダイレクト先のテクスチャ)を反映し、Qt Quick シーンに依存しないことに注意してください。つまり、ShaderEffectQQuickItem レイヤーによって生成された追加のテクスチャターゲットレンダーパスは考慮されません。
QSGRendererInterface::RedirectPaintDevice (since Qt 6.4)14リソースは、ウィンドウとそのQQuickRenderControl に関連付けられているQPaintDevice インスタンスへのポインタです。ウィンドウがQQuickRenderControl に関連付けられていない場合、値はNULLである。
QSGRendererInterface::GraphicsQueueFamilyIndexResource (since Qt 6.6)15リソースは、該当する場合、シーングラフによって使用されるグラフィックキューファミリーインデックスへのポインタです。Vulkanでは、これはuint32_t インデックス値へのポインタです。
QSGRendererInterface::GraphicsQueueIndexResource (since Qt 6.6)16リソースは、該当する場合、シーングラフによって使用されるグラフィックキューインデックス(uint32_t)へのポインタです。Vulkanでは、これはuint32_t インデックス値へのポインタであり、実際には、CommandQueueResource のために報告されたVkQueueのインデックスです。

enum QSGRendererInterface::ShaderCompilationType
flags QSGRendererInterface::ShaderCompilationTypes

定数説明
QSGRendererInterface::RuntimeCompilation0x01シェーダソースコードのランタイムコンパイルがサポートされている
QSGRendererInterface::OfflineCompilation0x02プリコンパイルされたバイトコードがサポートされる

ShaderCompilationTypes 型はQFlags<ShaderCompilationType> の typedef です。これは、ShaderCompilationType 値の OR の組み合わせを格納します。

enum QSGRendererInterface::ShaderSourceType
flags QSGRendererInterface::ShaderSourceTypes

定数説明
QSGRendererInterface::ShaderSourceString0x01シェーダソースは、以下のプロパティで文字列として指定します。ShaderEffect
QSGRendererInterface::ShaderSourceFile0x02シェーダソースコードを含むローカルファイルまたはリソースファイルがサポートされます。
QSGRendererInterface::ShaderByteCode0x04シェーダーのバイトコードを含むローカルファイルまたはリソースファイルがサポートされています。

ShaderSourceTypes型はQFlags<ShaderSourceType>のtypedefです。ShaderSourceTypeの値のORの組み合わせを格納します。

enum QSGRendererInterface::ShaderType

定数説明
QSGRendererInterface::UnknownShadingLanguage0ウィンドウとシーングラフが関連付けられていないため、未確認。
QSGRendererInterface::GLSL1GLSLまたはGLSL ES
QSGRendererInterface::HLSL2HLSL
QSGRendererInterface::RhiShader (since Qt 5.14)3複数のターゲット言語と中間フォーマット用のシェーダーバリアントを含むQShader インスタンスを消費します。

メンバー関数 ドキュメント

[virtual] void *QSGRendererInterface::getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const

window のグラフィックスresource を問い合わせる。問題のリソースがサポートされていないか、利用できない場合は null を返す。

成功した場合、返されるポインタはインタフェースへの直接のポインタか、最初に参照解除される必要がある不透明なハンドルへのポインタ(例えば、VkDevice dev = *static_cast<VkDevice *>(result) )のいずれかである。後者は、そのようなハンドルのサイズがポインタと異なる場合があるため、必要である。

注意: 返されたポインタの所有権は、呼び出し元には決して移らない。

注意: この関数は、レンダリングスレッド上でのみ呼び出されなければならない。

[virtual] void *QSGRendererInterface::getResource(QQuickWindow *window, const char *resource) const

resource はバックエンド固有のキーです。これにより、Resource enumにリストされていない将来のリソースをサポートすることができます。

注意: 返されたポインタの所有権は、呼び出し元には決して移りません。

注意 : この関数は、レンダースレッド上でのみ呼び出す必要があります。

[pure virtual] QSGRendererInterface::GraphicsApi QSGRendererInterface::graphicsApi() const

Qt Quick scenegraph が使用しているグラフィックス API を返します。

注意: この関数はどのスレッドでも呼び出すことができます。

[static] bool QSGRendererInterface::isApiRhiBased(QSGRendererInterface::GraphicsApi api)

api が、ネイティブのグラフィック API を直接呼び出すのではなく、グラフィック抽象化レイヤ (QRhi) をベースにしている場合、true を返します。

注意: この関数はどのスレッドでも呼び出すことができます。

[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参照して ください。

ここに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。