在Android本机应用程序中,当我打电话时:
vkDestroyDevice( vk.device, VK_ALLOCATOR )
我有错误错误:[验证]代码614466292 X对象0xffffffffd3bcb900尚未销毁(...)。
但是我为每个对象调用了vkDestroy(Object)。 (图像,图像视图,管道等)
这里是一个对象的创建/销毁:
static void create_shader_module(const unsigned char* pBytes, const int count, VkShaderModule* pVkShaderMod) {
VkShaderModuleCreateInfo desc;
desc.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
desc.pNext = NULL;
desc.flags = 0;
desc.codeSize = count;
desc.pCode = (const uint32_t*)pBytes;
VK(vkCreateShaderModule(vk.device, &desc, NULL, pVkShaderMod));
}
extern unsigned char multiview_single_texture_vert_spv[];
extern int multiview_single_texture_vert_spv_size;
create_shader_module(multiview_single_texture_vert_spv, multiview_single_texture_vert_spv_size, &s_gShaderModules.single_texture_vs);
对于破坏部分:
vkDestroyShaderModule(vk.device, s_gShaderModules.single_texture_vs, NULL);
当我调用vkDestroyShaderModule时,vk.device仍处于活动状态,并且没有错误。但是,一旦我调用vkDestroyDevice(),我就会收到错误消息:
对象错误:对于设备0xeb0ac330,ShaderModule对象0xffffffffeb0c6240尚未销毁。规范有效用法文本声明“在设备上创建的所有子对象必须已被销毁在销毁设备之前'
使用memset(&s_gShaderModules,0,sizeof(s_gShaderModules))释放结构内存;无法解决问题。
错误是在android设备上,很遗憾,我无法在其他设备上测试该应用程序。应用程序中的其他所有内容都可以正常运行,我什至在运行时销毁并重新创建了一些对象,而不会出现错误,但应用程序退出时会崩溃。
我刚刚删除了验证层,令人惊讶的是,应用程序不再崩溃,关闭序列成功结束。我为什么不早点尝试呢?该问题仅发生在图层上,可能是由于其在扩展数组中的顺序所致。