QSGRendererInterface Class
シーングラフのグラフィックスAPI固有の内部構造の一部へのアクセスを提供するインターフェースです。詳細...
| ヘッダー: | #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) |
詳細な説明
レンダラーインターフェースを使用すると、シーングラフ内でグラフィックスAPI固有の機能にアクセスできます。通常、このような内部機能は公開されません。しかし、例えばQSGRenderNode を介してカスタムレンダリングを統合する場合、シーングラフで使用されているグラフィックスデバイス(Direct3DやVulkanデバイスなど)といった特定の値を照会する必要が生じる場合があります。
QSGRendererInterfaceの関数の利用可能性は様々です。graphicsApi()やshaderType()といったAPIおよび言語に関するクエリは常に利用可能です。つまり、QQuickWindow またはQQuickView を構築するだけで十分であり、直後にQQuickWindow::rendererInterface()を介して、使用中のグラフィックスAPIやシェーディング言語を照会できます。 これにより、GraphicsInfo といったQML型などのユーティリティは、例えばshaderType()に依存する条件付きプロパティ値が予期しない値として評価されることなく、可能な限り早い段階で正しい値を報告できるようになります。
ただし、getResource() のようなエンジン固有のアクセサは、シーングラフが初期化されてからでないと利用できません。さらに、そのような関数を呼び出せるタイミングについては、バックエンド固有の制限がある場合があります。 確実に成功する唯一の方法は、ノードのレンダリング(つまり、次のフレームのためのコマンドリストの準備)がアクティブなときにそれらを呼び出すことです。実際には、これは通常、QSGRenderNode::render() を意味します。
メンバ型のドキュメント
enum QSGRendererInterface::GraphicsApi
| 定数 | 値 | 説明 |
|---|---|---|
QSGRendererInterface::Unknown | 0 | 不明なグラフィックスAPIが使用されています |
QSGRendererInterface::Software | 1 | Qt Quick の2Dレンダラーが使用されています |
QSGRendererInterface::OpenVG | 2 | EGL経由の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::RenderMode2D | 0 | 通常の2Dレンダリング |
QSGRendererInterface::RenderMode2DNoDepthBuffer | 1 | 深度バッファを無効にした通常の2Dレンダリング |
QSGRendererInterface::RenderMode3D | 2 | シーンは3Dグラフの一部としてレンダリングされる |
enum 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 (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 シーンには依存しないことに注意してください。つまり、ShaderEffect やQQuickItem レイヤーによって生成された追加のテクスチャターゲットレンダリングパスは考慮されません。 |
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::RuntimeCompilation | 0x01 | シェーダーソースコードの実行時コンパイルがサポートされています |
QSGRendererInterface::OfflineCompilation | 0x02 | プリコンパイル済みバイトコードがサポートされています |
ShaderCompilationTypes 型は、QFlags<ShaderCompilationType> の typedef です。これは、ShaderCompilationType 値の論理和(OR)を格納します。
enum QSGRendererInterface::ShaderSourceType
flags QSGRendererInterface::ShaderSourceTypes
| 定数 | 値 | 説明 |
|---|---|---|
QSGRendererInterface::ShaderSourceString | 0x01 | シェーダーソースは、以下の対応するプロパティで文字列として指定できます。ShaderEffect |
QSGRendererInterface::ShaderSourceFile | 0x02 | シェーダーのソースコードを含むローカルファイルまたはリソースファイルがサポートされています |
QSGRendererInterface::ShaderByteCode | 0x04 | シェーダーバイトコードを含むローカルファイルまたはリソースファイルがサポートされています |
ShaderSourceTypes 型は、QFlags<ShaderSourceType> の typedef です。これは、ShaderSourceType 値の OR 組み合わせを格納します。
enum QSGRendererInterface::ShaderType
| 定数 | 値 | 説明 |
|---|---|---|
QSGRendererInterface::UnknownShadingLanguage | 0 | 関連するウィンドウおよびシーングラフが存在しないため、現時点では不明 |
QSGRendererInterface::GLSL | 1 | GLSL または GLSL ES |
QSGRendererInterface::HLSL | 2 | HLSL |
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列挙型にリストされていない将来のリソースにも対応できるようになります。
注: 返されるポインタの所有権は 、呼び出し元に譲渡されることはありません。
注:この関数は 、レンダリングスレッド上でのみ呼び出す必要があります。
[pure virtual] QSGRendererInterface::GraphicsApi QSGRendererInterface::graphicsApi() const
Qt Quick のシーングラフで使用されているグラフィックス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」も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.