From ca23fe4d6fe42d4dab0cc61b348092cad4469ca6 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 3 Feb 2026 17:29:10 +0800 Subject: [PATCH] [Perf] (MG_Backend/DirectGLES): use version to skip unnecessary FBO sync --- MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp | 9 +++++++-- MobileGL/MG_Backend/DirectGLES/Managers.cpp | 1 + MobileGL/MG_Backend/DirectGLES/Managers.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp b/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp index 4395706b..5863049b 100644 --- a/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp +++ b/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp @@ -242,7 +242,12 @@ namespace MobileGL::MG_Backend::DirectGLES { MG_State::GLState::FramebufferObject* lastUpdatedFBO = nullptr; for (auto target : fboTargets) { - auto currentFBO = MG_State::pGLContext->GetFramebufferBindingSlot(target).GetBoundObject(); + auto slot = MG_State::pGLContext->GetFramebufferBindingSlot(target); + auto version = slot.GetVersion(); + if (version == g_fboBindVersions[SizeT(target)]) + continue; + + auto currentFBO = slot.GetBoundObject(); if (!currentFBO) { MGLOG_E("No FBO is currently bound, cannot sync current FBO."); @@ -269,7 +274,7 @@ namespace MobileGL::MG_Backend::DirectGLES { backendFBOObject->SyncToBackend(currentFBO, target); } - backendFBOObject->Bind(target); +// backendFBOObject->Bind(target); lastUpdatedFBO = currentFBO.get(); } diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.cpp b/MobileGL/MG_Backend/DirectGLES/Managers.cpp index 2f8aa73d..ecbc9135 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.cpp +++ b/MobileGL/MG_Backend/DirectGLES/Managers.cpp @@ -987,6 +987,7 @@ namespace MobileGL::MG_Backend::DirectGLES { UnorderedMap, SharedPtr> g_backendFramebufferObjects; + Array g_fboBindVersions = {0}; } // namespace FramebufferImpl namespace PrgramImpl { diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.h b/MobileGL/MG_Backend/DirectGLES/Managers.h index 2981d321..6268e30f 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.h +++ b/MobileGL/MG_Backend/DirectGLES/Managers.h @@ -170,6 +170,7 @@ namespace MobileGL::MG_Backend::DirectGLES { extern UnorderedMap, SharedPtr> g_backendFramebufferObjects; + extern Array g_fboBindVersions; } // namespace FramebufferImpl namespace PrgramImpl {