QVulkanWindowRenderer Class

QVulkanWindowRendererクラスは、アプリケーション固有のレンダリングロジックを実装するために使用されます。QVulkanWindow... 続きを読む

ヘッダー #include <QVulkanWindowRenderer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

パブリック関数

virtual ~QVulkanWindowRenderer()
virtual void initResources()
virtual void initSwapChainResources()
virtual void logicalDeviceLost()
virtual void physicalDeviceLost()
virtual void preInitResources()
virtual void releaseResources()
virtual void releaseSwapChainResources()
virtual void startNextFrame() = 0

詳細説明

アプリケーションは通常、QVulkanWindow と QVulkanWindowRenderer の両方をサブクラス化します。前者は入力などのイベントを処理し、後者はアプリケーションのレンダリングを構成するVulkanリソース管理とコマンドバッファの構築を実装します。

イベント処理に加えて、QVulkanWindow サブクラスは、QVulkanWindow::createRenderer() の実装も提供する責任があります。ここでウィンドウとレンダラーが接続される。一般的な実装では、QVulkanWindowRendererのサブクラスの新しいインスタンスを作成します。

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

[virtual noexcept] QVulkanWindowRenderer::~QVulkanWindowRenderer()

仮想デストラクタ。

[virtual] void QVulkanWindowRenderer::initResources()

この仮想関数は、レンダラーのグラフィックスリソースを作成するときに呼び出される。

この関数は、QVulkanWindow::PersistentResources フラグやデバイスが失われた状況などに応じて、QVulkanWindow の有効期間中に複数回呼び出されることがあります。ただし、それ以降の呼び出しの前には、必ずreleaseResources() が呼び出されます。

device()、graphicsQueue()、graphicsCommandPool()などのアクセサは、この関数の内部で有効な値を返すことだけが保証され、その後はreleaseResources()が呼び出されるまで有効です。

デフォルトの実装は空です。

[virtual] void QVulkanWindowRenderer::initSwapChainResources()

この仮想関数は、スワップチェーン、フレームバッファ、またはレンダーパスに関連する初期化を実行できるときに呼び出される。スワップチェーンと関連リソースは、ウィンドウのサイズ変更イベントに応答してリセットされ、その後再作成されます。したがって、initResources ()とreleaseResources ()の呼び出しのペアは、その間にinitSwapChainResources()とreleaseSwapChainResources ()の呼び出しの複数の呼び出しを持つことができます。

QVulkanWindow::swapChainImageSize() のようなアクセサは、この関数の内部と、その後releaseSwapChainResources() が呼び出されるまでの間のみ、有効な値を返すことが保証されます。

また、この関数は実質的にリサイズのたびに呼び出されるため、サイズに依存する計算(たとえば投影行列)を行うべき場所でもあります。

デフォルトの実装は空です。

[virtual] void QVulkanWindowRenderer::logicalDeviceLost()

この仮想関数は、論理デバイス(VkDevice)が失われたとき、つまりVK_ERROR_DEVICE_LOST で何らかの操作が失敗したときに呼び出される。

デフォルトの実装は空です。

通常、この関数で特別な処理を行う必要はない。QVulkanWindow は自動的にすべてのリソースを解放し(必要に応じてreleaseSwapChainResources() とreleaseResources() を呼び出す)、新しいデバイスを取得して再初期化を試みる。物理デバイスも失われた場合、この再初期化の試みは、physicalDeviceLost()となる。

physicalDeviceLost()も参照のこと

[virtual] void QVulkanWindowRenderer::physicalDeviceLost()

この仮想関数は、物理デバイスが失われたとき、つまり論理デバイスの作成がVK_ERROR_DEVICE_LOST で失敗したときに呼び出される。

デフォルトの実装は空です。

QVulkanWindow は一定時間後に自動的に初期化を再試行するので、通常、この関数で特別な処理を行う必要はない。

logicalDeviceLost()も参照のこと

[virtual] void QVulkanWindowRenderer::preInitResources()

この仮想関数は、initResources ()を呼び出すことになるグラフィックスの初期化が始まる直前に呼び出される。

通常、この関数を再実装する必要はない。しかし、物理的なデバイスとサーフェスの両方に基づく決定を伴う場合がある。Vulkanサーフェスはその段階では取得できないため、これらは通常、QVulkanWindow を可視化する前に実行することはできません。

代わりに、アプリケーションはこの関数を再実装できます。ここでは、QVulkanWindow::physicalDevice ()とQVulkanInstance::surfaceForWindow ()の両方が機能していますが、それ以上の論理デバイスの初期化はまだ行われていません。

デフォルトの実装は空です。

[virtual] void QVulkanWindowRenderer::releaseResources()

この仮想関数は、レンダラーのグラフィックスリソースを解放しなければならないときに呼び出される。

実装では、この関数の呼び出しの後に、initResources ()が続く可能性があることを覚悟する必要があります。

QVulkanWindow は、この関数を呼び出す前後でデバイスがアイドルになるのを待つ処理を行います。

デフォルトの実装は空です。

[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()

この仮想関数は、スワップチェーン、フレームバッファ、またはレンダーパスに関連するリソースを解放する必要があるときに呼び出される。

実装は、この関数の呼び出しの後に、initSwapChainResources ()を新たに呼び出す可能性があることを覚悟しなければならない。

QVulkanWindow は、この関数を呼び出す前と後にデバイスがアイドルになるのを待つ処理を行います。

デフォルトの実装は空である。

注意: この関数は、QVulkanWindow がリソースの解放を開始する前に、すべてのグラフィッ クス・リソースがそのままの状態で動作する最後の場所です。したがって、非同期でマルチスレッドの可能性があるstartNextFrame() を持つ実装では、保留中のフレーム送信がある場合に備えて、この関数から戻る前にブロッキング待機を実行し、QVulkanWindow::frameReady() を呼び出すことが不可欠です。

[pure virtual] void QVulkanWindowRenderer::startNextFrame()

この仮想関数は、次のフレームの描画コールがコマンドバッファに追加されるときに呼び出される。

この関数を呼び出すたびに、QVulkanWindow::frameReady ()を呼び出す必要があります。これを行わないと、描画ループが停止します。この呼び出しは、この関数から戻った後で行うこともできます。つまり、非同期作業を開始し、その作業が終了したときにのみコマンドバッファを更新してQVulkanWindow に通知することが可能です。

すべてのVulkanリソースは、この関数が呼び出されたときに初期化され、準備ができています。現在のフレームバッファとメインコマンドバッファは、QVulkanWindow::currentFramebuffer ()とQVulkanWindow::currentCommandBuffer ()を介して取得できます。論理デバイスとアクティブなグラフィックキューは、QVulkanWindow::device() とQVulkanWindow::graphicsQueue() を介して利用できます。実装は、QVulkanWindow::graphicsCommandPool() によって返されたプールから、追加のコマンド・バッファを作成することができる。便宜上、ホストの可視インデックスとデバイスのローカル・メモリ・タイプ・インデックスが、QVulkanWindow::hostVisibleMemoryIndex() とQVulkanWindow::deviceLocalMemoryIndex() を介して公開されている。これらのアクセサはすべて、どのスレッドからも安全に呼び出すことができる。

QVulkanWindow::frameReady() およびQVulkanWindowも参照のこと

© 2025 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.