map And Copy Buffer Range
Upload length bytes from source (starting at srcOffset) into the buffer object currently bound to target, at byte offset within the buffer. Implemented via glMapBufferRange(... access) + memcpy + glUnmapBuffer where supported (JVM / Android with GLES3+); falls back to bufferSubData on JS / older runtimes.
The mapping path lets the driver hand back fresh-mapped staging memory directly when the previous transfer is still in flight (no implicit synchronization), saving a driver round-trip vs. the bufferData(null) + bufferData(data) orphan idiom.
Caller passes the access mask explicitly so the same primitive can be used for "rename the whole buffer" (WRITE | INVALIDATE_BUFFER | UNSYNCHRONIZED) and "patch a sub-range" (WRITE | INVALIDATE_RANGE) patterns.