QVulkanFunctions Class
QVulkanFunctions 类提供了对实例级核心 Vulkan 1.3 API 的跨平台访问。更多内容...
| 头文件: | #include <QVulkanFunctions> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- QVulkanFunctions 是“3D渲染”的一部分。
详细说明
Qt 和 Qt 应用程序默认不会链接任何 Vulkan 库。相反,所有函数都在运行时动态解析。每个QVulkanInstance 都提供一个 QVulkanFunctions 对象,可通过QVulkanInstance::functions() 获取。该对象不包含设备级函数,以避免内部分派可能带来的开销。 相反,依赖于设备或设备可分派子对象的函数,是通过QVulkanDeviceFunctions 和QVulkanInstance::deviceFunctions() 暴露出来的。QVulkanFunctions 和QVulkanDeviceFunctions 共同提供了对完整核心 Vulkan API 的访问,不包括任何扩展。
注意: 无法直接创建QVulkanFunctions 实例。
典型用法如下:
void Window::init()
{
QVulkanInstance *inst = vulkanInstance();
QVulkanFunctions *f = inst->functions();
// ...
uint32_t count = 0;
VkResult err = f->vkEnumeratePhysicalDevices(inst->vkInstance(), &count, nullptr);
// ...
}注意:窗口系统 接口(WSI)的特定功能和扩展功能均被排除在外。本类仅涵盖核心 Vulkan 命令,但实例的创建、销毁和函数解析除外,因为此类功能已由QVulkanInstance 本身提供。
若需访问其他函数,应用程序可使用QVulkanInstance::getInstanceProcAddr() 和 vkGetDeviceProcAddr()。应用程序也可选择直接链接到 Vulkan 库,因为配备适当加载器的平台通常会导出核心命令的函数符号。更多信息请参阅vkGetInstanceProcAddr 的手册页。
注意: Vulkan 1.1、1.2 和 1.3 命令的成员函数原型 均为ifdefed ,其中VK_VERSION_1_x 的具体值由 Vulkan 头文件定义。 因此,只有当(构建应用程序的)系统所使用的 Vulkan 头文件版本足够新,且包含 1.1、1.2 或 1.3 版本的 Vulkan API 定义时,应用程序才能调用这些函数。 当从源代码构建 Qt 时,这还会带来一个额外影响:构建环境中的 Vulkan 头文件也必须兼容 1.1、1.2 和 1.3,才能构建出支持解析 1.1、1.2 和 1.3 API 命令的 Qt 版本。 如果上述任一条件未满足,应用程序将只能通过 QVulkanFunctions 和QVulkanDeviceFunctions 调用 Vulkan 1.0 命令。
安全性注意事项
QVulkanFunctions 是一个轻量级分发层,它原样暴露 Vulkan API。参数会被原样转发给底层的 Vulkan 实现,而该实现是一个可信的、进程内的平台依赖项。 Qt 不会检查、验证或清理传入的句柄、结构体和指针,也不会对返回的结果采取任何操作。因此,在此处调用成员函数等同于直接调用相应的 Vulkan 命令,Vulkan 规范中的有效使用规则同样适用。 违反这些规则将导致 Vulkan 实现中出现未定义行为,而非由 Qt 引发的优雅失败。
警告: 通过 QVulkanFunctions 传递的所有 数据均 应为可信内容。建议应用程序开发人员在从用户提供的、不属于应用程序且不受开发人员控制的内容中提取任何数据之前,仔细考虑其潜在影响。更多信息请参阅QVulkanInstance 。
另请参阅 QVulkanInstance 、QVulkanDeviceFunctions 、QWindow::setVulkanInstance() 以及QWindow::setSurfaceType()。
© 2026 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.