1+ use projectm_rs:: core:: * ;
12use sdl2:: event:: Event ;
23use sdl2:: keyboard:: Keycode ;
3- use projectm_rs:: core:: * ;
4+ use sdl2:: video:: GLProfile ;
5+
46
57fn 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