Vulkan hpp 包装器,签名冲突
Vulkan hpp wrappers, signature conflict
我正在尝试将我现有的代码库转换为使用 lunar SDK vulkan.hpp 中定义的包装器。
特别是,我有一行代码:
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
这是使用 vulkan 做事的原生 C 类方法。
我尝试将其更改为:
vk::enumerateInstanceLayerProperties(&layerCount, nullptr);
这是 vulkan.hpp 的命名约定。然而,这无法编译,有多个错误,第一个是 error: ‘unsigned int*’ is not a class, struct, or union type
vulkan.hpp中定义的签名是:
template <typename Allocator, typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties(Allocator const& vectorAllocator, Dispatch const &d )
当时我的假设是第一个参数需要是一个向量:
std::vector<vk::LayerProperties> availableLayers;
vk::enumerateInstanceLayerProperties(availableLayers, nullptr);
然而这也无法编译,警告我:
error: request for member ‘vkEnumerateInstanceLayerProperties’ in ‘d’, whichis of non-class type ‘std::nullptr_t’
d
是函数的第二个参数。
要成功编译这段代码,调度需要什么?
使用 C++ headers,该函数根本不接受任何参数,而只是 returns 直接 vk::LayerProperties
的向量,因此您只需分配结果:
std::vector<vk::LayerProperties> instanceLayerProps = vk::enumerateInstanceLayerProperties();
这也使您不必调用该函数两次,就像使用 C headers 一样,您首先需要在其中获取计数并分配您的向量。这一切都在这里隐式完成。
我正在尝试将我现有的代码库转换为使用 lunar SDK vulkan.hpp 中定义的包装器。
特别是,我有一行代码:
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
这是使用 vulkan 做事的原生 C 类方法。
我尝试将其更改为:
vk::enumerateInstanceLayerProperties(&layerCount, nullptr);
这是 vulkan.hpp 的命名约定。然而,这无法编译,有多个错误,第一个是 error: ‘unsigned int*’ is not a class, struct, or union type
vulkan.hpp中定义的签名是:
template <typename Allocator, typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<std::vector<LayerProperties,Allocator>>::type enumerateInstanceLayerProperties(Allocator const& vectorAllocator, Dispatch const &d )
当时我的假设是第一个参数需要是一个向量:
std::vector<vk::LayerProperties> availableLayers;
vk::enumerateInstanceLayerProperties(availableLayers, nullptr);
然而这也无法编译,警告我:
error: request for member ‘vkEnumerateInstanceLayerProperties’ in ‘d’, whichis of non-class type ‘std::nullptr_t’
d
是函数的第二个参数。
要成功编译这段代码,调度需要什么?
使用 C++ headers,该函数根本不接受任何参数,而只是 returns 直接 vk::LayerProperties
的向量,因此您只需分配结果:
std::vector<vk::LayerProperties> instanceLayerProps = vk::enumerateInstanceLayerProperties();
这也使您不必调用该函数两次,就像使用 C headers 一样,您首先需要在其中获取计数并分配您的向量。这一切都在这里隐式完成。