bracket_terminal/hal/native/
mod.rs1mod init;
2pub mod shader_strings;
3use glow::NativeVertexArray;
4pub use init::*;
5mod mainloop;
6use crate::hal::scaler::{default_gutter_size, ScreenScaler};
7use crate::hal::ConsoleBacking;
8pub use mainloop::*;
9use parking_lot::Mutex;
10use std::any::Any;
11
12pub type GlCallback = fn(&mut dyn Any, &glow::Context);
13
14lazy_static! {
15 pub static ref BACKEND: Mutex<PlatformGL> = Mutex::new(PlatformGL {
16 gl: None,
17 quad_vao: None,
18 context_wrapper: None,
19 backing_buffer: None,
20 frame_sleep_time: None,
21 gl_callback: None,
22 resize_scaling: false,
23 resize_request: None,
24 request_screenshot: None,
25 screen_scaler: ScreenScaler::default(),
26 });
27}
28
29lazy_static! {
30 pub(crate) static ref CONSOLE_BACKING: Mutex<Vec<ConsoleBacking>> = Mutex::new(Vec::new());
31}
32
33pub struct PlatformGL {
34 pub gl: Option<glow::Context>,
35 pub quad_vao: Option<NativeVertexArray>,
36 pub context_wrapper: Option<WrappedContext>,
37 pub backing_buffer: Option<super::Framebuffer>,
38 pub frame_sleep_time: Option<u64>,
39 pub gl_callback: Option<GlCallback>,
40 pub resize_scaling: bool,
41 pub resize_request: Option<(u32, u32)>,
42 pub request_screenshot: Option<String>,
43 pub screen_scaler: ScreenScaler,
44}
45
46unsafe impl Send for PlatformGL {}
47unsafe impl Sync for PlatformGL {}
48
49pub struct WrappedContext {
50 pub el: glutin::event_loop::EventLoop<()>,
51 pub wc: glutin::WindowedContext<glutin::PossiblyCurrent>,
52}
53
54pub struct InitHints {
55 pub vsync: bool,
56 pub fullscreen: bool,
57 pub gl_version: glutin::GlRequest,
58 pub gl_profile: glutin::GlProfile,
59 pub hardware_acceleration: bool,
60 pub srgb: bool,
61 pub frame_sleep_time: Option<f32>,
62 pub resize_scaling: bool,
63 pub desired_gutter: u32,
64 pub fitscreen: bool,
65}
66
67impl InitHints {
68 pub fn new() -> Self {
69 Self {
70 vsync: false,
71 fullscreen: false,
72 gl_version: glutin::GlRequest::Specific(glutin::Api::OpenGl, (3, 2)),
73 gl_profile: glutin::GlProfile::Core,
74 hardware_acceleration: false,
75 srgb: true,
76 frame_sleep_time: None,
77 resize_scaling: false,
78 desired_gutter: default_gutter_size(),
79 fitscreen: false,
80 }
81 }
82}
83
84impl Default for InitHints {
85 fn default() -> Self {
86 Self {
87 vsync: false,
88 fullscreen: false,
89 gl_version: glutin::GlRequest::Specific(glutin::Api::OpenGl, (3, 2)),
90 gl_profile: glutin::GlProfile::Core,
91 hardware_acceleration: false,
92 srgb: true,
93 frame_sleep_time: None,
94 resize_scaling: false,
95 desired_gutter: default_gutter_size(),
96 fitscreen: false,
97 }
98 }
99}
100
101pub fn log(s: &str) {
102 println!("{}", s);
103}