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 {