QVulkanInstance Class
QVulkanInstanceクラスは、ネイティブVulkanインスタンスを表し、QSurface へのVulkanレンダリングを可能にします。
Header: | #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 を作成する基本的な概要です:
class VulkanWindow : public QWindow { public: VulkanWindow() { setSurfaceType(VulkanSurface); } void exposeEvent(QExposeEvent *) { if (isExposed()) { if (!m_initialized) { m_initialized = true; // initialize device, swapchain, etc. QVulkanInstance *inst = vulkanInstance(); QVulkanFunctions *f = inst->functions(); uint32_t devCount = 0; f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount, nullptr); // ... // build the first frame render(); } } } bool event(QEvent *e) { if (e->type() == QEvent::UpdateRequest) render(); return QWindow::event(e); } void render() { // ... requestUpdate(); // render continuously } private: bool m_initialized = false; }; int main(int argc, char **argv) { QGuiApplication app(argc, argv); QVulkanInstance inst; if (!inst.create()) { qWarning("Vulkan not available"); return 1; } VulkanWindow window; window.showMaximized(); return app.exec(); }
Note: expose に加えて、お行儀の良いウィンドウ実装は、スワップチェーンの適切な管理を保証するために、resize やQPlatformSurfaceEvent のような追加イベントも処理する必要があります。さらに、プラットフォームによっては、公開されなくなったときにリソースを解放する必要があるかもしれません。
C++バインディングをVulkanに使用する
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 |
この enum は 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() が呼び出されなかった場合、アプリケーションが実行を期待する要求された Vulkan API バージョン、または null バージョン番号を返します。
setApiVersion()も参照してください 。
[since 6.5]
void QVulkanInstance::clearDebugOutputFilters()
installDebugOutputFilter() によって以前にインストールされたすべてのフィルター関数を削除します。
注意: この関数は、create() の前に呼び出すことができます。
この関数は Qt 6.5 で導入されました。
installDebugOutputFilter()も参照してください 。
bool QVulkanInstance::create()
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() が成功し、インスタンスが有効な場合は true を返します。
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実装がサポートするインスタンスレベル機能のバージョンを返します。
実際には、これはvkEnumerateInstanceVersionから返される値であり、その関数が利用可能な場合(Vulkan 1.1以降)、または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()も参照してください 。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。