[Fix] (MG_Backend/DirectGLES): Fix default FBO.

This commit is contained in:
BZLZHH
2025-10-26 09:25:17 +08:00
parent 60129e1a61
commit 21d659214f
@@ -2,6 +2,7 @@
#include "Utils.h" #include "Utils.h"
#include "Managers.h" #include "Managers.h"
#include <MG_State/GLState/Core.h> #include <MG_State/GLState/Core.h>
#include <MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.h>
#include <MG_Util/BackendLoaders/OpenGL/Loader.h> #include <MG_Util/BackendLoaders/OpenGL/Loader.h>
#include <MG_Util/Converters/GLToStr/GLEnumConverter.h> #include <MG_Util/Converters/GLToStr/GLEnumConverter.h>
#include <MG_Util/Converters/MGToGL/TextureEnumConverter.h> #include <MG_Util/Converters/MGToGL/TextureEnumConverter.h>
@@ -121,6 +122,11 @@ namespace MobileGL::MG_Backend::DirectGLES {
return; return;
} }
if (currentFBO == MG_Impl::GLImpl::FramebufferImpl::pDefaultFramebufferInfo->defaultFBO) {
// Default FBO, nothing to sync
return;
}
const auto& backendFBOIt = g_backendFramebufferObjects.find(currentFBO); const auto& backendFBOIt = g_backendFramebufferObjects.find(currentFBO);
SharedPtr<BackendFramebufferObject> backendFBOObject; SharedPtr<BackendFramebufferObject> backendFBOObject;
if (backendFBOIt == g_backendFramebufferObjects.end()) { if (backendFBOIt == g_backendFramebufferObjects.end()) {
@@ -236,13 +242,13 @@ namespace MobileGL::MG_Backend::DirectGLES {
PrgramImpl::SyncCurrentProgram(); PrgramImpl::SyncCurrentProgram();
auto currentFBO = MG_State::pGLContext->GetFramebufferBindingSlot(FramebufferTarget::Draw).GetBoundObject(); auto currentFBO = MG_State::pGLContext->GetFramebufferBindingSlot(FramebufferTarget::Draw).GetBoundObject();
if (currentFBO) { if (currentFBO && currentFBO != MG_Impl::GLImpl::FramebufferImpl::pDefaultFramebufferInfo->defaultFBO) {
auto backendFBOIt = FramebufferImpl::g_backendFramebufferObjects.find(currentFBO); auto backendFBOIt = FramebufferImpl::g_backendFramebufferObjects.find(currentFBO);
if (backendFBOIt != FramebufferImpl::g_backendFramebufferObjects.end()) { if (backendFBOIt != FramebufferImpl::g_backendFramebufferObjects.end()) {
backendFBOIt->second->Bind(); backendFBOIt->second->Bind();
} }
} else { } else {
MG_External::GLES::glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); MG_External::GLES::glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
auto currentVAO = MG_State::pGLContext->GetBoundVertexArray(); auto currentVAO = MG_State::pGLContext->GetBoundVertexArray();