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::Unknown | 0 | 未知のグラフィックス API が使用されている |
QSGRendererInterface::Software | 1 | Qt Quick 2D Renderer が使用されています。 |
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 | リソースは、該当する場合、scenegraphによって使用されるグラフィックコマンドキューへのポインタです。例えば、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 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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。