MCPcopy Create free account
hub / github.com/17cupsofcoffee/nova / new

Method new

src/window.rs:24–81  ·  view source on GitHub ↗
(title: &str, width: i32, height: i32)

Source from the content-addressed store, hash-verified

22
23impl Window {
24 pub fn new(title: &str, width: i32, height: i32) -> Window {
25 unsafe {
26 if SDL_INIT.load(Ordering::Relaxed) {
27 panic!("SDL already initialized");
28 }
29
30 if !SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS | SDL_INIT_GAMEPAD) {
31 sdl_panic!();
32 }
33
34 SDL_INIT.store(true, Ordering::Relaxed);
35
36 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
37 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
38 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
39 SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
40 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
41
42 let c_title = CString::new(title).unwrap();
43
44 let window = SDL_CreateWindow(
45 c_title.as_ptr(),
46 width,
47 height,
48 SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN,
49 );
50
51 if window.is_null() {
52 sdl_panic!();
53 }
54
55 SDL_DisableScreenSaver();
56
57 let gl = SDL_GL_CreateContext(window);
58
59 if gl.is_null() {
60 sdl_panic!();
61 }
62
63 SDL_GL_SetSwapInterval(1);
64
65 let version = SDL_GetVersion();
66
67 println!(
68 "SDL Version: {}.{}.{}",
69 SDL_VERSIONNUM_MAJOR(version),
70 SDL_VERSIONNUM_MINOR(version),
71 SDL_VERSIONNUM_MICRO(version),
72 );
73
74 Window {
75 window,
76 gl,
77
78 visible: false,
79 }
80 }
81 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected