QVulkanDeviceFunctions Class
QVulkanDeviceFunctions 类提供了对设备级核心 Vulkan 1.3 API 的跨平台访问。更多内容...
| 头文件: | #include <QVulkanDeviceFunctions> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- QVulkanDeviceFunctions 属于“3D 渲染”部分。
详细说明
默认情况下,Qt及Qt应用程序不会链接任何Vulkan库。相反,所有函数均在运行时动态解析。每个QVulkanInstance 都提供一个QVulkanFunctions 对象,可通过QVulkanInstance::functions()获取。该对象不包含设备级函数,以避免内部分派可能带来的开销。 相反,依赖于设备或设备可分派子对象的函数,是通过 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);
// ...
}当首次使用相关设备调用 `QVulkanInstance::deviceFunctions()` 时,会创建针对所提供 `VkDevice` 的 `QVulkanDeviceFunctions` 对象。该对象随后会被内部缓存。
若要访问其他函数,应用程序可使用QVulkanInstance::getInstanceProcAddr() 和 vkGetDeviceProcAddr()。此外,由于许多实现都会导出核心命令的函数符号,应用程序也可选择直接链接到 Vulkan 库。更多信息请参阅vkGetInstanceProcAddr 的手册页。
安全注意事项
QVulkanDeviceFunctions 是一个轻量级的分发层,它原样暴露 Vulkan API。参数会被原样转发给底层的 Vulkan 实现,该实现是可信的、进程内的平台依赖项。 Qt 不会检查、验证或清理传入的句柄、结构体和指针,也不会对返回的结果采取任何操作。这涵盖了所有资源创建、内存映射和命令缓冲区构建命令等。 因此,在此处调用成员函数等同于直接调用相应的 Vulkan 命令,且Vulkan 规范中的有效使用规则同样适用。违反这些规则将导致 Vulkan 实现中出现未定义的行为,而非由 Qt 引发的优雅失败。
警告: 通过 QVulkanDeviceFunctions 传递的所有 数据均 应为可信内容。建议应用程序开发人员在从非应用程序组成部分且不受开发者控制的用户提供内容中提取任何数据之前,仔细考虑其潜在影响。更多信息请参见QVulkanInstance 。
另请参阅 QVulkanInstance 、QVulkanFunctions 、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.