Я пишу игру для Android, используя NDK.Моя игра использует vulkan, если он доступен, и использует OpenGL.
У меня проблема в том, что если вы переведете игру в режим разделенного экрана, когда устройство находится в портретной ориентации, то измените размер игры на полноэкранный режим,изображение игры на старом виде все еще видно.Примечание: выполнение этого с игрой вызывает триггер SurfaceHolder.Callback.surfaceDestroyed (в Java), который, в свою очередь, закрывает мой поток рендеринга в C ++.Мой обратный вызов для surfaceDestroyed сообщает C ++, что поток рендеринга должен быть остановлен, а затем присоединяется к нему.
Я могу исправить это в OpenGL, вызвав glClearColor с любым цветом, а затем вызвать eglSwapBuffers непосредственно перед тем, как поток рендеринга завершит работу.
Это корректное исправление для OpenGL?Есть ли что-то еще, что я должен сделать, чтобы очистить старую поверхность?Я проверил, что ANativeWindow_release вызывается в окне, которое я получаю из ANativeWindow_fromSurface, прежде чем выйти из потока рендеринга.
Затем я попытался сделать то же самое в vulkan и снова столкнулся с проблемами ... Я использовал vkCmdClearColorImage, выполнив командуследующее:
(1) vkQueueWaitIdle (presentQueue)
(2) vkAquireNextImageKHR
(3) инициализировать соответствующий буфер команд с помощью:
(3a) ImageMemoryBarrier VK_IMAGE_LAYOUT_UNDEFINED -> VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0 -> VK_ACCESS_TRANSFER_WRITE_BIT
(3b) vkCmdClearColor VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
(3с) ImageMemoryBarrier VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL -> VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_ACCESS_TRANSFER_WRITE_BIT -> VK_ACCESS_MEMORY_READ_BIT
(4)vkQueueSubmit (graphicsQueue ...)
(5) vkQueuePresentKHR (presentQueue ...)
(6) vkQueueWaitIdle (presentQueue)
Я получил 3a, а затем яполучил ошибку в валислой данных о том, что изображение не было создано с флагом использования VK_IMAGE_USAGE_TRANSFER_DST_BIT.Как заставить образы swapchain создаваться с помощью этого бита использования?
Пожалуйста, дайте мне знать, если необходима дополнительная информация.Спасибо!