From dfb08ac8b0f1591d4956bb5846f52dcbd7546d83 Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Sat, 1 Nov 2025 13:39:01 +0800 Subject: [PATCH] [Fix] (MG_Backend/DirectGLES): Ensure other methods for buffer syncing available. --- MobileGL/MG_Backend/DirectGLES/Managers.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.cpp b/MobileGL/MG_Backend/DirectGLES/Managers.cpp index 4f6fc0aa..337e5e1e 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.cpp +++ b/MobileGL/MG_Backend/DirectGLES/Managers.cpp @@ -42,13 +42,14 @@ namespace MobileGL::MG_Backend::DirectGLES { stateBufferObject.get()); Bool needsRegeneration = - !m_isInitialized || bufferSize > m_prevBufferSize || bufferSize > m_prevBufferSize * 2; + !m_isInitialized || bufferSize > m_prevBufferSize || bufferSize < m_prevBufferSize / 2; if (needsRegeneration) { MGLOG_D("Buffer size changed significantly or not initialized, regenerating buffer with ID: %u", m_backendBufferId); SyncToBackend_glBufferData(stateBufferObject); m_isInitialized = true; + m_prevBufferSize = bufferSize; return; } @@ -107,9 +108,9 @@ namespace MobileGL::MG_Backend::DirectGLES { MGLOG_D("Mapping buffer with ID: %u", m_backendBufferId); MG_External::GLES::glBindBuffer(TempBufferTarget, m_backendBufferId); const auto& range = stateBufferObject->GetDirtyRange(); - void* mappedData = MG_External::GLES::glMapBufferRange( - TempBufferTarget, range.start, range.end - range.start, - (invalidate ? GL_MAP_INVALIDATE_BUFFER_BIT : 0) | GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); + void* mappedData = + MG_External::GLES::glMapBufferRange(TempBufferTarget, range.start, range.end - range.start, + (invalidate ? GL_MAP_INVALIDATE_BUFFER_BIT : 0) | GL_MAP_WRITE_BIT); const void* data = stateBufferObject->GetDataReadOnly()->data(); if (mappedData) { Memcpy(mappedData, ((const char*)(data) + range.start), range.end - range.start);