From 3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893 Mon Sep 17 00:00:00 2001 From: s-ol Date: Sat, 25 Apr 2026 19:17:26 +0200 Subject: rebind outdated textures --- src/gpu.rs | 47 ++++++++++++++++++++++++++++++++++------------- src/uniform.rs | 10 +--------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/gpu.rs b/src/gpu.rs index ab15356..88c37da 100644 --- a/src/gpu.rs +++ b/src/gpu.rs @@ -191,13 +191,19 @@ pub fn refresh_textures( None => continue, }; - if !texture.tsv_registered() { - if let Err(e) = client.find_image(&tsv_name, true) { - log::debug!("tsv find '{tsv_name}': {e}"); + match ( + texture.tsv_registered, + client.find_image(&tsv_name, !texture.tsv_registered), + ) { + (_, Err(e)) => { + log::error!("tsv find '{tsv_name}': {e}"); continue; } - - match client.find_image_data(&tsv_name, true) { + (_, Ok(None)) => { + log::warn!("tsv find '{tsv_name}': not found"); + continue; + } + (false, _) | (_, Ok(Some(true))) => match client.find_image_data(&tsv_name, true) { Ok(Some((_lock, data))) => { let format = img_format_to_wgpu(data.format); let view_dimension = @@ -212,12 +218,21 @@ pub fn refresh_textures( ) { needs_rebind = true; } + texture.tsv_registered = true; } - _ => continue, - } - - texture.set_tsv_registered(); - } + Ok(None) => { + log::warn!("recv_image '{tsv_name}': disappeared, re-registering"); + texture.tsv_registered = false; + continue; + } + Err(e) => { + log::warn!("recv_image '{tsv_name}': {e}, re-registering"); + texture.tsv_registered = false; + continue; + } + }, + _ => {} + }; let raw = unsafe { raw_image(texture.texture()) }; match client.recv_image( @@ -227,9 +242,15 @@ pub fn refresh_textures( vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL, fence, ) { - Ok(Some(())) => log::trace!("texture '{}' updated from '{tsv_name}'", texture.id()), - Ok(None) => {} - Err(e) => log::warn!("recv_image '{tsv_name}': {e}"), + Ok(Some(())) => {} + Ok(None) => { + log::warn!("recv_image '{tsv_name}': disappeared, re-registering"); + texture.tsv_registered = false; + } + Err(e) => { + log::warn!("recv_image '{tsv_name}': {e}, re-registering"); + texture.tsv_registered = false; + } } } diff --git a/src/uniform.rs b/src/uniform.rs index 142c70c..fefd67f 100644 --- a/src/uniform.rs +++ b/src/uniform.rs @@ -401,7 +401,7 @@ pub fn types_compatible( pub struct TextureResource { id: String, tsv_name: Option, - tsv_registered: bool, + pub tsv_registered: bool, texture: wgpu::Texture, view: wgpu::TextureView, format: wgpu::TextureFormat, @@ -447,14 +447,6 @@ impl TextureResource { } } - pub fn tsv_registered(&self) -> bool { - self.tsv_registered - } - - pub fn set_tsv_registered(&mut self) { - self.tsv_registered = true; - } - pub fn texture(&self) -> &wgpu::Texture { &self.texture } -- cgit v1.2.3