QVulkanInstance Class
QVulkanInstanceクラスは、ネイティブVulkanインスタンスを表し、QSurface へのVulkanレンダリングを可能にします。
ヘッダー | #include <QVulkanInstance> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 継承メンバを含む全メンバ一覧
- QVulkanInstanceは、Rendering in 3D に含まれています。
パブリックタイプ
DebugFilter | |
(since 6.5) enum | DebugMessageSeverityFlag { VerboseSeverity, InfoSeverity, WarningSeverity, ErrorSeverity } |
flags | DebugMessageSeverityFlags |
(since 6.5) enum | DebugMessageTypeFlag { GeneralMessage, ValidationMessage, PerformanceMessage } |
flags | DebugMessageTypeFlags |
(since 6.5) | DebugUtilsFilter |
enum | Flag { NoDebugOutputRedirect, NoPortabilityDrivers } |
flags | Flags |
パブリック関数
QVulkanInstance() | |
~QVulkanInstance() | |
QVersionNumber | apiVersion() const |
(since 6.5) void | clearDebugOutputFilters() |
bool | create() |
void | destroy() |
QVulkanDeviceFunctions * | deviceFunctions(VkDevice device) |
VkResult | errorCode() const |
QByteArrayList | extensions() const |
QVulkanInstance::Flags | flags() const |
QVulkanFunctions * | functions() const |
PFN_vkVoidFunction | getInstanceProcAddr(const char *name) |
(since 6.5) void | installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter) |
void | installDebugOutputFilter(QVulkanInstance::DebugFilter filter) |
bool | isValid() const |
QByteArrayList | layers() const |
void | presentAboutToBeQueued(QWindow *window) |
void | presentQueued(QWindow *window) |
void | removeDebugOutputFilter(QVulkanInstance::DebugFilter filter) |
void | resetDeviceFunctions(VkDevice device) |
void | setApiVersion(const QVersionNumber &vulkanVersion) |
void | setExtensions(const QByteArrayList &extensions) |
void | setFlags(QVulkanInstance::Flags flags) |
void | setLayers(const QByteArrayList &layers) |
void | setVkInstance(VkInstance existingVkInstance) |
QVersionNumber | supportedApiVersion() const |
QVulkanInfoVector<QVulkanExtension> | supportedExtensions() const |
QVulkanInfoVector<QVulkanLayer> | supportedLayers() const |
bool | supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window) |
VkInstance | vkInstance() const |
静的パブリックメンバ
VkSurfaceKHR | surfaceForWindow(QWindow *window) |
詳細説明
Vulkanは、クロスプラットフォームの明示的なグラフィックスおよびコンピュートAPIです。このクラスは、クロスプラットフォームでVulkanライブラリをロードし、instance
。Vulkanインスタンスについては、仕様の3.2節を参照してください。
注: VulkanインスタンスとVulkan対応サーフェスを持つウィンドウのためのプラットフォーム固有のサポートは、様々なプラットフォームプラグインによって提供されます。ただし、それらのすべてがVulkanをサポートするわけではありません。そのようなプラットフォームで実行する場合、create() は失敗し、常にfalse
を返します。
注意: ビルド時に必要なVulkanヘッダがないため、Vulkanサポートが自動的に無効になることがあります。このような場合、configure
の出力がVulkanサポートが無効であることを示すと、QVulkan*クラスは使用できなくなります。
注意: いくつかの関数は、様々なVulkanヘッダーのリビジョン間でシグネチャが変更されました。Qt をビルドする際、古いシグネチャと競合するヘッダのみがシステムに存在すると、Vulkan サポートは無効になります。Vulkan 1.0.39 以降のヘッダを使用することを推奨します。
初期化
QOpenGLContext と同様に、実際の Vulkan インスタンスの作成は、create() を呼び出すときにのみ発生します。これにより、QVulkanInstanceをプレーンなメンバ変数として使用しながら、いつ初期化を実行するかを制御することができます。
サポートされているインスタンスレベルのレイヤーと拡張機能のクエリは、supportedLayers() とsupportedExtensions() を呼び出すことで可能です。これらは、Vulkanライブラリがロードされていることを保証するため、create ()の前にも安全に呼び出すことができます。
インスタンスはアプリケーションごとのVulkanステートを保存し、VkInstance
オブジェクトを作成するとVulkanライブラリが初期化されます。実際には、通常main()の早い段階で単一のインスタンスが構築されます。その後、アプリケーションを終了するまでオブジェクトは生き続けます。
すべてのVulkanベースのQWindow 、QWindow::setVulkanInstance ()を呼び出すことで、QVulkanInstanceに関連付ける必要があります。したがって、典型的なアプリケーションパターンは次のようになります:
int main(int argc, char **argv) { QGuiApplication app(argc, argv); QVulkanInstance inst; if (!inst.create()) return 1; // ... window->setVulkanInstance(&inst); window->show(); return app.exec(); }
構成
QVulkanInstanceは、新しく作成されたインスタンスに対して、必要最小限の拡張機能を自動的に有効にします。実際には、これはVK_KHR_*_surface
の拡張機能ファミリーを意味します。
デフォルトでは、Vulkanデバッグ出力(検証レイヤからのメッセージなど)は、qDebug ()にルーティングされます。これを無効にするには、create() を呼び出す前に、 setFlags() にフラグNoDebugOutputRedirect
を渡します。
追加のレイヤーや拡張機能を有効にするには、create() を呼び出す前に、 setLayers() とsetExtensions() でリストを指定する。指定されたレイヤーまたは拡張がインスタンスから利用可能であると報告されな い場合、リクエストは無視される。create()の呼び出しに成功すると、layers()やextensions()などの関数から返される値は、実際に有効になっているレイヤーと拡張を反映したものになる。必要な場合、たとえば、競合する拡張機能のリクエストを回避するために、Vulkanインスタンスの作成に失敗する場合、create ()を呼び出す前に、supportedLayers ()とsupportedExtensions ()を介して、実際にサポートされているレイヤーと拡張機能のリストを調べることができます。
たとえば、標準の検証レイヤーを有効にするには、次のようにします:
QVulkanInstance inst; // Enable validation layer, if supported. Messages go to qDebug by default. inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); bool ok = inst.create(); if (!ok) { // ... Vulkan not available } if (!inst.layers().contains("VK_LAYER_KHRONOS_validation")) { // ... validation layer not available }
あるいは、Vulkanインスタンスの作成を試みる前に決定することもできます:
QVulkanInstance inst; if (inst.supportedLayers().contains("VK_LAYER_KHRONOS_validation")) { // ... } bool ok = inst.create(); // ...
既存のインスタンスの採用
デフォルトでは、QVulkanInstanceは新しいVulkanインスタンスを作成します。外部エンジンやレンダラーで作業する場合、これは望ましくない場合があります。既にVkInstance
ハンドルが利用可能な場合は、create() を呼び出す前にsetVkInstance() を呼び出してください。こうすることで、追加のインスタンスは作成されず、QVulkanInstanceはハンドルを所有しません。
注意: 必要な拡張機能が有効になっているかどうかは、外部インスタンスを作成するコンポーネント次第です。これらは以下の通りです:VK_KHR_surface
VK_KHR_*_surface
QVulkanInstanceのデバッグ出力リダイレクトが必要な場合は、VK_EXT_debug_utils
。
コアVulkanコマンドへのアクセス
QVulkanInstanceがラップしているVkInstance
ハンドルにアクセスするには、vkInstance ()を呼び出します。Vulkan関数を解決するには、getInstanceProcAddr ()を呼び出します。コアVulkanコマンドについては、functions ()およびdeviceFunctions ()を介してアクセス可能なQVulkanFunctions およびQVulkanDeviceFunctions オブジェクトを介して提供されるため、手動で解決する必要はありません。
注意: QVulkanFunctions とQVulkanDeviceFunctions は、Qt ライブラリをビルドする際に Vulkan API XML 仕様から生成されます。そのため、ドキュメントが提供されていません。これらには、Vulkan API ドキュメントに記載されているのと同じシグネチャを持つ Vulkan 1.2 関数が含まれています。
ウィンドウのネイティブ Vulkan サーフェスを取得する
2つの一般的なウィンドウシステム固有の操作は、ウィンドウのサーフェス(VkSurfaceKHR
ハンドル)を取得することと、指定されたキューファミリが指定されたサーフェスへの表示をサポートしているかどうかを問い合わせることです。アプリケーションの WSI 固有のビットを回避するため、これらは QVulkanInstance と基礎となる QPA レイヤーによって抽象化されます。
ウィンドウ用のVulkanサーフェスを作成するか、既存のサーフェスを取得するには、surfaceForWindow ()を呼び出します。ほとんどのプラットフォームでは、最初にsurfaceForWindow() を呼び出したときにVK_KHR_*_surface
を介してのみサーフェスが作成されますが、内部的な動作にはプラットフォーム固有のバリエーションがあるかもしれません。一度作成されると、その後のsurfaceForWindow() への呼び出しは同じハンドルを返すだけです。これは、典型的なVulkan対応のQWindow サブクラスの構造によく合っています。
物理デバイス内の指定されたキューファミリーが、指定されたサーフェスへのプレゼンテーションを実行するために使用できるかどうかを問い合わせるには、supportsPresent ()を呼び出します。これは、一般的なvkGetPhysicalDeviceSurfaceSupportKHR
と WSI 固有のvkGetPhysicalDevice*PresentationSupportKHR
の両方のチェックをカプセル化します。
トラブルシューティング
create()からfalse
、またはsurfaceForWindow()から0
を返す他に、クリティカル・エラーはqWarning()を通じてデバッグ出力に出力される。追加のロギングは、ロギングカテゴリqt.vulkan
のデバッグ出力を有効にすることで要求できます。インスタンス生成時の実際のVulkanエラーコードは、失敗したcreate()の後にerrorCode()を呼び出すことで取得できます。
特殊なケースでは、Vulkan ライブラリ名をオーバーライドする必要があります。これは、QT_VULKAN_LIB
環境変数を設定することで実現できます。
例
以下は、Vulkan対応のQWindow を作成する基本的な概要です:
classVulkanWindow :publicQWindow {public: VulkanWindow() { setSurfaceType(VulkanSurface); }voidexposeEvent()QExposeEvent*){if(isExposed()) {if(!m_initialized) { m_initialized= true;// デバイス、スワップチェーンなどを初期化する。 QVulkanInstance*inst =vulkanInstance(); QVulkanFunctions*f = inst->functions(); uint32_t devCount= 0; f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount,nullptr);// ... // 最初のフレームをビルドrender(); } } }boolevent(QEvent*e) {if(e->type()== ::UpdateRequest) QEvent::UpdateRequest) render();returnQWindow::event(e); }voidrender() {// ...requestUpdate();// 継続的にレンダリングする}private:boolm_initialized= false; };intmain(intargc, char **argv) { app(argc, argv) {...requestUpdate();// 継続的にレンダリングする。 QGuiApplicationapp(argc,argv); QVulkanInstanceもし(!inst.create())なら{。 qWarning("Vulkan not available"); return 1; } VulkanWindow window; window.showMaximized();returnapp.exec(); }
注意: スワップチェーンの適切な管理を保証するために、お行儀の良いウィンドウ実装は、exposeに加えて、resizeやQPlatformSurfaceEvent などの追加イベントも処理する必要があります。さらに、プラットフォームによっては、exposeされなくなったときにリソースを解放する必要があるかもしれません。
Vulkan用のC++バインディングの使用
QtのVulkanイネーブラをC++のVulkanラッパー、例えばVulkan-Hppと組み合わせることも可能です。ここでの前提条件は、C++ レイヤーが所有権を持たずにネイティブハンドル(VkInstance、VkSurfaceKHR)をそのクラスで採用できることです(所有権は QVulkanInstance とQWindow にあるため)。次のことも考えてみてください:
- ラッパーによっては例外サポートを有効にする必要があります。Qtは例外を使用しません。アプリケーションで例外を有効にするには、
.pro
ファイルにCONFIG += exceptions
を追加します。 - いくつかのラッパーは、
vulkan.h
がプロトタイプを提供し、アプリケーションがすべての必要なシンボルをエクスポートする Vulkan ライブラリにリンクすると仮定して、Vulkan 関数を直接呼び出します。QtはVulkanライブラリに直接リンクしない場合があります。そのため、プラットフォームによっては、アプリケーションの.pro
ファイルにLIBS += -lvulkan
などを追加する必要があります。 - QVulkanクラスのヘッダには、
VK_NO_PROTOTYPES
を有効にしたvulkan.h
が含まれることがあります。これは、プロトタイプに依存するC++ラッパーヘッダーで問題を引き起こす可能性があります。したがって、アプリケーションコードでは、QVulkanヘッダーの前にvulkan.hpp
または同様のものをインクルードする必要があるかもしれません。
QVulkanFunctions とQSurface::SurfaceTypeも参照してください 。
メンバ型ドキュメント
QVulkanInstance::DebugFilter
デバッグ・フィルタリング・コールバック関数の型定義:
bool myDebugFilter(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char *pLayerPrefix, const char *pMessage)
true
を返すと、メッセージの印刷が抑制されます。
注意: Qt 6.5 以降では、非推奨のVK_EXT_debug_report
の代わりにVK_EXT_debug_utils
が使用されます。コールバックのシグネチャはVK_EXT_debug_reportに基づいています。そのため、すべての引数が有効であるとは限りません。pMessage
、messageCode
、object
以外の引数に依存することは避けること。VK_EXT_debug_utilsで指定されているすべてのコールバック・データにアクセス したいアプリケーションは、DebugUtilsFilter 。
installDebugOutputFilter() およびremoveDebugOutputFilter()も参照してください 。
[since 6.5]
enum QVulkanInstance::DebugMessageSeverityFlag
flags QVulkanInstance::DebugMessageSeverityFlags
定数 | 値 |
---|---|
QVulkanInstance::VerboseSeverity | 0x01 |
QVulkanInstance::InfoSeverity | 0x02 |
QVulkanInstance::WarningSeverity | 0x04 |
QVulkanInstance::ErrorSeverity | 0x08 |
この列挙型は Qt 6.5 で導入されました。
DebugMessageSeverityFlags 型はQFlags<DebugMessageSeverityFlag> の typedef です。DebugMessageSeverityFlag 値の OR の組み合わせを格納します。
[since 6.5]
enum QVulkanInstance::DebugMessageTypeFlag
flags QVulkanInstance::DebugMessageTypeFlagsです。
定数 | 値 |
---|---|
QVulkanInstance::GeneralMessage | 0x01 |
QVulkanInstance::ValidationMessage | 0x02 |
QVulkanInstance::PerformanceMessage | 0x04 |
この列挙型はQt 6.5で導入されました。
DebugMessageTypeFlags型は、QFlags<DebugMessageTypeFlag>のtypedefです。DebugMessageTypeFlag の値の OR の組み合わせを格納します。
[alias, since 6.5]
QVulkanInstance::DebugUtilsFilter
次のシグネチャを持つデバッグフィルタリングコールバック関数の型定義です:
std::function<bool(DebugMessageSeverityFlags severity, DebugMessageTypeFlags type, const void *message)>;
message
引数は VkDebugUtilsMessengerCallbackDataEXT 構造体へのポインタです。詳細はVK_EXT_debug_utils
のドキュメントを参照してください。Qtヘッダは、1.0以降のVulkanヘッダへの依存を避けるため、実数型を使用しません。
true
を返すと、メッセージの印刷が抑制されます。
この型定義は Qt 6.5 で導入されました。
installDebugOutputFilter() およびremoveDebugOutputFilter()も参照してください 。
enum QVulkanInstance::Flag
flags QVulkanInstance::Flags
この enum は、setFlags() に渡すことができるフラグを記述します。これらはcreate() の動作を制御します。
定数 | 値 | 説明 |
---|---|---|
QVulkanInstance::NoDebugOutputRedirect | 0x01 | Vulkan デバッグ出力 (VK_EXT_debug_utils ) のqDebug へのリダイレクトを無効にします。 |
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5) | 0x02 | Vulkan Portabilityとしてマークされた物理デバイスの列挙を無効にします。 |
Flags 型はQFlags<Flag> の typedef です。Flag値のORの組み合わせを格納します。
メンバー関数ドキュメント
QVulkanInstance::QVulkanInstance()
新しいインスタンスを構築します。
注意: コンストラクタではVulkanの初期化は行われません。
[noexcept]
QVulkanInstance::~QVulkanInstance()
デストラクタ。
注: インスタンスが破棄されると、vkInstance() はnullptr
を返します。
QVersionNumber QVulkanInstance::apiVersion() const
create() の前にsetApiVersion() が呼び出されていない場合は、NULL バージョン番号を返します。
setApiVersion()も参照してください 。
[since 6.5]
void QVulkanInstance::clearDebugOutputFilters()
installDebugOutputFilter() によって以前にインストールされたすべてのフィルター関数を削除する。
注意: この関数はcreate() の前に呼び出すことができます。
この関数は Qt 6.5 で導入されました。
installDebugOutputFilter()も参照してください 。
bool QVulkanInstance::create()
Vulkanライブラリを初期化し、新しいVulkanインスタンスを作成するか、既存のVulkanインスタンスを採用します。
成功した場合はtrueを返し、エラー時またはVulkanがサポートされていない場合はfalseを返します。
成功した場合、このQVulkanInstance へのポインタはvkInstance() を介して取得可能です。
このQVulkanInstance が存在する限り、またはdestroy() が呼び出されるまで、Vulkan インスタンスとライブラリは利用可能です。
デフォルトでは、VkInstanceはフラグVK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHRが設定された状態で作成されます。これは、Vulkan Portability物理デバイスも列挙されることを意味します。これを望まない場合は、NoPortabilityDrivers フラグを設定します。
void QVulkanInstance::destroy()
基盤となるプラットフォームのインスタンスを破棄し、VkInstance(所有されている場合)を破棄します。create() を再度呼び出すことで、QVulkanInstance オブジェクトはまだ再利用可能です。
QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)
デバイスレベルのコア Vulkan コマンドセットを公開し、クロスプラットフォームで機能することが保証されているQVulkanDeviceFunctions オブジェクトを返します。
注意: 返されたオブジェクトの Vulkan 関数は、device またはdevice の子オブジェクト(VkQueue、VkCommandBuffer)を最初のパラメータとしてのみ呼び出す必要があります。これは、内部ディスパッチの潜在的なオーバーヘッドを回避するために、これらの関数がvkGetDeviceProcAddr を介して解決されるためです。
注意: 返されたオブジェクトはQVulkanInstance によって所有され管理されます。 オブジェクトを破壊したり変更したりしないでください。
注意 :オブジェクトはキャッシュされるため、同じdevice でこの関数を再度呼び出すことは、安価な操作である。ただし、デバイスが破棄された場合、resetDeviceFunctions() を呼び出してQVulkanInstance に通知するかどうかはアプリケーション次第です。
コアVulkan 1.0 APIからの関数は常に利用可能です。1.1や1.2のような、より高いVulkanバージョンになると、QVulkanDeviceFunctions オブジェクトはそれらのコアAPI関数も解決しようとしますが、実行時のVulkan物理デバイスがそれらをサポートしていない場合、そのようなサポートされていない関数を呼び出すと、指定されていない動作になります。1.0より高いVulkanバージョンのサポートを適切に有効にするには、create ()の前にsetApiVersion ()を呼び出して、適切なインスタンスAPIバージョンを設定する必要があるかもしれません。さらに、アプリケーションは VkPhysicalDeviceProperties で物理デバイスのapiVersion を確認する必要があります。
functions() およびresetDeviceFunctions()も参照して ください。
VkResult QVulkanInstance::errorCode() const
失敗したcreate() の後に Vulkan エラーコードを返し、そうでなければVK_SUCCESS
を返します。
この値は通常、vkCreateInstance() からの戻り値(既存のインスタンスを採用する代わりに新しい Vulkan インスタンスを作成する場合)ですが、プラットフォームプラグインが Vulkan をサポートしていない場合はVK_NOT_READY
になることもあります。
QByteArrayList QVulkanInstance::extensions() const
create() をコールして成功した場合に、有効なインスタンス拡張を返す。そうでない場合は、要求された拡張子を返します。
setExtensions()も参照 。
QVulkanInstance::Flags QVulkanInstance::flags() const
要求されたフラグを返す。
setFlags()も参照 。
QVulkanFunctions *QVulkanInstance::functions() const
対応するQVulkanFunctions オブジェクトを返します。このオブジェクトは、デバイスレベル関数を除く、コア Vulkan コマンドセットを公開し、クロスプラットフォームでの動作が保証されています。
注意: 返されたオブジェクトは、QVulkanInstance によって所有および管理されます。これを破壊したり変更したりしないでください。
コアVulkan 1.0 APIからの関数は常に利用可能です。1.1や1.2など、より高いVulkanバージョンになると、QVulkanFunctions オブジェクトは、それらのコアAPI関数も解決しようとしますが、実行時のVulkanインスタンス実装がそれらをサポートしていない場合、そのようなサポートされていない関数を呼び出すと、指定されていない動作になります。さらに、1.0より高いVulkanバージョンのサポートを適切に有効にするには、create ()の前にsetApiVersion ()を呼び出して適切なインスタンスAPIバージョンを設定する必要があるかもしれません。Vulkan実装のインスタンスレベルのバージョンを問い合わせるには、supportedApiVersion ()を呼び出します。
deviceFunctions() およびsupportedApiVersion()も参照してください 。
PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(const char *name)
与えられたname でVulkan関数を解決します。
コアVulkanコマンドについては、代わりにfunctions() とdeviceFunctions() から取得可能な関数ラッパーを使用することをお勧めします。
[since 6.5]
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter)
Vulkanデバッグメッセージごとに呼び出されるfilter 関数をインストールします。コールバックがtrue
を返すと、メッセージは停止され(フィルタリングされ)、デバッグ出力には表示されません。
注: フィルタリングは、NoDebugOutputRedirect がset でない場合にのみ有効です。そうでない場合、フィルターをインストールしても効果はありません。
注意: この関数はcreate() の前に呼び出すことができます。
この関数は Qt 6.5 で導入されました。
clearDebugOutputFilters()も参照してください 。
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugFilter filter)
これはオーバーロードされた関数です。
Vulkanデバッグメッセージごとに呼び出されるfilter 関数をインストールします。コールバックがtrue
を返すと、メッセージは停止され(フィルタリングされ)、デバッグ出力には表示されません。
注記: フィルタリングは、NoDebugOutputRedirect がset でない場合にのみ有効です。そうでない場合、フィルターをインストールしても効果はありません。
注意: この関数はcreate() の前に呼び出すことができる。
removeDebugOutputFilter()も参照 。
bool QVulkanInstance::isValid() const
create() が成功し、インスタンスが有効であれば真を返す。
QByteArrayList QVulkanInstance::layers() const
create() が呼び出 さ れて成功 し た場合は、 有効な イ ン ス タ ン ス レ イ ヤーを返 し ます。そうでない場合は、要求されたレイヤーを返します。
setLayers()も参照してください 。
void QVulkanInstance::presentAboutToBeQueued(QWindow *window)
この関数は、アプリケーションのレンダラーによって、現在の操作をwindow のためにキューに入れる前に呼び出されるべきである。
いくつかのプラットフォームでは、この関数は呼び出されませんが、ウィンドウシステム依存の同期を実行するものもあります。例えば、Waylandでは、最小化されたウィンドウのためにドライバがブロックするのを防ぐために、wl_surface.frameリクエストを送信します。
void QVulkanInstance::presentQueued(QWindow *window)
この関数は、window のために現在の操作をキューに入れた後、アプリケーションのレンダラーによって呼び出されるべきである。
いくつかのプラットフォームでは、この関数は呼び出されませんが、ウィンドウシステム依存の同期を実行するものもあります。例えば、X11では、これは_NET_WM_SYNC_REQUEST_COUNTER
を更新する。
void QVulkanInstance::removeDebugOutputFilter(QVulkanInstance::DebugFilter filter)
これはオーバーロードされた関数である。
installDebugOutputFilter() によって以前にインストールされたfilter 関数を削除する。
注意: この関数は、create() の前に呼び出すことができます。
installDebugOutputFilter()も参照してください 。
void QVulkanInstance::resetDeviceFunctions(VkDevice device)
与えられたdevice のQVulkanDeviceFunctions オブジェクトを無効にして破棄します。
この関数は、deviceFunctions() が呼び出された VkDevice がアプリケーションの実行中に破棄され、後で新しい論理 Vulkan デバイスが作成される可能性がある場合に呼び出す必要があります。
その後、自動的にクリーンアップが実行されるため、QVulkanInstance を破棄する前にこの関数を呼び出す必要はありません。
deviceFunctions()も参照してください 。
void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)
アプリケーションが使用するように設計されている最も高いVulkan APIバージョンを指定します。
デフォルトではvulkanVersion は 0 で、これは Vulkan 1.0 に対応します。
注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても効果はありません。
注意 : Vulkan 1.1 では、Vulkan API バージョンフィールドに関する動作が変更されていることに注意してください。Vulkan 1.0 では、サポートされていないvulkanVersion を指定すると、仕様で義務付けられていたようにVK_ERROR_INCOMPATIBLE_DRIVER
でcreate() が失敗しました。Vulkan 1.1から、仕様はこれを禁止し、ドライバはインスタンス作成に失敗することなく任意のバージョンを受け入れなければなりません。
アプリケーション開発者は、Vulkan仕様の apiVersion
注記をよく理解することをお勧めします。
apiVersion() およびsupportedApiVersion()も参照してください 。
void QVulkanInstance::setExtensions(const QByteArrayList &extensions)
有効にする追加インスタンスextensions のリストを指定する。実行時にサポートされていない場合は無視されるため、サポートされていない拡張子も指定しても問題ありません。
注意: Qt が必要とするサーフェス関連の拡張(例えば、VK_KHR_win32_surface
)は常に自動的に追加されるので、このリストに含める必要はありません。
注意: NoPortabilityDrivers フラグが設定されていない限り、VK_KHR_portability_enumeration
は自動的に追加されます。この値は Qt 6.5 で導入されました。
注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても効果はありません。
extensions()も参照してください 。
void QVulkanInstance::setFlags(QVulkanInstance::Flags flags)
指定されたflags に基づいてcreate() の動作を設定する。
注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても何の効果もない。
flags()も参照 。
void QVulkanInstance::setLayers(const QByteArrayList &layers)
有効にするインスタンスlayers のリストを指定する。サポートされていないレイヤーは、実行時に無視されるので、サポートされていないレイヤーを指定しても安全です。
注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても効果はありません。
layers()も参照 。
void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
QVulkanInstance は、新しいVkInstanceハンドルを作成する代わりに、既存のVkInstanceハンドルを採用する。
注: existingVkInstance は、少なくともVK_KHR_surface
と適切なWSI固有のVK_KHR_*_surface
拡張が有効になっていなければならない。デバッグ出力のリダイレクションを確実に機能させるには、VK_EXT_debug_utils
も必要である。
注意: この関数は、create()の前にのみ呼び出すことができ、 その後に呼び出しても何の効果もない。
vkInstance()も参照のこと 。
QVersionNumber QVulkanInstance::supportedApiVersion() const
Vulkan実装でサポートされているインスタンスレベル機能のバージョンを返します。
実際には、この関数は(Vulkan 1.1以降で)vkEnumerateInstanceVersionから返される値か、1.0です。
実行時に利用可能なVulkanバージョンに基づいてVulkan機能とAPIの使用を分岐させたいアプリケーションは、create ()を呼び出す前に、setApiVersion ()に渡すバージョンを決定するためにこの関数を使用できます。
注: この関数は、create() の前に呼び出すことができます。
setApiVersion()も参照してください 。
QVulkanInfoVector<QVulkanExtension> QVulkanInstance::supportedExtensions() const
サポートされているインスタンスレベルの拡張子のリストを返す。
注意: この関数は、create() の前にコールすることができます。
QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers() const
サポートされているインスタンスレベルのレイヤーのリストを返します。
注意: この関数は、create() の前に呼び出すことができます。
bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window)
physicalDevice 内のqueueFamilyIndex を持つキューファミリがwindow への提示をサポートする場合、true を返します。
どのキューがプレゼンテーションの実行に使用できるかを決定するために、与えられたVulkanデバイスのキューを調べるときにこの関数を呼び出します。
[static]
VkSurfaceKHR QVulkanInstance::surfaceForWindow(QWindow *window)
与えられたwindow のVkSurfaceKHR
ハンドルを作成または取得します。
Vulkanサーフェスハンドルを返すか、失敗した場合は0を返します。
VkInstance QVulkanInstance::vkInstance() const
このQVulkanInstance がラップしている VkInstance ハンドルを返すか、create() がまだ正常に呼び出されておらず、setVkInstance() で既存のインスタンスが提供されていない場合はnullptr
を返す。
setVkInstance()も参照してください 。
© 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.