Skip to content

Commit cbf2ae5

Browse files
Initialize GL context (#1)
* wip * working on macOS --------- Co-authored-by: Ryan Kois <[email protected]>
1 parent f5c356b commit cbf2ae5

File tree

3 files changed

+78
-39
lines changed

3 files changed

+78
-39
lines changed

Cargo.lock

+46-13
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
@@ -1,5 +1,5 @@
11
[package]
2-
name = "projectM-SDL"
2+
name = "projectm_sdl"
33
version = "0.1.0"
44
edition = "2021"
55

@@ -8,4 +8,5 @@ edition = "2021"
88
[dependencies]
99
libc = "*"
1010
sdl2 = "0.35.2"
11+
gl = "0.14.0"
1112
projectm-rs = "^1.0.4"

src/main.rs

+30-25
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,47 @@
1+
use projectm_rs::core::*;
12
use sdl2::event::Event;
23
use sdl2::keyboard::Keycode;
3-
use projectm_rs::core::*;
4+
use sdl2::video::GLProfile;
5+
46

57
fn main() -> Result<(), String> {
68
// setup sdl
79
let sdl_context = sdl2::init()?;
810
let video_subsystem = sdl_context.video()?;
9-
// let audio_subsystem = sdl_context.audio()?;
11+
12+
// request GL version
13+
// TODO: deal with OpenGL ES here
14+
let gl_attr = video_subsystem.gl_attr();
15+
gl_attr.set_context_profile(GLProfile::Core);
16+
gl_attr.set_context_version(3, 3);
17+
gl_attr.set_context_flags().debug().set();
18+
assert_eq!(gl_attr.context_profile(), GLProfile::Core);
19+
assert_eq!(gl_attr.context_version(), (3, 3));
1020

1121
// create window
1222
// get screen dimensions
13-
let mut display_index = 0;
23+
let display_index = 0;
1424
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)
25+
let window_width = display_mode.w as u32;
26+
let window_height = display_mode.h as u32;
27+
let window = video_subsystem
28+
.window("frontend-sdl2-rust", window_width, window_height)
29+
.opengl()
1830
.position_centered()
31+
.allow_highdpi()
1932
.build()
2033
.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");
2534

35+
// create openGL context
36+
let gl_context = window.gl_create_context().unwrap();
37+
window.gl_make_current(&gl_context).unwrap();
2638

27-
// projectm::init
28-
let projectm_handle = unsafe {
29-
projectm::create()
30-
};
39+
// initialize projectM
40+
let projectm_handle = projectm::create() ;
3141

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!");
42+
// get/set window size
43+
let (width, height) = window.drawable_size(); // highDPI aware
44+
projectm::set_window_size(projectm_handle, width.try_into().unwrap(), height.try_into().unwrap());
3645

3746
// events
3847
let mut event_pump = sdl_context.event_pump()?;
@@ -54,13 +63,11 @@ fn main() -> Result<(), String> {
5463
// generate random audio
5564
generate_random_audio_data(projectm_handle);
5665

57-
// projectm::render
58-
unsafe {
66+
// render a frame
5967
projectm::render_frame(projectm_handle);
60-
}
6168

62-
// present/render
63-
canvas.present();
69+
// swap buffers
70+
window.gl_swap_window();
6471
}
6572

6673
// finish okay
@@ -83,7 +90,5 @@ fn generate_random_audio_data(projectm_handle: projectm_handle)
8390
i += 1
8491
};
8592

86-
unsafe {
8793
projectm::pcm_add_int16(projectm_handle, &pcm_data[0][0], 512, 2)
88-
}
8994
}

0 commit comments

Comments
 (0)