1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use glutin::{dpi::LogicalSize, event_loop::EventLoop, window::WindowBuilder, ContextBuilder};
pub fn init_raw<S: ToString>(
width_pixels: u32,
height_pixels: u32,
window_title: S,
) -> super::super::super::Rltk {
use super::super::super::Rltk;
use super::super::*;
let el = EventLoop::new();
let wb = WindowBuilder::new()
.with_title(window_title.to_string())
.with_inner_size(LogicalSize::new(
f64::from(width_pixels),
f64::from(height_pixels),
));
let windowed_context = ContextBuilder::new()
.with_gl(glutin::GlRequest::Latest)
.with_gl_profile(glutin::GlProfile::Core)
.with_hardware_acceleration(Some(true))
.with_vsync(true)
.with_srgb(true)
.build_windowed(wb, &el)
.unwrap();
let windowed_context = unsafe { windowed_context.make_current().unwrap() };
let gl = glow::Context::from_loader_function(|ptr| {
windowed_context.get_proc_address(ptr) as *const _
});
let mut shaders: Vec<Shader> = Vec::new();
shaders.push(Shader::new(
&gl,
shader_strings::CONSOLE_WITH_BG_VS,
shader_strings::CONSOLE_WITH_BG_FS,
));
shaders.push(Shader::new(
&gl,
shader_strings::CONSOLE_NO_BG_VS,
shader_strings::CONSOLE_NO_BG_FS,
));
shaders.push(Shader::new(
&gl,
shader_strings::BACKING_VS,
shader_strings::BACKING_FS,
));
shaders.push(Shader::new(
&gl,
shader_strings::SCANLINES_VS,
shader_strings::SCANLINES_FS,
));
let backing_fbo = Framebuffer::build_fbo(&gl, width_pixels as i32, height_pixels as i32);
let quad_vao = setup_quad(&gl);
Rltk {
backend: RltkPlatform {
platform: PlatformGL {
gl,
quad_vao,
context_wrapper: Some(WrappedContext {
el,
wc: windowed_context,
}),
backing_buffer: backing_fbo,
},
},
width_pixels,
height_pixels,
fonts: Vec::new(),
consoles: Vec::new(),
shaders,
fps: 0.0,
frame_time_ms: 0.0,
active_console: 0,
key: None,
mouse_pos: (0, 0),
left_click: false,
shift: false,
control: false,
alt: false,
web_button: None,
quitting: false,
post_scanlines: false,
post_screenburn: false,
}
}