diff options
Diffstat (limited to 'src/gpu.rs')
| -rw-r--r-- | src/gpu.rs | 47 |
1 files changed, 34 insertions, 13 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; + } } } |
