【发布时间】:2017-05-24 08:46:52
【问题描述】:
我正在关注 vulkan-tutorial.com 教程,我正在学习验证层步骤。在教程 Alexander Overvoorde 中,作者将可用扩展的集合(例如创建实例)移到了它自己的函数中。
std::vector<const char*> getRequiredExtensions()
以前我收集该信息的方式略有不同,因为我使用的是 SDL2 而不是 glfw,但我的程序运行时创建了实例并且没有验证错误。问题是当我将代码移至此函数时,我无法再创建实例。
这很好用:
unsigned int extensionCount = 0;
vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL);
std::vector<VkExtensionProperties> extensionProperties(extensionCount);
vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, extensionProperties.data());
std::vector<const char*> extensionNames;
std::cout << "available extensions:" << std::endl;
int i = 0;
while (i < extensionCount) {
extensionNames.push_back(extensionProperties[i].extensionName);
std::cout << extensionNames[i] << std::endl;
i++;
}
if (enableValidationLayers) {
extensionNames.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
}*/
createInfo.enabledExtensionCount = extensionCount;
createInfo.ppEnabledExtensionNames = extensionNames.data();
但是即使函数使用完全相同的代码并返回扩展名,这也失败了,然后我像这样使用它:
std::vector<const char*> extensionNames = getRequiredExtensions();
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensionNames.size());
createInfo.ppEnabledExtensionNames = extensionNames.data();
那么为什么这不起作用呢?我有正式的 Java 教学背景,但已经用 C++ 编码了一年,所以它可能就像我发送错误的语法错误或指针。另外
reateInfo.enabledExtensionCount = static_cast<uint32_t>(getRequiredExtensions().size());
工作得很好,所以返回的向量大小正确:我相信是 5,因为我有 4 个扩展和调试一个。
【问题讨论】: