diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 52aeeee9d..df4429d9f 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -2780,9 +2780,9 @@ void ImFontAtlasUpdateNewFrame(ImFontAtlas* atlas, int frame_count) else if (tex->WantDestroyNextFrame && tex->Status != ImTextureStatus_WantDestroy) { // Request destroy. Keep bool as it allows us to keep track of things. + // We don't destroy pixels right away, as backend may have an in-flight copy from RAM. IM_ASSERT(tex->Status == ImTextureStatus_OK || tex->Status == ImTextureStatus_WantCreate || tex->Status == ImTextureStatus_WantUpdates); tex->Status = ImTextureStatus_WantDestroy; - tex->DestroyPixels(); } // The backend may need defer destroying by a few frames, to handle texture used by previous in-flight rendering. @@ -2794,9 +2794,10 @@ void ImFontAtlasUpdateNewFrame(ImFontAtlas* atlas, int frame_count) if (tex->Status == ImTextureStatus_WantDestroy && tex->TexID == ImTextureID_Invalid && tex->BackendUserData == NULL) remove_from_list = true; - // Remove + // Destroy and remove if (remove_from_list) { + tex->DestroyPixels(); IM_DELETE(tex); atlas->TexList.erase(atlas->TexList.begin() + tex_n); tex_n--;