Skip to content

Commit 29b7610

Browse files
committed
breaking up app into pieces
1 parent f5c356b commit 29b7610

File tree

6 files changed

+115
-84
lines changed

6 files changed

+115
-84
lines changed

Cargo.lock

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ edition = "2021"
88
[dependencies]
99
libc = "*"
1010
sdl2 = "0.35.2"
11-
projectm-rs = "^1.0.4"
11+
# projectm-rs = "^1.0.4"
12+
projectm-rs = { path = "../projectm-rs" }

src/app.rs

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
use sdl2::event::Event;
2+
use sdl2::keyboard::Keycode;
3+
4+
use projectm_rs::core::{projectm, projectm_handle};
5+
6+
use crate::dummy_audio;
7+
8+
pub struct App {
9+
pm: projectm_handle,
10+
sdl_context: sdl2::Sdl,
11+
canvas: sdl2::render::Canvas<sdl2::video::Window>,
12+
}
13+
14+
impl App {
15+
pub fn new() -> Self {
16+
let pm = projectm::create();
17+
18+
// setup sdl
19+
let sdl_context = sdl2::init().unwrap();
20+
let video_subsystem = sdl_context.video().unwrap();
21+
// let audio_subsystem = sdl_context.audio()?;
22+
23+
// create window
24+
// get screen dimensions
25+
let mut display_index = 0;
26+
let display_mode = video_subsystem.desktop_display_mode(display_index).unwrap();
27+
let mut window_width = display_mode.w as u32;
28+
let mut window_height = display_mode.h as u32;
29+
let window = video_subsystem
30+
.window("frontend-sdl2-rust", window_width, window_height)
31+
.position_centered()
32+
.build()
33+
.expect("could not initialize video subsystem");
34+
35+
// create canvas/renderer
36+
let canvas = window
37+
.into_canvas()
38+
.build()
39+
.expect("could not make a canvas");
40+
41+
// projectm::init
42+
let projectm_handle = projectm::create();
43+
44+
projectm::set_window_size(
45+
projectm_handle,
46+
canvas.output_size().unwrap().0.try_into().unwrap(),
47+
canvas.output_size().unwrap().1.try_into().unwrap(),
48+
);
49+
println!("projectm initialized!");
50+
Self {
51+
pm,
52+
sdl_context,
53+
canvas,
54+
}
55+
}
56+
57+
pub fn main_loop(&mut self) {
58+
// events
59+
let mut event_pump = self.sdl_context.event_pump().unwrap();
60+
61+
// renderLoop
62+
'running: loop {
63+
// check for event
64+
for event in event_pump.poll_iter() {
65+
match event {
66+
Event::Quit { .. }
67+
| Event::KeyDown {
68+
keycode: Some(Keycode::Escape),
69+
..
70+
} => {
71+
break 'running;
72+
}
73+
_ => {}
74+
}
75+
}
76+
77+
// generate random audio
78+
dummy_audio::generate_random_audio_data(self.pm);
79+
80+
// projectm::render
81+
unsafe {
82+
projectm::render_frame(self.pm);
83+
}
84+
85+
// present/render
86+
self.canvas.present();
87+
}
88+
}
89+
}

src/dummy_audio.rs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use projectm_rs::core::{projectm, projectm_handle};
2+
3+
pub fn generate_random_audio_data(projectm_handle: projectm_handle) {
4+
let mut pcm_data: [[libc::c_short; 512]; 2] = [[0; 512]; 2];
5+
let mut i: libc::c_int = 0 as libc::c_int;
6+
while i < 512 as libc::c_int {
7+
if i % 2 as libc::c_int == 1 as libc::c_int {
8+
pcm_data[0 as libc::c_int as usize][i as usize] =
9+
-(pcm_data[0 as libc::c_int as usize][i as usize] as libc::c_int) as libc::c_short;
10+
pcm_data[1 as libc::c_int as usize][i as usize] =
11+
-(pcm_data[1 as libc::c_int as usize][i as usize] as libc::c_int) as libc::c_short
12+
}
13+
i += 1
14+
}
15+
16+
projectm::pcm_add_int16(projectm_handle, &pcm_data[0][0], 512, 2)
17+
}

src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pub mod app;
2+
mod dummy_audio;

src/main.rs

+5-81
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,13 @@
1-
use sdl2::event::Event;
2-
use sdl2::keyboard::Keycode;
31
use projectm_rs::core::*;
42

5-
fn main() -> Result<(), String> {
6-
// setup sdl
7-
let sdl_context = sdl2::init()?;
8-
let video_subsystem = sdl_context.video()?;
9-
// let audio_subsystem = sdl_context.audio()?;
10-
11-
// create window
12-
// get screen dimensions
13-
let mut display_index = 0;
14-
let display_mode = video_subsystem.desktop_display_mode(display_index)?;
15-
let mut window_width = display_mode.w as u32;
16-
let mut window_height = display_mode.h as u32;
17-
let window = video_subsystem.window("frontend-sdl2-rust", window_width, window_height)
18-
.position_centered()
19-
.build()
20-
.expect("could not initialize video subsystem");
21-
22-
// create canvas/renderer
23-
let mut canvas = window.into_canvas().build()
24-
.expect("could not make a canvas");
25-
26-
27-
// projectm::init
28-
let projectm_handle = unsafe {
29-
projectm::create()
30-
};
31-
32-
unsafe {
33-
projectm::set_window_size(projectm_handle, canvas.output_size().unwrap().0.try_into().unwrap(), canvas.output_size().unwrap().1.try_into().unwrap())
34-
}
35-
println!("projectm initialized!");
36-
37-
// events
38-
let mut event_pump = sdl_context.event_pump()?;
3+
use App;
394

40-
// renderLoop
41-
'running: loop {
42-
43-
// check for event
44-
for event in event_pump.poll_iter() {
45-
match event {
46-
Event::Quit {..} |
47-
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
48-
break 'running;
49-
},
50-
_ => {}
51-
}
52-
}
5+
fn main() -> Result<(), String> {
6+
let mut app = App::new();
537

54-
// generate random audio
55-
generate_random_audio_data(projectm_handle);
8+
app.init();
569

57-
// projectm::render
58-
unsafe {
59-
projectm::render_frame(projectm_handle);
60-
}
61-
62-
// present/render
63-
canvas.present();
64-
}
10+
app.main_loop();
6511

66-
// finish okay
6712
Ok(())
6813
}
69-
70-
fn generate_random_audio_data(projectm_handle: projectm_handle)
71-
{
72-
let mut pcm_data: [[libc::c_short; 512]; 2] = [[0; 512]; 2];
73-
let mut i: libc::c_int = 0 as libc::c_int;
74-
while i < 512 as libc::c_int {
75-
if i % 2 as libc::c_int == 1 as libc::c_int {
76-
pcm_data[0 as libc::c_int as usize][i as usize] =
77-
-(pcm_data[0 as libc::c_int as usize][i as usize] as
78-
libc::c_int) as libc::c_short;
79-
pcm_data[1 as libc::c_int as usize][i as usize] =
80-
-(pcm_data[1 as libc::c_int as usize][i as usize] as
81-
libc::c_int) as libc::c_short
82-
}
83-
i += 1
84-
};
85-
86-
unsafe {
87-
projectm::pcm_add_int16(projectm_handle, &pcm_data[0][0], 512, 2)
88-
}
89-
}

0 commit comments

Comments
 (0)