gfx-rs/wgpu · error
Buffer range invalid for GLES
Error message
Buffer range invalid for GLES
What it means
Panic in the GLES map_buffer: the requested mapping range is invalid under GL constraints (e.g. non-zero offset or size mismatch not representable by glMapBufferRange), so the mapping cannot proceed. The faulty input is the buffer range passed to map.
Source
Thrown at wgpu-hal/src/gles/device.rs:871
slice.as_mut_ptr()
}
Some(raw) => {
let gl = &self.shared.context.lock();
unsafe { gl.bind_buffer(buffer.target, Some(raw)) };
let mut map_state = buffer.map_state.lock();
let ptr = if let Some(map_read_allocation) = map_state.data.as_mut() {
let slice = map_read_allocation.as_mut_slice();
unsafe { self.shared.get_buffer_sub_data(gl, buffer.target, 0, slice) };
slice.as_mut_ptr()
} else {
map_state.offset_of_current_mapping = range.start;
// glMapBufferRange throws an error if length is 0.
// We want to allow mapping 0-sized buffer slices, so perform a workaround
// if the range length is 0. The resulting pointer must never be dereferenced.
let range_start: i32 = range
.start
.try_into()
.expect("Buffer range invalid for GLES");
let range_length: i32 = (range.end - range.start)
.try_into()
.expect("Buffer range invalid for GLES");
if range_length != 0 {
map_state.mapped = true;
unsafe {
gl.map_buffer_range(
buffer.target,
range_start,
range_length,
buffer.map_flags,
)
}
} else {
ptr::dangling_mut()
}
};
unsafe { gl.bind_buffer(buffer.target, None) };View on GitHub (pinned to 3e11ff59bf)
Solutions
- Map the whole buffer on GLES (offset 0, full size) by allocating dedicated staging buffers
- Avoid sub-range mapping with exotic offsets on the GL backend
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at wgpu-hal/src/gles/device.rs:871 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of gfx-rs/wgpu@3e11ff59bf (2026-09-03).
Data as JSON: /api/errors/f5cb2399fdb34360.
Report an issue: GitHub.