diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.cpp b/MobileGL/MG_Backend/DirectGLES/Managers.cpp index f1cfd87e..07e3bb86 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.cpp +++ b/MobileGL/MG_Backend/DirectGLES/Managers.cpp @@ -174,10 +174,20 @@ namespace MobileGL::MG_Backend::DirectGLES { } } + SharedPtr BackendBufferObject::GetSharedPtr() { + return shared_from_this(); + } + void BackendBufferObject::Bind() { #ifdef TRACY_ENABLE ZoneScopedC(TRACY_ZONECOLOR_BACKEND); #endif + if (TempBufferTarget == GL_ARRAY_BUFFER) { + if (g_boundVertexBufferObject.get() == this) { + return; + } + g_boundVertexBufferObject = GetSharedPtr(); + } MG_External::GLES::glBindBuffer(TempBufferTarget, m_backendBufferId); } @@ -185,10 +195,17 @@ namespace MobileGL::MG_Backend::DirectGLES { #ifdef TRACY_ENABLE ZoneScopedC(TRACY_ZONECOLOR_BACKEND); #endif + if (target == GL_ARRAY_BUFFER) { + if (g_boundVertexBufferObject.get() == this) { + return; + } + g_boundVertexBufferObject = GetSharedPtr(); + } MG_External::GLES::glBindBuffer(target, m_backendBufferId); } UnorderedMap, SharedPtr> g_backendBufferObjects; + SharedPtr g_boundVertexBufferObject; } // namespace BufferImpl namespace VertexArrayImpl { diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.h b/MobileGL/MG_Backend/DirectGLES/Managers.h index 955d64b6..bb7b25d3 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.h +++ b/MobileGL/MG_Backend/DirectGLES/Managers.h @@ -17,13 +17,14 @@ namespace MobileGL::MG_Backend::DirectGLES { namespace BufferImpl { - class BackendBufferObject { + class BackendBufferObject : public std::enable_shared_from_this { public: BackendBufferObject(); void SyncToBackend(SharedPtr& stateBufferObject); Uint GetBackendBufferId() { return m_backendBufferId; } void Bind(); void Bind(GLenum target); + SharedPtr GetSharedPtr(); private: void SyncToBackend_glBufferData(SharedPtr& stateBufferObject); @@ -36,6 +37,7 @@ namespace MobileGL::MG_Backend::DirectGLES { Bool m_isInitialized = false; }; + extern SharedPtr g_boundVertexBufferObject; extern UnorderedMap, SharedPtr> g_backendBufferObjects; } // namespace BufferImpl