Android 在 Vulkan 中失去焦点处理
Android lost focus handling in Vulkan
我在 Android 中玩 Vulkan,每当我触摸 Overview button
(正方形的那个)并返回我的应用程序时,它就会崩溃。
失败-解决方案 1:
我试图在我失去焦点时停止渲染,然后在我重新获得焦点时恢复渲染,但它没有用,我在 vkAcquireNextImageKHR 崩溃了。
失败的解决方案 2:
我试图从头到尾重新初始化所有 Vulkan 对象,但可悲有趣的是,第一次失去焦点和获得焦点时一切正常,但两次后,它在同一点崩溃。
正如我的评论中所暗示的,检查 vkAcquireNextImageKHR 的结果以确定是否需要重新创建资源。如果它类似于 VK_ERROR_SURFACE_LOST_KHR,您需要重新创建表面和连接到它的所有资源,如交换链等。作为参考,请查看我的示例基础 window resize function class如果 vkAcquireNextImageKHR 发出需要重新创建表面的信号,也会调用它。
至于错误跟踪(根据您实际需要重新创建的内容)启用验证层。只需将它们与您的应用程序的库 (.so) 放在一起,启用验证(请注意,您需要手动 select 所有层,因为没有像 android 上的 VK_LAYER_LUNARG_standard_validation 这样的元层)并将验证消息输出到例如logcat。你可以看到我的debug unit as a reference.
我在 Android 中玩 Vulkan,每当我触摸 Overview button
(正方形的那个)并返回我的应用程序时,它就会崩溃。
失败-解决方案 1:
我试图在我失去焦点时停止渲染,然后在我重新获得焦点时恢复渲染,但它没有用,我在 vkAcquireNextImageKHR 崩溃了。
失败的解决方案 2:
我试图从头到尾重新初始化所有 Vulkan 对象,但可悲有趣的是,第一次失去焦点和获得焦点时一切正常,但两次后,它在同一点崩溃。
正如我的评论中所暗示的,检查 vkAcquireNextImageKHR 的结果以确定是否需要重新创建资源。如果它类似于 VK_ERROR_SURFACE_LOST_KHR,您需要重新创建表面和连接到它的所有资源,如交换链等。作为参考,请查看我的示例基础 window resize function class如果 vkAcquireNextImageKHR 发出需要重新创建表面的信号,也会调用它。
至于错误跟踪(根据您实际需要重新创建的内容)启用验证层。只需将它们与您的应用程序的库 (.so) 放在一起,启用验证(请注意,您需要手动 select 所有层,因为没有像 android 上的 VK_LAYER_LUNARG_standard_validation 这样的元层)并将验证消息输出到例如logcat。你可以看到我的debug unit as a reference.