QVulkanDeviceFunctions 类

QVulkanDeviceFunctions 类提供了对设备级别核心 Vulkan 1.3 API 的跨平台访问。 更多...

头文件 #include <QVulkanDeviceFunctions>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

详细说明

Qt 和 Qt 应用程序默认不链接到任何 Vulkan 库。相反,所有功能都在运行时动态解析。每个 QVulkanInstance 都提供了一个可通过对 QVulkanInstance::functions() 的引用获取的 QVulkanFunctions 对象。该对象不包含设备级别函数,以避免内部分派的开销。相反,依赖于设备或设备可调度子对象的函数通过 QVulkanDeviceFunctions 和 QVulkanInstance::deviceFunctions() 暴露。QVulkanFunctions 和 QVulkanDeviceFunctions 一起提供了对完整核心 Vulkan API 的访问,不包括任何扩展。

注意: 不能直接构造 QVulkanDeviceFunctions 实例。

典型的用法如下

void Window::render()
{
    QVulkanInstance *inst = vulkanInstance();
    QVulkanDeviceFunctions *df = inst->deviceFunctions(device);
    VkResult err = df->vkAllocateCommandBuffers(device, &cmdBufInfo, &cmdBuf);
    // ...
}

当第一次用所提供的 VkDevice 调用 QVulkanInstance::deviceFunctions() 时,会创建针对特定 VkDevice 的 QVulkanDeviceFunctions 对象。然后对象被内部缓存。

要访问其他函数,应用程序可以使用 QVulkanInstance::getInstanceProcAddr() 和 vkGetDeviceProcAddr().应用程序还可以选择直接链接到 Vulkan 库,因为许多实现导出了核心命令的功能符号。有关更多信息,请参阅 vkGetInstanceProcAddr 的 man 页面

另请参阅 QVulkanInstanceQVulkanFunctionsQWindow::setVulkanInstance() 和 QWindow::setSurfaceType()。

© 2024 The Qt Company Ltd. 本文档贡献的版权属于各自的拥有者。本文档根据由自由软件开发基金会发布的 GNU 自由文档许可版本 1.3 的条款获得许可。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和其他国家的商标。所有其他商标均属于其各自的拥有者。