@@ -41,9 +41,8 @@ use pathfinder_gpu::resources::ResourceLoader;
41
41
use pathfinder_renderer:: builder:: RenderOptions ;
42
42
use pathfinder_renderer:: builder:: RenderTransform ;
43
43
use pathfinder_renderer:: builder:: SceneBuilder ;
44
- use pathfinder_renderer:: builder:: SceneBuilderContext ;
45
44
use pathfinder_renderer:: gpu:: renderer:: Renderer ;
46
- use pathfinder_renderer:: gpu_data :: BuiltScene ;
45
+ use pathfinder_renderer:: gpu :: renderer :: DestFramebuffer ;
47
46
use pathfinder_simd:: default:: F32x4 ;
48
47
use pathfinder_svg:: BuiltSVG ;
49
48
@@ -52,7 +51,6 @@ use std::ffi::CStr;
52
51
use std:: ffi:: CString ;
53
52
use std:: os:: raw:: c_char;
54
53
use std:: os:: raw:: c_void;
55
- use std:: sync:: mpsc;
56
54
57
55
use usvg:: Options as UsvgOptions ;
58
56
use usvg:: Tree ;
@@ -64,8 +62,8 @@ mod magicleap;
64
62
mod mocked_c_api;
65
63
66
64
struct ImmersiveApp {
67
- sender : mpsc :: Sender < Event > ,
68
- receiver : mpsc :: Receiver < Event > ,
65
+ sender : crossbeam_channel :: Sender < Event > ,
66
+ receiver : crossbeam_channel :: Receiver < Event > ,
69
67
demo : DemoApp < MagicLeapWindow > ,
70
68
}
71
69
@@ -94,7 +92,7 @@ pub extern "C" fn magicleap_pathfinder_demo_init(egl_display: EGLDisplay, egl_co
94
92
let demo = DemoApp :: new ( window, window_size, options) ;
95
93
info ! ( "Initialized app" ) ;
96
94
97
- let ( sender, receiver) = mpsc :: channel ( ) ;
95
+ let ( sender, receiver) = crossbeam_channel :: unbounded ( ) ;
98
96
Box :: into_raw ( Box :: new ( ImmersiveApp { sender, receiver, demo } ) ) as * mut c_void
99
97
}
100
98
@@ -133,7 +131,6 @@ struct MagicLeapPathfinder {
133
131
renderers : HashMap < ( EGLSurface , EGLDisplay ) , Renderer < GLDevice > > ,
134
132
svgs : HashMap < String , BuiltSVG > ,
135
133
resources : FilesystemResourceLoader ,
136
- scene_builder_context : SceneBuilderContext ,
137
134
}
138
135
139
136
#[ repr( C ) ]
@@ -165,7 +162,6 @@ pub extern "C" fn magicleap_pathfinder_init() -> *mut c_void {
165
162
renderers : HashMap :: new ( ) ,
166
163
svgs : HashMap :: new ( ) ,
167
164
resources : FilesystemResourceLoader :: locate ( ) ,
168
- scene_builder_context : SceneBuilderContext :: new ( ) ,
169
165
} ;
170
166
info ! ( "Initialized pf" ) ;
171
167
@@ -187,26 +183,28 @@ pub unsafe extern "C" fn magicleap_pathfinder_render(pf: *mut c_void, options: *
187
183
} ) ;
188
184
189
185
let mut width = 0 ;
190
- let mut height = 0 ;
186
+ let mut height = 0 ;
191
187
egl:: query_surface ( options. display , options. surface , egl:: EGL_WIDTH , & mut width) ;
192
188
egl:: query_surface ( options. display , options. surface , egl:: EGL_HEIGHT , & mut height) ;
193
189
let size = Point2DI32 :: new ( width, height) ;
194
190
195
191
let viewport_origin = Point2DI32 :: new ( options. viewport [ 0 ] as i32 , options. viewport [ 1 ] as i32 ) ;
196
192
let viewport_size = Point2DI32 :: new ( options. viewport [ 2 ] as i32 , options. viewport [ 3 ] as i32 ) ;
197
193
let viewport = RectI32 :: new ( viewport_origin, viewport_size) ;
194
+ let dest_framebuffer = DestFramebuffer :: Default { viewport, window_size : size } ;
198
195
199
196
let bg_color = F32x4 :: new ( options. bg_color [ 0 ] , options. bg_color [ 1 ] , options. bg_color [ 2 ] , options. bg_color [ 3 ] ) ;
200
197
201
198
let renderer = pf. renderers . entry ( ( options. display , options. surface ) ) . or_insert_with ( || {
202
- let mut fbo = 0 ;
203
- gl:: GetIntegerv ( gl:: DRAW_FRAMEBUFFER_BINDING , & mut fbo) ;
199
+ let mut fbo = 0 ;
200
+ gl:: GetIntegerv ( gl:: DRAW_FRAMEBUFFER_BINDING , & mut fbo) ;
204
201
let device = GLDevice :: new ( GLVersion :: GLES3 , fbo as GLuint ) ;
205
- Renderer :: new ( device, resources, viewport, size)
202
+ let dest_framebuffer = DestFramebuffer :: Default { viewport, window_size : size } ;
203
+ Renderer :: new ( device, resources, dest_framebuffer)
206
204
} ) ;
207
205
208
206
renderer. set_main_framebuffer_size ( size) ;
209
- renderer. set_viewport ( viewport ) ;
207
+ renderer. set_dest_framebuffer ( dest_framebuffer ) ;
210
208
renderer. device . bind_default_framebuffer ( viewport) ;
211
209
renderer. device . clear ( Some ( bg_color) , Some ( 1.0 ) , Some ( 0 ) ) ;
212
210
renderer. disable_depth ( ) ;
@@ -227,20 +225,16 @@ pub unsafe extern "C" fn magicleap_pathfinder_render(pf: *mut c_void, options: *
227
225
} ;
228
226
229
227
let built_options = render_options. prepare ( svg. scene . bounds ) ;
230
- let quad = built_options. quad ( ) ;
231
228
232
- let mut built_scene = BuiltScene :: new ( svg. scene . view_box , & quad, svg. scene . objects . len ( ) as u32 ) ;
233
- built_scene. shaders = svg. scene . build_shaders ( ) ;
234
-
235
- let ( command_sender, command_receiver) = mpsc:: channel ( ) ;
229
+ let ( command_sender, command_receiver) = crossbeam_channel:: unbounded ( ) ;
236
230
let command_sender_clone = command_sender. clone ( ) ;
237
231
238
- SceneBuilder :: new ( & pf . scene_builder_context , & svg. scene , & built_options)
239
- . build_sequentially ( Box :: new ( move |command| { let _ = command_sender . send ( Some ( command ) ) ; } ) ) ;
232
+ SceneBuilder :: new ( & svg. scene , & built_options, Box :: new ( move |command| { let _ = command_sender . send ( Some ( command ) ) ; } ) )
233
+ . build_sequentially ( ) ;
240
234
241
235
let _ = command_sender_clone. send ( None ) ;
242
236
243
- renderer. begin_scene ( & built_scene ) ;
237
+ renderer. begin_scene ( & svg . scene . build_descriptor ( & built_options ) ) ;
244
238
while let Ok ( Some ( command) ) = command_receiver. recv ( ) {
245
239
renderer. render_command ( & command) ;
246
240
}
0 commit comments