1
0
Fork 0
forked from wry/wry

render: re-initialize buffer textures on gfx context change

This commit is contained in:
Julian Orth 2024-02-03 22:40:25 +01:00
parent 777fb010ca
commit db9c382002
2 changed files with 17 additions and 4 deletions

View file

@ -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,