fwiw without any specific extension you can use HeapAlloc'ed shadow memory and memcpy between that and an arbitrary glMapBuffer mapping. That will be slow and you can't support coherent mappings and might need to hide some extension support / downgrade the GL version because of that. But it could be a fallback if other options are not available. (and there is the low chance that GL luckily gives you a low address map anyhow)