summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2026-04-25 17:17:26 +0000
committers-ol <s+removethis@s-ol.nu>2026-05-14 14:46:13 +0000
commit3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893 (patch)
tree113748809809bb6aec6cbd13cd9e8dbd5934663d /src
parentresource pools (diff)
downloadwgsl-view-3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893.tar.gz
wgsl-view-3eefabea6dbc242f0e499ce8dfb9b97ffcbe4893.zip
rebind outdated textures
Diffstat (limited to 'src')
-rw-r--r--src/gpu.rs47
-rw-r--r--src/uniform.rs10
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<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
}