diff --git a/wgpu-hal/src/gles/device.rs b/wgpu-hal/src/gles/device.rs index f0c630d59f2..e498baaf9ae 100644 --- a/wgpu-hal/src/gles/device.rs +++ b/wgpu-hal/src/gles/device.rs @@ -450,12 +450,6 @@ impl crate::Device for super::Device { let gl = &self.shared.context.lock(); - let target = if desc.usage.contains(crate::BufferUses::INDEX) { - glow::ELEMENT_ARRAY_BUFFER - } else { - glow::ARRAY_BUFFER - }; - let is_host_visible = desc .usage .intersects(crate::BufferUses::MAP_READ | crate::BufferUses::MAP_WRITE); @@ -499,7 +493,10 @@ impl crate::Device for super::Device { glow::DYNAMIC_DRAW } } else { - glow::STATIC_DRAW + // Even if the usage doesn't contain SRC_READ, we update it internally at least once + // Some vendors take usage very literally and STATIC_DRAW will freeze us with an empty buffer + // https://github.com/gfx-rs/wgpu/issues/3371 + glow::DYNAMIC_DRAW }; unsafe { gl.buffer_data_size(target, raw_size, usage) }; }