diff --git a/src/ifs/wl_buffer.rs b/src/ifs/wl_buffer.rs index e38dffb5..83e8af45 100644 --- a/src/ifs/wl_buffer.rs +++ b/src/ifs/wl_buffer.rs @@ -149,8 +149,15 @@ impl WlBuffer { if self.render_ctx_version.replace(ctx_version) == ctx_version { return; } - self.texture.set(None); + let had_texture = self.texture.set(None).is_some(); self.famebuffer.set(None); + self.reset_storage_after_gfx_context_change(); + if had_texture { + self.update_texture_or_log(); + } + } + + fn reset_storage_after_gfx_context_change(&self) { let mut storage = self.storage.borrow_mut(); if let Some(storage) = &mut *storage { if let WlBufferStorage::Shm { .. } = storage { @@ -167,7 +174,7 @@ impl WlBuffer { Ok(image) => image, Err(e) => { log::error!( - "Cannot re-import wl_buffer after graphics context reset: {}", + "Cannot re-import wl_buffer after graphics context change: {}", ErrorFmt(e) ); return; @@ -177,7 +184,13 @@ impl WlBuffer { } } - pub fn update_texture(&self) -> Result<(), WlBufferError> { + pub fn update_texture_or_log(&self) { + if let Err(e) = self.update_texture() { + log::warn!("Could not update texture: {}", ErrorFmt(e)); + } + } + + fn update_texture(&self) -> Result<(), WlBufferError> { let storage = self.storage.borrow_mut(); let storage = match storage.deref() { Some(s) => s, diff --git a/src/ifs/wl_surface.rs b/src/ifs/wl_surface.rs index 3488d6ef..d1a76069 100644 --- a/src/ifs/wl_surface.rs +++ b/src/ifs/wl_surface.rs @@ -766,7 +766,7 @@ impl WlSurface { } } if let Some(buffer) = buffer_change { - let _ = buffer.update_texture(); + buffer.update_texture_or_log(); self.buffer.set(Some(buffer)); self.buf_x.fetch_add(dx); self.buf_y.fetch_add(dy);