2023-01-22 17:16:58 -06:00
|
|
|
use shipyard::{Unique, NonSendSync, UniqueView, UniqueViewMut};
|
2023-01-19 16:28:07 -06:00
|
|
|
use glium::{
|
2023-01-22 17:16:58 -06:00
|
|
|
Display, Surface,
|
2023-01-19 16:28:07 -06:00
|
|
|
glutin::{
|
|
|
|
event_loop::EventLoop,
|
|
|
|
window::WindowBuilder,
|
|
|
|
ContextBuilder, GlProfile
|
2023-01-22 10:01:54 -06:00
|
|
|
},
|
2023-01-19 16:28:07 -06:00
|
|
|
};
|
2023-01-19 17:45:46 -06:00
|
|
|
use glam::Vec3;
|
2023-01-19 16:28:07 -06:00
|
|
|
|
2023-01-27 21:35:55 -06:00
|
|
|
pub mod primitives;
|
2023-01-27 21:20:51 -06:00
|
|
|
pub mod world;
|
|
|
|
pub mod selection_box;
|
|
|
|
|
2023-01-19 16:28:07 -06:00
|
|
|
#[derive(Unique)]
|
|
|
|
pub struct RenderTarget(pub glium::Frame);
|
|
|
|
|
2023-01-19 17:45:46 -06:00
|
|
|
#[derive(Unique)]
|
|
|
|
pub struct BackgroundColor(pub Vec3);
|
|
|
|
|
2023-01-19 16:28:07 -06:00
|
|
|
#[derive(Unique)]
|
2023-01-21 18:51:23 -06:00
|
|
|
pub struct Renderer {
|
2023-01-19 16:28:07 -06:00
|
|
|
pub display: Display
|
|
|
|
}
|
2023-01-21 18:51:23 -06:00
|
|
|
impl Renderer {
|
2023-01-19 16:28:07 -06:00
|
|
|
pub fn init(event_loop: &EventLoop<()>) -> Self {
|
|
|
|
log::info!("initializing display");
|
|
|
|
let wb = WindowBuilder::new()
|
|
|
|
.with_title("uwu")
|
|
|
|
.with_maximized(true);
|
|
|
|
let cb = ContextBuilder::new()
|
|
|
|
.with_depth_buffer(24)
|
|
|
|
.with_gl_profile(GlProfile::Core);
|
|
|
|
let display = Display::new(wb, cb, event_loop)
|
|
|
|
.expect("Failed to create a glium Display");
|
|
|
|
Self { display }
|
|
|
|
}
|
2023-01-19 14:58:59 -06:00
|
|
|
}
|
2023-01-19 17:45:46 -06:00
|
|
|
|
2023-01-22 10:01:54 -06:00
|
|
|
pub fn clear_background(
|
|
|
|
mut target: NonSendSync<UniqueViewMut<RenderTarget>>,
|
|
|
|
color: UniqueView<BackgroundColor>,
|
|
|
|
) {
|
2023-01-19 17:45:46 -06:00
|
|
|
target.0.clear_color_srgb_and_depth((color.0.x, color.0.y, color.0.z, 1.), 1.);
|
|
|
|
}
|