QVulkanInstance 类
QVulkanInstance 类表示一个原生 Vulkan 实例,允许在 QSurface 上进行 Vulkan 渲染。 更多...
头文件 | #include <QVulkanInstance> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
- 包括继承成员在内的所有成员列表
- QVulkanInstance 是 3D 渲染的一部分 。
公共类型
DebugFilter | |
(自 6.5) 枚举 | DebugMessageSeverityFlag { VerboseSeverity, InfoSeverity, WarningSeverity, ErrorSeverity } |
标志 | DebugMessageSeverityFlags |
(自 6.5) 枚举 | DebugMessageTypeFlag { GeneralMessage, ValidationMessage, PerformanceMessage } |
标志 | DebugMessageTypeFlags |
(自 6.5) | DebugUtilsFilter |
枚举 | Flag { NoDebugOutputRedirect, NoPortabilityDrivers } |
标志 | 标志 |
公共函数
QVulkanInstance() | |
~QVulkanInstance() | |
QVersionNumber | apiVersion() const |
(自 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) |
(自 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库和创建一个实例。有关Vulkan实例的介绍,请参阅规范章节3.2。
注意: 不同平台插件提供了对Vulkan实例和具有Vulkan功能表面的窗口的支持。不过,并非所有插件都支持Vulkan。在这样的平台上运行时,create()将失败并总是返回false
。
注意: 由于构建时没有提供必要的Vulkan头文件,某些Qt构建可能自动禁用Vulkan支持。当这种情况发生时,如果configure
的输出表明Vulkan支持已被禁用,则QVulkan*类将不可用。
注意: 一些函数在不同版本的Vulkan头文件中更改了其签名。当构建Qt且系统中只存在具有旧版冲突签名的旧头文件时,Vulkan支持将被禁用。建议使用1.0.39或更新版本的Vulkan头文件。
初始化
类似于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()。这可以通过将NoDebugOutputRedirect
标志传递给setFlags()在调用create()之前的before
来禁用。
要启用额外的层和扩展,通过setLayers()和setExtensions()提供列表,然后在调用create()之前之前进行。当给定的层或扩展未在实例中报告为可用时,请求将被忽略。成功调用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
,适用于特定平台的WSI特定的VK_KHR_*_surface
,以及在希望将QVulkanInstance的调试输出重定向的情况下,还有VK_EXT_debug_utils
。
访问核心Vulkan命令
要访问QVulkanInstance包装的VkInstance
句柄,请调用vkInstance()。要解析Vulkan函数,请调用getInstanceProcAddr()。对于核心Vulkan命令,手动解析是不必要的,因为它们是通过QVulkanFunctions和QVulkanDeviceFunctions对象提供的,这些对象可以通过functions()和deviceFunctions()获得。
注意:QVulkanFunctions和QVulkanDeviceFunctions是在构建Qt库时从Vulkan API XML规范生成的。因此,没有提供有关它们的文档。它们包含具有与Vulkan API文档中描述的相同签名的Vulkan 1.2函数。
获取窗口的原生Vulkan表面
两个常见的窗口系统特定操作是获取窗口的表面(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
。在失败调用create后,可以通过调用errorCode检索实例创建的实际Vulkan错误代码。
在某些特殊情况下,可能需要覆盖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(); }
注意:除了公开(Expose)之外,行为良好的窗口实现还必须注意诸如调整大小和QPlatformSurfaceEvent等额外事件,以确保正确管理双缓冲区链。此外,某些平台可能需要在不再公开时释放资源。
使用C++绑定Vulkan
可以将Qt的Vulkan启用器与C++ Vulkan包装器(例如Vulkan-Hpp)结合使用。这里的先决条件是C++层必须能够在它的类中采用本地句柄(VkInstance、VkSurfaceKHR)而不采取所有权(因为所有权保留在QVulkanInstance和QWindow上)。还要考虑以下因素
- 某些包装器需要启用异常支持。Qt不使用异常。要为应用程序启用异常,请将
CONFIG += exceptions
添加到.pro
文件中。 - 某些包装器会直接调用Vulkan函数,假设
vulkan.h
提供原型,并且应用程序连接到一个导出所有必要符号的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_utils
而不是已弃用的VK_EXT_debug_report
。回调签名基于VK_EXT_debug_report。因此,不再可以期望所有参数都有效。避免依赖除pMessage
、messageCode
和object
之外的参数。希望访问在本清单中指定的所有回调数据的应用程序应迁移到DebugUtilsFilter。
另请参阅:installDebugOutputFilter() 和 removeDebugOutputFilter()。
[since 6.5]
枚举 QVulkanInstance::DebugMessageSeverityFlag
标志 QVulkanInstance::DebugMessageSeverityFlags
常量 | 值 |
---|---|
QVulkanInstance::VerboseSeverity | 0x01 |
QVulkanInstance::InfoSeverity | 0x02 |
QVulkanInstance::WarningSeverity | 0x04 |
QVulkanInstance::ErrorSeverity | 0x08 |
此枚举是Qt 6.5中引入的。
DebugMessageSeverityFlags类型是QFlags
[since 6.5]
枚举 QVulkanInstance::DebugMessageTypeFlag
标志 QVulkanInstance::DebugMessageTypeFlags
常量 | 值 |
---|---|
QVulkanInstance::GeneralMessage | 0x01 |
QVulkanInstance::ValidationMessage | 0x02 |
QVulkanInstance::PerformanceMessage | 0x04 |
此枚举是Qt 6.5中引入的。
DebugMessageTypeFlags类型是QFlags
[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
将抑制消息的打印。
此typedef是Qt 6.5中引入的。
另请参阅:installDebugOutputFilter() 和 removeDebugOutputFilter()。
枚举 QVulkanInstance::Flag
标志 QVulkanInstance::Flags
此枚举描述了可以传递给setFlags
的标志。这些控制了create的行为。
常量 | 值 | 说明 |
---|---|---|
QVulkanInstance::NoDebugOutputRedirect | 0x01 | 禁用Vulkan调试输出到qDebug的重定向。 |
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5) | 0x02 | 禁用了枚举标记为Vulkan可移植性的物理设备。 |
Flag类型是QFlags
成员函数文档
QVulkanInstance::QVulkanInstance()
构造一个新实例。
注意:构造函数中不会执行任何Vulkan初始化。
[noexcept]
QVulkanInstance::~QVulkanInstance()
析构函数。
注意:vkInstance()将在实例销毁后返回nullptr
。
QVersionNumber QVulkanInstance::apiVersion() const
返回应用程序期望运行的请求的Vulkan API版本,或者在调用setApiVersion()之前没有调用create
()时,返回一个空版本号。
另请参阅 setApiVersion()。
[since 6.5]
void QVulkanInstance::clearDebugOutputFilters()
删除之前通过 installDebugOutputFilter() 安装的 所有过滤器函数。
注意: 此函数可以在 create() 之前调用。
此功能是在 Qt 6.5 中引入的。
另请参阅 installDebugOutputFilter。
bool QVulkanInstance::create()
初始化 Vulkan 库并创建一个新的或采用现有的 Vulkan 实例。
如果成功则返回 true,如果出错或 Vulkan 不受支持则返回 false。
如果成功,可以通过 vkInstance() 获取此 QVulkanInstance 的指针。
Vulkan 实例和库在 QVulkanInstance 存在期间或直到调用 destroy() 时都可用。
默认情况下,VkInstance 使用具有 VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR 标志创建。这意味着还将枚举 Vulkan 可移植物理设备。如果不希望这样,请设置 NoPortabilityDrivers 标志。
void QVulkanInstance::destroy()
销毁底层的平台实例,从而销毁 VkInstance(当所有者时)。QVulkanInstance 对象可以通过再次调用 create() 重新使用。
QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)
返回一个 QVulkanDeviceFunctions 对象,该对象公开了设备级别的 Vulkan 核心命令集,并且跨平台保证可用。
注意: 返回对象中的 Vulkan 函数必须只能用 device 或 device 的子对象(例如 VkQueue、VkCommandBuffer)作为其第一个参数调用。这是因为这些函数通过 vkGetDeviceProcAddr 解析,以避免内部调度的潜在开销。
注意: 返回的对象由 QVulkanInstance 拥有和管理。请勿销毁或修改它。
注意: 对象被缓存,因此使用相同的 device 再次调用此函数是一个低成本的运算。但是,当设备被销毁时,应用程序必须通过调用 resetDeviceFunctions() 通知 QVulkanInstance。
核心 Vulkan 1.0 API 的功能将始终可用。当涉及到更高的 Vulkan 版本,如 1.1 和 1.2 时,QVulkanDeviceFunctions 对象将尝试为这些版本解析核心 API 功能,但如果运行时 Vulkan 物理设备不支持这些功能,则调用任何此类不受支持的功能将导致未指定行为。要正确启用对高于 1.0 的 Vulkan 版本的支持,可能需要通过在 setApiVersion() 调用之前设置合适的实例 API 版本来调用 create()。此外,应用程序应检查 VkPhysicalDeviceProperties 中的物理设备的 apiVersion。
另外参见 functions() 和 resetDeviceFunctions。
VkResult QVulkanInstance::errorCode() const
在不成功调用 create() 后返回 Vulkan 错误代码;否则返回 VK_SUCCESS
。
该值通常是创建新 Vulkan 实例时从 vkCreateInstance() 返回的值(而不是采用现有实例),但如果平台插件不支持 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 的功能将始终可用。当涉及到更高的 Vulkan 版本,如 1.1 和 1.2 时,QVulkanFunctions 对象将尝试为这些版本解析核心 API 功能,但如果运行时 Vulkan 实现不支持这些功能,则调用任何此类不受支持的功能将导致未指定行为。此外,要正确启用对高于 1.0 的 Vulkan 版本的支持,可能需要通过在 setApiVersion() 调用之前设置合适的实例 API 版本来调用 create()。为了查询 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 时,过滤才是有效的。否则安装过滤器没有效果。
注意: 此函数可以在 create() 之前调用。
此功能是在 Qt 6.5 中引入的。
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugFilter filter)
这是一个重载函数。
为每个 Vulkan 调试消息安装一个 filter 函数。当回调返回 true
时,消息被阻止(过滤掉)并不会出现在调试输出中。
注意:当未设置 NoDebugOutputRedirect 时,过滤才是有效的。否则安装过滤器没有效果。
注意: 此函数可以在 create() 之前调用。
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 对象失效并销毁。
当在应用程序打算继续运行的情况下销毁一个 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
的说明,参见Vulkan 规范。
另请参阅:apiVersion() 和 supportedApiVersion()。
void QVulkanInstance::setExtensions(const QByteArrayList &extensions)
指定启用额外的实例 扩展 的列表。也可以安全地指定不支持扩展,因为这些在运行时不受支持时会被忽略。
注意:Qt 所需的与表面相关的扩展(例如,VK_KHR_win32_surface
)将始终自动添加,无需将其包含在此列表中。
注意:除非设置了 NoPortabilityDrivers 标志,否则会自动添加 VK_KHR_portability_enumeration
。此值是在 Qt 6.5 中引入的。
注意:此函数必须在使用 create() 之前调用,否则将不会有任何效果。
另请参阅:extensions()。
void QVulkanInstance::setFlags(QVulkanInstance::Flags flags)
根据提供的 标志 配置 create() 的行为。
注意:此函数必须在使用 create() 之前调用,否则将不会有任何效果。
另请参阅:flags()。
void QVulkanInstance::setLayers(const QByteArrayList &layers)
指定要启用的实例 层 的列表。也可以安全地指定不支持层,因为这些在运行时不受支持时会被忽略。
注意:此函数必须在使用 create() 之前调用,否则将不会有任何效果。
另请参阅:layers()。
void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
使 QVulkanInstance 采取现有的 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)
如果 queueFamilyIndex 在 physicalDevice 中的队列家族支持向 window 展示,返回 true。
在检查指定 Vulkan 设备的队列时调用此函数,以确定哪个队列可用于执行展示。
[静态]
VkSurfaceKHR QVulkanInstance::surfaceForWindow(QWindow *window)
创建或检索给定 window 的已存在的 VkSurfaceKHR
处理句柄。
返回 Vulkan 表面处理句柄或失败时返回 0。
VkInstance QVulkanInstance::vkInstance() const
返回此 QVulkanInstance 所封装的 VkInstance 处理句柄,或在 create() 尚未成功调用且未通过 setVkInstance() 提供现有实例时返回 nullptr
。
另请参阅 setVkInstance。
© 2024 The Qt Company Ltd. 本文档中的所有文档贡献均为其各自所有者的版权。本文档受自由软件基金会发布的 GNU 自由文档许可证版本 1.3 条件的许可。Qt 及其相关标志是芬兰 The Qt Company Ltd. 和/或世界上其他国家的商标。所有其他商标均为其各自所有者的财产。