@@ -18,7 +18,7 @@ impl ImageRenderer for VelloImageRenderer {
1818 where
1919 Self : ' a ;
2020
21- fn new ( width : u32 , height : u32 ) -> Self {
21+ fn new ( width : u32 , height : u32 ) -> Result < Self , Box < dyn std :: error :: Error > > {
2222 // Create WGPUContext
2323 let mut context = WGPUContext :: new ( ) ;
2424
@@ -28,8 +28,7 @@ impl ImageRenderer for VelloImageRenderer {
2828 width,
2929 height,
3030 usage : TextureUsages :: STORAGE_BINDING ,
31- } ) )
32- . expect ( "No compatible device found" ) ;
31+ } ) ) ?;
3332
3433 // Create vello::Renderer
3534 let vello_renderer = VelloRenderer :: new (
@@ -40,14 +39,13 @@ impl ImageRenderer for VelloImageRenderer {
4039 antialiasing_support : vello:: AaSupport :: area_only ( ) ,
4140 pipeline_cache : None ,
4241 } ,
43- )
44- . expect ( "Got non-Send/Sync error from creating renderer" ) ;
42+ ) ?;
4543
46- Self {
44+ Ok ( Self {
4745 buffer_renderer,
4846 vello_renderer,
4947 scene : VelloScene :: new ( ) ,
50- }
48+ } )
5149 }
5250
5351 fn resize ( & mut self , width : u32 , height : u32 ) {
@@ -62,45 +60,43 @@ impl ImageRenderer for VelloImageRenderer {
6260 & mut self ,
6361 draw_fn : F ,
6462 cpu_buffer : & mut Vec < u8 > ,
65- ) {
63+ ) -> Result < ( ) , Box < dyn std :: error :: Error > > {
6664 let size = self . buffer_renderer . size ( ) ;
6765 cpu_buffer. clear ( ) ;
6866 cpu_buffer. reserve ( ( size. width * size. height * 4 ) as usize ) ;
69- self . render ( draw_fn, cpu_buffer) ;
67+ self . render ( draw_fn, cpu_buffer)
7068 }
7169
7270 fn render < F : FnOnce ( & mut Self :: ScenePainter < ' _ > ) > (
7371 & mut self ,
7472 draw_fn : F ,
7573 cpu_buffer : & mut [ u8 ] ,
76- ) {
74+ ) -> Result < ( ) , Box < dyn std :: error :: Error > > {
7775 draw_fn ( & mut VelloScenePainter {
7876 inner : & mut self . scene ,
7977 renderer : Some ( & mut self . vello_renderer ) ,
8078 custom_paint_sources : Some ( & mut FxHashMap :: default ( ) ) ,
8179 } ) ;
8280
8381 let size = self . buffer_renderer . size ( ) ;
84- self . vello_renderer
85- . render_to_texture (
86- self . buffer_renderer . device ( ) ,
87- self . buffer_renderer . queue ( ) ,
88- & self . scene ,
89- & self . buffer_renderer . target_texture_view ( ) ,
90- & vello:: RenderParams {
91- base_color : vello:: peniko:: Color :: TRANSPARENT ,
92- width : size. width ,
93- height : size. height ,
94- antialiasing_method : vello:: AaConfig :: Area ,
95- } ,
96- )
97- . expect ( "Got non-Send/Sync error from rendering" ) ;
82+ self . vello_renderer . render_to_texture (
83+ self . buffer_renderer . device ( ) ,
84+ self . buffer_renderer . queue ( ) ,
85+ & self . scene ,
86+ & self . buffer_renderer . target_texture_view ( ) ,
87+ & vello:: RenderParams {
88+ base_color : vello:: peniko:: Color :: TRANSPARENT ,
89+ width : size. width ,
90+ height : size. height ,
91+ antialiasing_method : vello:: AaConfig :: Area ,
92+ } ,
93+ ) ?;
9894
99- self . buffer_renderer
100- . copy_texture_to_buffer ( cpu_buffer)
101- . unwrap ( ) ;
95+ self . buffer_renderer . copy_texture_to_buffer ( cpu_buffer) ?;
10296
10397 // Empty the Vello scene (memory optimisation)
10498 self . scene . reset ( ) ;
99+
100+ Ok ( ( ) )
105101 }
106102}
0 commit comments