use crate::glyph::{ab_glyph, GlyphBrushBuilder, Region, Section, Text};
use dx::gles::{core30::gl, enums::*};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
env_logger::init();
let event_loop = glutin::event_loop::EventLoop::new();
let window_builder = glutin::window::WindowBuilder::new().with_resizable(false);
let context = glutin::ContextBuilder::new()
.with_vsync(true)
.build_windowed(window_builder, &event_loop)
.expect("Open window");
let context = context.make_current().expect("Make OpenGL context current");
let mut size = context.window().inner_size();
let gl = glow::Context::from_loader_function(|s| context.get_proc_address(s) as *const _);
let inconsolata = ab_glyph::FontArc::try_from_slice(include_bytes!("Inconsolata-Regular.ttf"))?;
let mut glyph_brush = GlyphBrushBuilder::using_font(inconsolata).build(&gl);
context.window().request_redraw();
gl::enable(glow::FRAMEBUFFER_SRGB);
gl::enable(glow::BLEND);
gl::blend_func(glow::SRC_ALPHA, glow::ONE_MINUS_SRC_ALPHA);
gl::clear_color(0.4, 0.4, 0.4, 1.0);
event_loop.run(move |event, _, control_flow| match event {
glutin::event::Event::WindowEvent {
event: glutin::event::WindowEvent::CloseRequested,
..
} => *control_flow = glutin::event_loop::ControlFlow::Exit,
glutin::event::Event::WindowEvent {
event: glutin::event::WindowEvent::Resized(new_size),
..
} => {
context.resize(new_size);
gl::viewport(0, 0, new_size.width as _, new_size.height as _);
size = new_size;
}
glutin::event::Event::RedrawRequested { .. } => {
gl::clear(GL_COLOR_BUFFER_BIT);
glyph_brush.queue(Section {
screen_position: (30.0, 30.0),
bounds: (size.width as f32, size.height as f32),
text: vec![Text::default()
.with_text("Hello glow_glyph!")
.with_color([0.0, 0.0, 0.0, 1.0])
.with_scale(40.0)],
..Section::default()
});
glyph_brush.draw_queued(size.width, size.height).expect("Draw queued");
glyph_brush.queue(Section {
screen_position: (30.0, 90.0),
bounds: (size.width as f32, size.height as f32),
text: vec![Text::default()
.with_text("Hello glow_glyph!")
.with_color([1.0, 1.0, 1.0, 1.0])
.with_scale(40.0)],
..Section::default()
});
glyph_brush
.draw_queued_with_transform_and_scissoring(
glow_glyph::orthographic_projection(size.width, size.height),
Region {
x: 40,
y: size.height - 120,
width: 200,
height: 15,
},
)
.expect("Draw queued");
context.swap_buffers().expect("Swap buffers");
}
_ => {
*control_flow = glutin::event_loop::ControlFlow::Wait;
}
})
}