【问题标题】:Android lost focus handling in VulkanAndroid 在 Vulkan 中失去焦点处理
【发布时间】:2017-05-02 06:11:56
【问题描述】:

我在 Android 中使用 Vulkan,每当我触摸 Overview button(方形的那个)并返回我的应用程序时,它都会崩溃。

失败的解决方案 1:

我在失去焦点时尝试停止渲染,然后在重新获得焦点时恢复渲染,但它不起作用,我在 vkAcquireNextImageKHR 崩溃。

失败的解决方案 2:

我尝试从地面到地面重新启动所有 Vulkan 对象,但可悲的是第一次失去焦点并获得焦点一切正常,但两次之后,它在同一点崩溃。

【问题讨论】:

  • 它至少应该在崩溃之前给你一个丢失的设备。直接崩溃是一个错误 IMO
  • 也许你是对的,也许不是,我不确定。但是在 vkAcquireNextImageKHR 上出现错误是有意义的,我仍在研究其他解决方案。
  • 您使用的是 NativeActivity 还是混合 java/native 代码?
  • vkAcquireNextImageKHR 真的会崩溃还是只是返回一个告诉您重新创建表面的值(例如 VK_ERROR_SURFACE_LOST_KHR)?如果发生这种情况,您需要重新创建交换链以及与其连接的所有资源。
  • 没错!崩溃是一个愚蠢的词,实际上我得到了错误。我已经重新创建了交换链及其所有相关资源,但它仍然出现相同的错误,我想,我错过了一些东西,它需要大量时间来跟踪它。我更新了深度、模板、render_pass、pileline(不是缓存和布局)和绘制命令。

标签: android android-ndk focus vulkan lost-focus


【解决方案1】:

正如我的评论中所暗示的,检查 vkAcquireNextImageKHR 的结果以确定是否需要重新创建资源。如果它类似于 VK_ERROR_SURFACE_LOST_KHR,您需要重新创建表面和连接到它的所有资源,如交换链等。作为参考,请查看我的示例基类的 window resize function,如果 vkAcquireNextImageKHR 发出表面信号,该基类也被调用需要重新创建。

至于错误跟踪(根据您实际需要重新创建的内容)启用验证层。只需将它们与应用程序的 lib (.so) 一起放置,启用验证(请注意,您需要手动选择所有层,因为在 android 上没有像 VK_LAYER_LUNARG_standard_validation 这样的元层)并将验证消息输出到例如日志猫。你可以看到我的debug unit as a reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多