diff --git a/gpu/gl/backend.go b/gpu/gl/backend.go index 28dd2a80..04d915ab 100644 --- a/gpu/gl/backend.go +++ b/gpu/gl/backend.go @@ -676,6 +676,12 @@ func (b *gpuBuffer) Upload(data []byte) { if b.hasBuffer { firstBinding := firstBufferType(b.typ) b.backend.funcs.BindBuffer(firstBinding, b.obj) + if len(data) == b.size { + // the iOS GL implementation doesn't recognize when BufferSubData + // clears the entire buffer. Tell it and avoid GPU stalls. + // See also https://github.com/godotengine/godot/issues/23956. + b.backend.funcs.BufferData(firstBinding, b.size, glimpl.DYNAMIC_DRAW) + } b.backend.funcs.BufferSubData(firstBinding, 0, data) } }