equal
deleted
inserted
replaced
|
1 mod ipc; |
1 mod world; |
2 mod world; |
2 mod ipc; |
3 |
|
4 use std::io::{Read, Write}; |
|
5 |
|
6 use self::ipc::IPC; |
3 |
7 |
4 #[repr(C)] |
8 #[repr(C)] |
5 pub struct EngineInstance { |
9 pub struct EngineInstance { |
6 world: world::World, |
10 world: world::World, |
|
11 ipc: IPC, |
7 } |
12 } |
8 |
13 |
9 impl EngineInstance { |
14 impl EngineInstance { |
10 pub fn new() -> Self { |
15 pub fn new() -> Self { |
11 let world = world::World::new(); |
16 let world = world::World::new(); |
12 Self { world } |
17 Self { |
|
18 world, |
|
19 ipc: IPC::new(), |
|
20 } |
13 } |
21 } |
14 |
22 |
15 pub fn render<R, C>( |
23 pub fn render<R, C>( |
16 &self, |
24 &self, |
17 context: &mut gfx::Encoder<R, C>, |
25 context: &mut gfx::Encoder<R, C>, |
18 target: &gfx::handle::RenderTargetView<R, gfx::format::Rgba8>) |
26 target: &gfx::handle::RenderTargetView<R, gfx::format::Rgba8>, |
19 where R: gfx::Resources, |
27 ) where |
20 C: gfx::CommandBuffer<R> |
28 R: gfx::Resources, |
|
29 C: gfx::CommandBuffer<R>, |
21 { |
30 { |
22 context.clear(target, [0.0, 0.5, 0.0, 1.0]); |
31 context.clear(target, [0.0, 0.5, 0.0, 1.0]); |
23 } |
32 } |
24 } |
33 } |
25 |
34 |
37 56 |
46 56 |
38 } |
47 } |
39 |
48 |
40 #[no_mangle] |
49 #[no_mangle] |
41 pub extern "C" fn start_engine() -> *mut EngineInstance { |
50 pub extern "C" fn start_engine() -> *mut EngineInstance { |
42 let engine_state = Box::new(EngineInstance { |
51 let engine_state = Box::new(EngineInstance::new()); |
43 world: world::World::new(), |
|
44 }); |
|
45 |
52 |
46 Box::leak(engine_state) |
53 Box::leak(engine_state) |
47 } |
54 } |
48 |
55 |
49 #[no_mangle] |
56 #[no_mangle] |
59 land: land_preview.raw_pixels().as_ptr(), |
66 land: land_preview.raw_pixels().as_ptr(), |
60 }; |
67 }; |
61 } |
68 } |
62 |
69 |
63 #[no_mangle] |
70 #[no_mangle] |
|
71 pub extern "C" fn send_ipc(engine_state: &mut EngineInstance, buf: *const [u8], size: usize) { |
|
72 unsafe { |
|
73 (*engine_state).ipc.write(&(*buf)[0..size]); |
|
74 } |
|
75 } |
|
76 |
|
77 #[no_mangle] |
|
78 pub extern "C" fn read_ipc( |
|
79 engine_state: &mut EngineInstance, |
|
80 buf: *mut [u8], |
|
81 size: usize, |
|
82 ) -> usize { |
|
83 unsafe { (*engine_state).ipc.read(&mut (*buf)[0..size]).unwrap_or(0) } |
|
84 } |
|
85 |
|
86 #[no_mangle] |
64 pub extern "C" fn cleanup(engine_state: *mut EngineInstance) { |
87 pub extern "C" fn cleanup(engine_state: *mut EngineInstance) { |
65 unsafe { |
88 unsafe { |
66 Box::from_raw(engine_state); |
89 Box::from_raw(engine_state); |
67 } |
90 } |
68 } |
91 } |