diff --git a/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp b/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp index 7f11e8cc..e9f0136a 100644 --- a/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp +++ b/MobileGL/MG_Impl/GLImpl/Buffer/GL_Buffer.cpp @@ -330,12 +330,21 @@ namespace MobileGL::MG_Impl::GLImpl { } else if (access & BufferMappingAccessBit::Write) { *params = GL_WRITE_ONLY; } else { - *params = 0; + *params = GL_READ_WRITE; } } else { - *params = 0; + // Initial value, and what glUnmapBuffer restores (GL 4.6 core table 6.2). + *params = GL_READ_WRITE; } break; + case GL_BUFFER_ACCESS_FLAGS: + // The MapBufferRange flags verbatim; glMapBuffer's access enum has already been + // normalised into the same bits. Zero while the buffer is not mapped. + *params = bufferObject->IsMapped() + ? static_cast( + MG_Util::ConvertBufferMappingAccessToGLEnum(bufferObject->GetMappingAccess())) + : 0; + break; case GL_BUFFER_MAPPED: *params = bufferObject->IsMapped() ? GL_TRUE : GL_FALSE; break; diff --git a/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp b/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp index 853cd179..3458df5f 100644 --- a/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp +++ b/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp @@ -1030,6 +1030,11 @@ namespace MobileGL::MG_Impl::GLImpl { *params = obj ? static_cast(obj->GetExternalIndex()) : 0; return; } + case GL_DRAW_INDIRECT_BUFFER_BINDING: { + auto& obj = MG_State::pGLContext->GetBufferBindingSlot(BufferTarget::DrawIndirect).GetBoundObject(); + *params = obj ? static_cast(obj->GetExternalIndex()) : 0; + return; + } case GL_MAX_DEBUG_GROUP_STACK_DEPTH: *params = 0; // debug-group entrypoints are stubbed return; diff --git a/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp index 14c87c88..5ae52213 100644 --- a/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp +++ b/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp @@ -73,7 +73,7 @@ namespace MobileGL { } } - GLbitfield ConvertBufferMappingAccessToGLEnum(BufferMappingAccessBit access) { + GLbitfield ConvertBufferMappingAccessToGLEnum(Flags access) { GLbitfield result = 0; if (access & BufferMappingAccessBit::Read) result |= GL_MAP_READ_BIT; if (access & BufferMappingAccessBit::Write) result |= GL_MAP_WRITE_BIT; diff --git a/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.h b/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.h index 2f72282b..0fbb406a 100644 --- a/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.h +++ b/MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.h @@ -14,6 +14,6 @@ namespace MobileGL { namespace MG_Util { GLenum ConvertBufferTargetToGLEnum(BufferTarget bufferTarget); GLenum ConvertBufferUsageToGLEnum(BufferUsage usage); - GLbitfield ConvertBufferMappingAccessToGLEnum(BufferMappingAccessBit access); + GLbitfield ConvertBufferMappingAccessToGLEnum(Flags access); } // namespace MG_Util } // namespace MobileGL \ No newline at end of file