gpt4 book ai didi

c++ - 如何正确设置 Vk Debug Utils Messenger tEXT?

转载 作者:行者123 更新时间:2023-12-02 10:03:27 26 4
gpt4 key购买 nike

我已经尝试使用多种方法让它工作,无论我得到什么:

/usr/local/include/vulkan/vulkan.hpp:2453: undefined reference to `vkCreateDebugUtilsMessengerEXT'

/usr/local/include/vulkan/vulkan.hpp:2548: undefined reference to `vkDestroyDebugUtilsMessengerEXT'

这是我目前拥有的(希望这是足够的代码来诊断问题)

// destroy and create funcs
PFN_vkCreateDebugUtilsMessengerEXT pfnVkCreateDebugUtilsMessengerEXT;
PFN_vkDestroyDebugUtilsMessengerEXT pfnVkDestroyDebugUtilsMessengerEXT;

VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger)
{
return pfnVkCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
}

VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, VkAllocationCallbacks const * pAllocator)
{
return pfnVkDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
}
// instance creation stuff here ...
createUniqueInstance(...);
//


// init and setup debug utils messenger
pfnVkCreateDebugUtilsMessengerEXT = reinterpret_cast<PFN_vkCreateDebugUtilsMessengerEXT>(
instance->getProcAddr("vkCreateDebugUtilsMessengerEXT"));
if (!pfnVkCreateDebugUtilsMessengerEXT) {
exit_(1, "GetInstanceProcAddr: Unable to find pfnVkCreateDebugUtilsMessengerEXT function.");
}

pfnVkDestroyDebugUtilsMessengerEXT = reinterpret_cast<PFN_vkDestroyDebugUtilsMessengerEXT>(
instance->getProcAddr("vkDestroyDebugUtilsMessengerEXT"));
if (!pfnVkDestroyDebugUtilsMessengerEXT) {
exit_(1, "GetInstanceProcAddr: Unable to find pfnVkDestroyDebugUtilsMessengerEXT function.");
}


vk::DebugUtilsMessageSeverityFlagsEXT severityFlags(
vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning |
vk::DebugUtilsMessageSeverityFlagBitsEXT::eError);
vk::DebugUtilsMessageTypeFlagsEXT messageTypeFlags(
vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral |
vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance |
vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation);
debugUtilsMessenger = instance->createDebugUtilsMessengerEXTUnique(vk::DebugUtilsMessengerCreateInfoEXT(
{}, severityFlags, messageTypeFlags, &vk::su::debugUtilsMessengerCallback));

//注意 vk::su::debugUtilsMessengerCallback 来自这里: https://github.com/KhronosGroup/Vulkan-Hpp/blob/master/samples/utils/utils.hpp

“createUniqueInstance”函数也或多或少地派生自上述文件中的 createInstance 函数。不过,没有应该对调试实用程序信使内容有任何影响的修改。

我一直收到链接器错误,我做错了什么。

最佳答案

这是由 vulkan.hpp C++ header 引起的。它假定所有函数都存在,而扩展函数(不是核心的一部分)并非如此。因此,您需要将动态调度程序传递给 Messenger 回调创建函数。

我自己没有使用 vulkan.hpp,但在您的情况下它应该看起来像这样:

debugUtilsMessenger = instance->createDebugUtilsMessengerEXTUnique(vk::DebugUtilsMessengerCreateInfoEXT(
{}, severityFlags, messageTypeFlags, &vk::su::debugUtilsMessengerCallback), nullptr, vk::DispatchLoaderDynamic{ *instance });

注意作为最后一个参数传递的 vk::DispatchLoaderDynamic

可以找到有关此的详细信息here .

关于c++ - 如何正确设置 Vk Debug Utils Messenger tEXT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61401087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com