11use crate :: window:: Window ;
22
33use crate :: wrapper:: { Color , WgpuContext , WgpuExecutor } ;
4+ use wgpu_executor:: TargetTexture ;
45
56#[ derive( derivative:: Derivative ) ]
67#[ derivative( Debug ) ]
@@ -18,6 +19,7 @@ pub(crate) struct RenderState {
1819 viewport_offset : [ f32 ; 2 ] ,
1920 viewport_texture : Option < wgpu:: Texture > ,
2021 overlays_texture : Option < wgpu:: Texture > ,
22+ overlays_target_texture : Option < TargetTexture > ,
2123 ui_texture : Option < wgpu:: Texture > ,
2224 bind_group : Option < wgpu:: BindGroup > ,
2325 #[ derivative( Debug = "ignore" ) ]
@@ -182,6 +184,7 @@ impl RenderState {
182184 viewport_offset : [ 0.0 , 0.0 ] ,
183185 viewport_texture : None ,
184186 overlays_texture : None ,
187+ overlays_target_texture : None ,
185188 ui_texture : None ,
186189 bind_group : None ,
187190 overlays_scene : None ,
@@ -236,12 +239,20 @@ impl RenderState {
236239 return ;
237240 } ;
238241 let size = glam:: UVec2 :: new ( viewport_texture. width ( ) , viewport_texture. height ( ) ) ;
239- let texture = futures:: executor:: block_on ( self . executor . render_vello_scene_to_texture ( & scene, size, & Default :: default ( ) , Color :: TRANSPARENT ) ) ;
240- let Ok ( texture) = texture else {
241- tracing:: error!( "Error rendering overlays" ) ;
242+ let result = futures:: executor:: block_on (
243+ self . executor . render_vello_scene_to_target_texture ( & scene, size, & Default :: default ( ) , Color :: TRANSPARENT , & mut self . overlays_target_texture )
244+ ) ;
245+ if let Err ( e) = result {
246+ tracing:: error!( "Error rendering overlays: {:?}" , e) ;
242247 return ;
243- } ;
244- self . bind_overlays_texture ( texture) ;
248+ }
249+ // Extract the texture from the cached TargetTexture
250+ if let Some ( target_texture) = & self . overlays_target_texture {
251+ // Create a new texture reference - the actual GPU texture is reused
252+ let texture_view = target_texture. texture . create_view ( & wgpu:: TextureViewDescriptor :: default ( ) ) ;
253+ self . overlays_texture = Some ( target_texture. texture . clone ( ) ) ;
254+ self . update_bindgroup ( ) ;
255+ }
245256 }
246257
247258 pub ( crate ) fn render ( & mut self , window : & Window ) -> Result < ( ) , RenderError > {
0 commit comments