ハローVulkanトライアングルの例

QVulkanWindow と Vulkan API を使ったレンダリングの基本を示します。

Hello Vulkan Triangle Exampleは、三角形をレンダリングするために、頂点シェーダとフラグメントシェーダを含むフルグラフィックスパイプラインを作成します。

スタートアップ

Vulkanを使用する各Qtアプリケーションは、アプリケーションレベルの状態をカプセル化し、Vulkanライブラリを初期化するVulkan instance

QVulkanWindow は常にQVulkanInstance に関連付けられている必要があり、そのためこの例ではウィンドウの前にインスタンス生成を行います。また、QVulkanInstance オブジェクトはウィンドウよりも長生きしなければなりません。

    QVulkanInstanceinst; inst.setLayers({"VK_LAYER_KHRONOS_validation"});if(!inst.create())        qFatal("Failed to create Vulkan instance: %d", inst.errorCode());

この例では、サポートされている場合、検証レイヤーを有効にします。要求されたレイヤーが存在しない場合、リクエストは無視される。追加のレイヤーや拡張機能も同様に有効にできます。

    VulkanWindow w;
    w.setVulkanInstance(&inst);

    w.resize(1024, 768);
    w.show();

インスタンスの準備ができたら、いよいよウィンドウを作成する。w はスタック上に存在し、inst の後に宣言されることに注意してください。

QVulkanWindowサブクラス

QVulkanWindow にカスタム機能を追加するには、サブクラスを使用します。これはQOpenGLWindowQOpenGLWidget の既存のパターンを踏襲しています。ただし、QVulkanWindow は別のQVulkanWindowRenderer オブジェクトを使用しています。

QVulkanWindow サブクラスはファクトリー関数QVulkanWindow::createRenderer() を再実装します。これは単にQVulkanWindowRenderer サブクラスの新しいインスタンスを返すだけです。ウィンドウオブジェクトを介してさまざまなVulkanリソースにアクセスできるようにするため、コンストラクタを介してウィンドウへのポインタが渡され、格納されます。

class VulkanWindow : public QVulkanWindow
{
public:
    QVulkanWindowRenderer *createRenderer() override;
};

実際のレンダリング

QVulkanWindow サブクラスは、 ()の再実装で描画呼び出しをキューに入れます。完了したら、 ()をコールバックする必要がある。この例では、非同期コマンド生成がないため、frameReady() 呼び出しは startNextFrame() から直接行われます。継続的な更新を得るために、この例では、再描画をスケジュールするために、 ()を呼び出すだけです。QVulkanWindowRenderer::startNextFrame QVulkanWindow::frameReady QWindow::requestUpdate

また、この例では、マルチサンプル・アンチエイリアシングも示しています。この例では、QVulkanWindow::supportedSampleCounts ()によって報告されたサポートされているサンプル数に基づいて、8倍、4倍、またはマルチサンプリングなしのいずれかを選択します。一旦QVulkanWindow::setSamples()によって設定されると、QVulkanWindow 、残りの処理を行います。追加のマルチサンプルカラーバッファは自動的に作成され、スワップチェーンバッファへのリゾルビングは、各フレームのデフォルトのレンダーパスの終了時に実行されます。

例の実行

からサンプルを実行するには Qt Creatorからサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Building and Running an Exampleを参照してください。

サンプルプロジェクト @ code.qt.io

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