render: re-initialize buffer textures on gfx context change
This commit is contained in:
parent
777fb010ca
commit
db9c382002
2 changed files with 17 additions and 4 deletions
|
|
@ -149,8 +149,15 @@ impl WlBuffer {
|
||||||
if self.render_ctx_version.replace(ctx_version) == ctx_version {
|
if self.render_ctx_version.replace(ctx_version) == ctx_version {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.texture.set(None);
|
let had_texture = self.texture.set(None).is_some();
|
||||||
self.famebuffer.set(None);
|
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();
|
let mut storage = self.storage.borrow_mut();
|
||||||
if let Some(storage) = &mut *storage {
|
if let Some(storage) = &mut *storage {
|
||||||
if let WlBufferStorage::Shm { .. } = storage {
|
if let WlBufferStorage::Shm { .. } = storage {
|
||||||
|
|
@ -167,7 +174,7 @@ impl WlBuffer {
|
||||||
Ok(image) => image,
|
Ok(image) => image,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!(
|
log::error!(
|
||||||
"Cannot re-import wl_buffer after graphics context reset: {}",
|
"Cannot re-import wl_buffer after graphics context change: {}",
|
||||||
ErrorFmt(e)
|
ErrorFmt(e)
|
||||||
);
|
);
|
||||||
return;
|
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 = self.storage.borrow_mut();
|
||||||
let storage = match storage.deref() {
|
let storage = match storage.deref() {
|
||||||
Some(s) => s,
|
Some(s) => s,
|
||||||
|
|
|
||||||
|
|
@ -766,7 +766,7 @@ impl WlSurface {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(buffer) = buffer_change {
|
if let Some(buffer) = buffer_change {
|
||||||
let _ = buffer.update_texture();
|
buffer.update_texture_or_log();
|
||||||
self.buffer.set(Some(buffer));
|
self.buffer.set(Some(buffer));
|
||||||
self.buf_x.fetch_add(dx);
|
self.buf_x.fetch_add(dx);
|
||||||
self.buf_y.fetch_add(dy);
|
self.buf_y.fetch_add(dy);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue