initial Commit
commit
19eb37a455
|
@ -0,0 +1 @@
|
||||||
|
/target
|
|
@ -0,0 +1,18 @@
|
||||||
|
[package]
|
||||||
|
name = "mgq-fighter"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bevy_ecs = "0.13.2"
|
||||||
|
cgmath = "0.18.0"
|
||||||
|
egui = "0.27.2"
|
||||||
|
egui-winit = "0.27.2"
|
||||||
|
egui_glow = { version = "0.27.2", features = ["winit"] }
|
||||||
|
glow = "0.13.1"
|
||||||
|
glutin = "0.31.3"
|
||||||
|
glutin-winit = "0.4.2"
|
||||||
|
raw-window-handle = "0.6.1"
|
||||||
|
winit = "0.29.15"
|
|
@ -0,0 +1,145 @@
|
||||||
|
|
||||||
|
use std::rc::Rc;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use glow::HasContext;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
use winit::{event_loop::EventLoopBuilder, window::WindowBuilder};
|
||||||
|
use winit::event::{Event, WindowEvent};
|
||||||
|
|
||||||
|
use glutin::{config::ConfigTemplateBuilder, context::ContextAttributesBuilder};
|
||||||
|
use glutin_winit::DisplayBuilder;
|
||||||
|
use glutin::{prelude::*, context::Version};
|
||||||
|
use glutin_winit::{self, GlWindow};
|
||||||
|
use glutin::display::GetGlDisplay;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
|
||||||
|
// NOTE initialization code here
|
||||||
|
|
||||||
|
|
||||||
|
// create Event Loop
|
||||||
|
let event_loop = EventLoopBuilder::new().build().unwrap();
|
||||||
|
|
||||||
|
// set event loop to poll events every frame
|
||||||
|
event_loop.set_control_flow(winit::event_loop::ControlFlow::Poll);
|
||||||
|
|
||||||
|
|
||||||
|
let window_builder = Some(WindowBuilder::new()
|
||||||
|
.with_transparent(true)
|
||||||
|
);
|
||||||
|
|
||||||
|
let template = ConfigTemplateBuilder::new();
|
||||||
|
|
||||||
|
let display_builder = DisplayBuilder::new()
|
||||||
|
.with_window_builder(window_builder);
|
||||||
|
|
||||||
|
let (window, gl_config) = display_builder
|
||||||
|
.build(&event_loop, template, |configs| {
|
||||||
|
configs.reduce(|accum, config| {
|
||||||
|
let transparency_check = config.supports_transparency().unwrap_or(true)
|
||||||
|
& !accum.supports_transparency().unwrap_or(true);
|
||||||
|
|
||||||
|
if transparency_check || config.num_samples() > accum.num_samples() {
|
||||||
|
config
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
accum
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unwrap()
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
// probably not needed here
|
||||||
|
//let raw_window_handle = window.as_ref().map(|window| window.window_handle()
|
||||||
|
// .unwrap()
|
||||||
|
// .as_raw());
|
||||||
|
|
||||||
|
let gl_display = gl_config.display();
|
||||||
|
|
||||||
|
let context_attributes = ContextAttributesBuilder::new().build(None);
|
||||||
|
|
||||||
|
let fallback_attributes = ContextAttributesBuilder::new()
|
||||||
|
.with_context_api(glutin::context::ContextApi::Gles(None))
|
||||||
|
.build(None);
|
||||||
|
|
||||||
|
let compatibility_context_attributes = ContextAttributesBuilder::new()
|
||||||
|
.with_context_api(glutin::context::ContextApi::OpenGl(Some(Version::new(3, 3))))
|
||||||
|
.build(None);
|
||||||
|
|
||||||
|
// decide on the opengl Context to use, will use the newest one available
|
||||||
|
let mut not_current_gl_context = Some(unsafe {
|
||||||
|
gl_display.create_context(&gl_config, &context_attributes).unwrap_or_else(|_| {
|
||||||
|
gl_display.create_context(&gl_config, &fallback_attributes).unwrap_or_else(|_| {
|
||||||
|
gl_display
|
||||||
|
.create_context(&gl_config, &compatibility_context_attributes)
|
||||||
|
.expect("get a newer Computer")
|
||||||
|
},
|
||||||
|
)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// current Window Reference Counter
|
||||||
|
let window = Rc::new(window.unwrap());
|
||||||
|
|
||||||
|
// window title
|
||||||
|
window.set_title("MGQ Fighter Test");
|
||||||
|
|
||||||
|
let attrs = window.build_surface_attributes(<_>::default());
|
||||||
|
|
||||||
|
let gl_surface = unsafe {
|
||||||
|
gl_config.display().create_window_surface(&gl_config, &attrs).unwrap()
|
||||||
|
};
|
||||||
|
|
||||||
|
let gl_context = not_current_gl_context
|
||||||
|
.take()
|
||||||
|
.unwrap()
|
||||||
|
.make_current(&gl_surface)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// the Glow context wrapped in an Atomic Reference Counter
|
||||||
|
let gl = Arc::new(unsafe {
|
||||||
|
glow::Context::from_loader_function(|s| {
|
||||||
|
let s = std::ffi::CString::new(s).unwrap();
|
||||||
|
gl_display.get_proc_address(s.as_c_str()).cast()
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// TODO write bevy Init code here
|
||||||
|
|
||||||
|
let _ = event_loop.run(move |event, control_flow| {
|
||||||
|
match event
|
||||||
|
{
|
||||||
|
Event::WindowEvent { event, .. } => {
|
||||||
|
match event
|
||||||
|
{
|
||||||
|
WindowEvent::CloseRequested => {
|
||||||
|
println!("closing gracefully");
|
||||||
|
control_flow.exit();
|
||||||
|
},
|
||||||
|
// TODO to be implemented later
|
||||||
|
_ => ()
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Event::AboutToWait => {
|
||||||
|
unsafe {
|
||||||
|
gl.clear_color(0.0, 0.0, 0.0, 0.0);
|
||||||
|
gl.clear(glow::COLOR_BUFFER_BIT);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// TODO to be implemented
|
||||||
|
_ => ()
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue