Vulkan创建逻辑设备偶发返回VK_ERROR_FEATURE_NOT_PRESENT错误
问题:封装类后调用
vkCreateDevice返回VK_ERROR_FEATURE_NOT_PRESENT错误 当使用自定义类封装窗口类和Vulkan类时,调用vkCreateDevice会返回VK_ERROR_FEATURE_NOT_PRESENT错误,但将类中的相同代码移至main函数中时,却能完全正常运行。此前调用SDL_Vulkan_GetInstanceExtensions获取实例扩展时,也遇到过类似问题。
可正常运行的main.cpp
window.createWindow(); engine.window = window.window; try { engine.initialize(); } catch (XiError error) { std::cout << "Error " << error.code << ": " << error.definition << std::endl; } window.instance = engine.getVkInstance(); VkPhysicalDeviceProperties deviceProperties; vkGetPhysicalDeviceProperties(engine.physicalDevice, &deviceProperties); std::cout << deviceProperties.deviceName << ", Driver Version " << deviceProperties.driverVersion << std::endl; try { window.createSurface(); } catch (XiError error) { std::cout << "Error " << error.code << ": " << error.definition << std::endl; } window.mainLoop(); vkDestroyDevice(engine.logicalDevice, nullptr); vkDestroySurfaceKHR(engine.instance, window.surface, nullptr); vkDestroyInstance(engine.instance, nullptr); SDL_DestroyWindow(window.window); SDL_Quit();
无法正常运行的main.cpp
try { app.run(); } catch (XiError error) { std::cout << "Error " << error.code << ": " << error.definition << std::endl; } VkPhysicalDeviceProperties deviceProperties; vkGetPhysicalDeviceProperties(app.engine.physicalDevice, &deviceProperties); std::cout << deviceProperties.deviceName << ", Driver Version " << deviceProperties.driverVersion << std::endl; app.window.mainLoop(); app.shutDown();
app.run()实现
window.createWindow(); engine.window = window.window; engine.createVulkanInstance(); window.instance = engine.getVkInstance(); window.createSurface(); engine.getPhysicalDevices(); engine.selectPhysicalDevice(); engine.createLogicalDevice(); window.mainLoop();
app.shutDown()实现
vkDestroyDevice(engine.logicalDevice, nullptr); vkDestroySurfaceKHR(engine.instance, window.surface, nullptr); vkDestroyInstance(engine.instance, nullptr); SDL_DestroyWindow(window.window); SDL_Quit();
window、engine和app均为自定义类。尝试手动添加各种所需的支持扩展后问题可解决,但这种方法不够优雅且代码量较大。怀疑这可能是作用域相关的异常,但不确定。
内容的提问来源于stack exchange,提问作者Pixonepro
相关产品推荐
相关产品推荐

