@@ -5,7 +5,8 @@ use winit::window::Window;
55
66pub ( crate ) use wgpu_executor:: Context as WgpuContext ;
77
8- #[ derive( Debug ) ]
8+ #[ derive( derivative:: Derivative ) ]
9+ #[ derivative( Debug ) ]
910pub ( crate ) struct GraphicsState {
1011 surface : wgpu:: Surface < ' static > ,
1112 context : WgpuContext ,
@@ -20,6 +21,8 @@ pub(crate) struct GraphicsState {
2021 overlays_texture : Option < wgpu:: Texture > ,
2122 ui_texture : Option < wgpu:: Texture > ,
2223 bind_group : Option < wgpu:: BindGroup > ,
24+ #[ derivative( Debug = "ignore" ) ]
25+ overlays_scene : Option < vello:: Scene > ,
2326}
2427
2528impl GraphicsState {
@@ -178,6 +181,7 @@ impl GraphicsState {
178181 overlays_texture : None ,
179182 ui_texture : None ,
180183 bind_group : None ,
184+ overlays_scene : None ,
181185 }
182186 }
183187
@@ -212,13 +216,17 @@ impl GraphicsState {
212216 self . viewport_offset = offset;
213217 }
214218
215- pub ( crate ) fn render_overlays ( & mut self , scene : & vello:: Scene ) {
219+ pub ( crate ) fn set_overlays_scene ( & mut self , scene : vello:: Scene ) {
220+ self . overlays_scene = Some ( scene) ;
221+ }
222+
223+ fn render_overlays ( & mut self , scene : vello:: Scene ) {
216224 let Some ( viewport_texture) = self . viewport_texture . as_ref ( ) else {
217225 tracing:: warn!( "No viewport texture bound, cannot render overlays" ) ;
218226 return ;
219227 } ;
220228 let size = glam:: UVec2 :: new ( viewport_texture. width ( ) , viewport_texture. height ( ) ) ;
221- let texture = futures:: executor:: block_on ( self . executor . render_vello_scene_to_texture ( scene, size, & Default :: default ( ) , Color :: TRANSPARENT ) ) ;
229+ let texture = futures:: executor:: block_on ( self . executor . render_vello_scene_to_texture ( & scene, size, & Default :: default ( ) , Color :: TRANSPARENT ) ) ;
222230 let Ok ( texture) = texture else {
223231 tracing:: error!( "Error rendering overlays" ) ;
224232 return ;
@@ -227,6 +235,10 @@ impl GraphicsState {
227235 }
228236
229237 pub ( crate ) fn render ( & mut self ) -> Result < ( ) , wgpu:: SurfaceError > {
238+ if let Some ( scene) = self . overlays_scene . take ( ) {
239+ self . render_overlays ( scene) ;
240+ }
241+
230242 let output = self . surface . get_current_texture ( ) ?;
231243 let view = output. texture . create_view ( & wgpu:: TextureViewDescriptor :: default ( ) ) ;
232244
0 commit comments