diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.cpp b/MobileGL/MG_Backend/DirectGLES/Managers.cpp index 5a440f8c..e12a6b69 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.cpp +++ b/MobileGL/MG_Backend/DirectGLES/Managers.cpp @@ -283,15 +283,19 @@ namespace MobileGL::MG_Backend::DirectGLES { } } - const auto& indexBufferBinding = stateVAOObject->GetIndexBufferBindingSlot().GetBoundObject(); - if (indexBufferBinding) { - const auto& backendBufferIt = BufferImpl::g_backendBufferObjects.find(indexBufferBinding); - if (backendBufferIt != BufferImpl::g_backendBufferObjects.end()) { - const auto& backendBufferObject = backendBufferIt->second; - backendBufferObject->Bind(GL_ELEMENT_ARRAY_BUFFER); - } else { - MGLOG_W("No backend buffer found for index buffer binding, cannot bind index buffer."); + Uint16 currentIndexBufferVersion = stateVAOObject->GetIndexBufferBindingSlot().GetVersion(); + if (currentIndexBufferVersion != m_syncedIndexBufferVersion) { + const auto& indexBufferBinding = stateVAOObject->GetIndexBufferBindingSlot().GetBoundObject(); + if (indexBufferBinding) { + const auto& backendBufferIt = BufferImpl::g_backendBufferObjects.find(indexBufferBinding); + if (backendBufferIt != BufferImpl::g_backendBufferObjects.end()) { + const auto& backendBufferObject = backendBufferIt->second; + backendBufferObject->Bind(GL_ELEMENT_ARRAY_BUFFER); + } else { + MGLOG_W("No backend buffer found for index buffer binding, cannot bind index buffer."); + } } + m_syncedIndexBufferVersion = currentIndexBufferVersion; } m_syncedAttributeVersions = allAttributeVersions; diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.h b/MobileGL/MG_Backend/DirectGLES/Managers.h index f85381af..955d64b6 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.h +++ b/MobileGL/MG_Backend/DirectGLES/Managers.h @@ -53,6 +53,7 @@ namespace MobileGL::MG_Backend::DirectGLES { Uint m_backendVAOId = 0; Bool m_isInitialized = false; + Uint16 m_syncedIndexBufferVersion = 0; Array m_syncedAttributeVersions; };