Skip to content

Commit 7cd05cd

Browse files
authored
Merge pull request #136 from asajeffrey/pf3-magicleap-updates
Pathfinder magicleap demo updates
2 parents 58d55c5 + 3d81bf1 commit 7cd05cd

File tree

3 files changed

+17
-21
lines changed

3 files changed

+17
-21
lines changed

demo/magicleap/.cargo/config

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
[target.aarch64-linux-android]
22
linker = "./fake-ld.sh"
33
ar = "aarch64-linux-android-ar"
4+
rustflags = "-Clinker-flavor=ld"

demo/magicleap/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ egl = "0.2"
1212
log = "0.4"
1313
smallvec = "0.6"
1414
glutin = { version = "0.19", optional = true }
15+
crossbeam-channel = "0.3"
1516

1617
[lib]
1718
crate-type = ["cdylib"]

demo/magicleap/src/lib.rs

+15-21
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ use pathfinder_gpu::resources::ResourceLoader;
4141
use pathfinder_renderer::builder::RenderOptions;
4242
use pathfinder_renderer::builder::RenderTransform;
4343
use pathfinder_renderer::builder::SceneBuilder;
44-
use pathfinder_renderer::builder::SceneBuilderContext;
4544
use pathfinder_renderer::gpu::renderer::Renderer;
46-
use pathfinder_renderer::gpu_data::BuiltScene;
45+
use pathfinder_renderer::gpu::renderer::DestFramebuffer;
4746
use pathfinder_simd::default::F32x4;
4847
use pathfinder_svg::BuiltSVG;
4948

@@ -52,7 +51,6 @@ use std::ffi::CStr;
5251
use std::ffi::CString;
5352
use std::os::raw::c_char;
5453
use std::os::raw::c_void;
55-
use std::sync::mpsc;
5654

5755
use usvg::Options as UsvgOptions;
5856
use usvg::Tree;
@@ -64,8 +62,8 @@ mod magicleap;
6462
mod mocked_c_api;
6563

6664
struct ImmersiveApp {
67-
sender: mpsc::Sender<Event>,
68-
receiver: mpsc::Receiver<Event>,
65+
sender: crossbeam_channel::Sender<Event>,
66+
receiver: crossbeam_channel::Receiver<Event>,
6967
demo: DemoApp<MagicLeapWindow>,
7068
}
7169

@@ -94,7 +92,7 @@ pub extern "C" fn magicleap_pathfinder_demo_init(egl_display: EGLDisplay, egl_co
9492
let demo = DemoApp::new(window, window_size, options);
9593
info!("Initialized app");
9694

97-
let (sender, receiver) = mpsc::channel();
95+
let (sender, receiver) = crossbeam_channel::unbounded();
9896
Box::into_raw(Box::new(ImmersiveApp { sender, receiver, demo })) as *mut c_void
9997
}
10098

@@ -133,7 +131,6 @@ struct MagicLeapPathfinder {
133131
renderers: HashMap<(EGLSurface, EGLDisplay), Renderer<GLDevice>>,
134132
svgs: HashMap<String, BuiltSVG>,
135133
resources: FilesystemResourceLoader,
136-
scene_builder_context: SceneBuilderContext,
137134
}
138135

139136
#[repr(C)]
@@ -165,7 +162,6 @@ pub extern "C" fn magicleap_pathfinder_init() -> *mut c_void {
165162
renderers: HashMap::new(),
166163
svgs: HashMap::new(),
167164
resources: FilesystemResourceLoader::locate(),
168-
scene_builder_context: SceneBuilderContext::new(),
169165
};
170166
info!("Initialized pf");
171167

@@ -187,26 +183,28 @@ pub unsafe extern "C" fn magicleap_pathfinder_render(pf: *mut c_void, options: *
187183
});
188184

189185
let mut width = 0;
190-
let mut height = 0;
186+
let mut height = 0;
191187
egl::query_surface(options.display, options.surface, egl::EGL_WIDTH, &mut width);
192188
egl::query_surface(options.display, options.surface, egl::EGL_HEIGHT, &mut height);
193189
let size = Point2DI32::new(width, height);
194190

195191
let viewport_origin = Point2DI32::new(options.viewport[0] as i32, options.viewport[1] as i32);
196192
let viewport_size = Point2DI32::new(options.viewport[2] as i32, options.viewport[3] as i32);
197193
let viewport = RectI32::new(viewport_origin, viewport_size);
194+
let dest_framebuffer = DestFramebuffer::Default { viewport, window_size: size };
198195

199196
let bg_color = F32x4::new(options.bg_color[0], options.bg_color[1], options.bg_color[2], options.bg_color[3]);
200197

201198
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);
204201
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)
206204
});
207205

208206
renderer.set_main_framebuffer_size(size);
209-
renderer.set_viewport(viewport);
207+
renderer.set_dest_framebuffer(dest_framebuffer);
210208
renderer.device.bind_default_framebuffer(viewport);
211209
renderer.device.clear(Some(bg_color), Some(1.0), Some(0));
212210
renderer.disable_depth();
@@ -227,20 +225,16 @@ pub unsafe extern "C" fn magicleap_pathfinder_render(pf: *mut c_void, options: *
227225
};
228226

229227
let built_options = render_options.prepare(svg.scene.bounds);
230-
let quad = built_options.quad();
231228

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();
236230
let command_sender_clone = command_sender.clone();
237231

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();
240234

241235
let _ = command_sender_clone.send(None);
242236

243-
renderer.begin_scene(&built_scene);
237+
renderer.begin_scene(&svg.scene.build_descriptor(&built_options));
244238
while let Ok(Some(command)) = command_receiver.recv() {
245239
renderer.render_command(&command);
246240
}

0 commit comments

Comments
 (0)