1
+ use projectm_rs:: core:: * ;
1
2
use sdl2:: event:: Event ;
2
3
use sdl2:: keyboard:: Keycode ;
3
- use projectm_rs:: core:: * ;
4
+ use sdl2:: video:: GLProfile ;
5
+
4
6
5
7
fn main ( ) -> Result < ( ) , String > {
6
8
// setup sdl
7
9
let sdl_context = sdl2:: init ( ) ?;
8
10
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 ) ) ;
10
20
11
21
// create window
12
22
// get screen dimensions
13
- let mut display_index = 0 ;
23
+ let display_index = 0 ;
14
24
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 ( )
18
30
. position_centered ( )
31
+ . allow_highdpi ( )
19
32
. build ( )
20
33
. 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
34
35
+ // create openGL context
36
+ let gl_context = window. gl_create_context ( ) . unwrap ( ) ;
37
+ window. gl_make_current ( & gl_context) . unwrap ( ) ;
26
38
27
- // projectm::init
28
- let projectm_handle = unsafe {
29
- projectm:: create ( )
30
- } ;
39
+ // initialize projectM
40
+ let projectm_handle = projectm:: create ( ) ;
31
41
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 ( ) ) ;
36
45
37
46
// events
38
47
let mut event_pump = sdl_context. event_pump ( ) ?;
@@ -54,13 +63,11 @@ fn main() -> Result<(), String> {
54
63
// generate random audio
55
64
generate_random_audio_data ( projectm_handle) ;
56
65
57
- // projectm::render
58
- unsafe {
66
+ // render a frame
59
67
projectm:: render_frame ( projectm_handle) ;
60
- }
61
68
62
- // present/render
63
- canvas . present ( ) ;
69
+ // swap buffers
70
+ window . gl_swap_window ( ) ;
64
71
}
65
72
66
73
// finish okay
@@ -83,7 +90,5 @@ fn generate_random_audio_data(projectm_handle: projectm_handle)
83
90
i += 1
84
91
} ;
85
92
86
- unsafe {
87
93
projectm:: pcm_add_int16 ( projectm_handle, & pcm_data[ 0 ] [ 0 ] , 512 , 2 )
88
- }
89
94
}
0 commit comments