[Fix] (MG_Backend/DirectGLES): Ensure other methods for buffer syncing available.

This commit is contained in:
BZLZHH
2025-11-01 13:39:01 +08:00
parent e8d6cd4b31
commit dfb08ac8b0
+5 -4
View File
@@ -42,13 +42,14 @@ namespace MobileGL::MG_Backend::DirectGLES {
stateBufferObject.get()); stateBufferObject.get());
Bool needsRegeneration = Bool needsRegeneration =
!m_isInitialized || bufferSize > m_prevBufferSize || bufferSize > m_prevBufferSize * 2; !m_isInitialized || bufferSize > m_prevBufferSize || bufferSize < m_prevBufferSize / 2;
if (needsRegeneration) { if (needsRegeneration) {
MGLOG_D("Buffer size changed significantly or not initialized, regenerating buffer with ID: %u", MGLOG_D("Buffer size changed significantly or not initialized, regenerating buffer with ID: %u",
m_backendBufferId); m_backendBufferId);
SyncToBackend_glBufferData(stateBufferObject); SyncToBackend_glBufferData(stateBufferObject);
m_isInitialized = true; m_isInitialized = true;
m_prevBufferSize = bufferSize;
return; return;
} }
@@ -107,9 +108,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
MGLOG_D("Mapping buffer with ID: %u", m_backendBufferId); MGLOG_D("Mapping buffer with ID: %u", m_backendBufferId);
MG_External::GLES::glBindBuffer(TempBufferTarget, m_backendBufferId); MG_External::GLES::glBindBuffer(TempBufferTarget, m_backendBufferId);
const auto& range = stateBufferObject->GetDirtyRange(); const auto& range = stateBufferObject->GetDirtyRange();
void* mappedData = MG_External::GLES::glMapBufferRange( void* mappedData =
TempBufferTarget, range.start, range.end - range.start, 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); (invalidate ? GL_MAP_INVALIDATE_BUFFER_BIT : 0) | GL_MAP_WRITE_BIT);
const void* data = stateBufferObject->GetDataReadOnly()->data(); const void* data = stateBufferObject->GetDataReadOnly()->data();
if (mappedData) { if (mappedData) {
Memcpy(mappedData, ((const char*)(data) + range.start), range.end - range.start); Memcpy(mappedData, ((const char*)(data) + range.start), range.end - range.start);