offer GLBuffer Upload
inline fun offerGLBufferUpload(key: Any, newVersion: Int, noinline onUploaded: () -> Unit? = null, arrayBuilder: () -> NumericArray)
Queue a buffer upload when the cached BufferObject's version trails newVersion. onUploaded fires exactly once — async after the GL write, or sync here when no upload was queued. Pass nothing to skip; noinline is allocation-free at null.