diff options
| author | s-ol <s+removethis@s-ol.nu> | 2026-04-25 17:17:26 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2026-05-14 14:46:13 +0000 |
| commit | 3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893 (patch) | |
| tree | 113748809809bb6aec6cbd13cd9e8dbd5934663d /src | |
| parent | resource pools (diff) | |
| download | wgsl-view-3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893.tar.gz wgsl-view-3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893.zip | |
rebind outdated textures
Diffstat (limited to 'src')
| -rw-r--r-- | src/gpu.rs | 47 | ||||
| -rw-r--r-- | src/uniform.rs | 10 |
2 files changed, 35 insertions, 22 deletions
@@ -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<String>, - 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 } |
