mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Added RenderCtx
This commit is contained in:
parent
7a29286053
commit
6f358fc762
@ -12,3 +12,6 @@ gfx = "0.17.1"
|
|||||||
gfx_device_gl = "0.15.0"
|
gfx_device_gl = "0.15.0"
|
||||||
gfx_window_glutin = "0.25.0"
|
gfx_window_glutin = "0.25.0"
|
||||||
glutin = "0.17.0"
|
glutin = "0.17.0"
|
||||||
|
|
||||||
|
# Mathematics
|
||||||
|
vek = "0.9"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
mod menu;
|
mod menu;
|
||||||
|
mod render_ctx;
|
||||||
mod window;
|
mod window;
|
||||||
|
|
||||||
// Standard
|
// Standard
|
||||||
@ -34,17 +35,18 @@ fn main() {
|
|||||||
window: Window::new(),
|
window: Window::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
loop {
|
while let Some(state_result) = states.last_mut().map(|last| last.play(&mut global_state)){
|
||||||
// Implement state transfer logic
|
// Implement state transfer logic
|
||||||
match states.last_mut().map(|last| last.play(&mut global_state)) {
|
match state_result {
|
||||||
Some(StateResult::Close) => { states.pop(); },
|
StateResult::Close => {
|
||||||
Some(StateResult::Push(new_state)) => { states.push(new_state); },
|
states.pop();
|
||||||
Some(StateResult::Switch(mut new_state)) => if let Some(old_state) = states.last_mut() {
|
},
|
||||||
mem::swap(old_state, &mut new_state);
|
StateResult::Push(new_state) => {
|
||||||
} else {
|
states.push(new_state);
|
||||||
break;
|
},
|
||||||
|
StateResult::Switch(mut new_state) => {
|
||||||
|
states.last_mut().map(|old_state| mem::swap(old_state, &mut new_state));
|
||||||
},
|
},
|
||||||
None => break,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
// Library
|
||||||
|
use vek::*;
|
||||||
|
|
||||||
// Crate
|
// Crate
|
||||||
use crate::{
|
use crate::{
|
||||||
PlayState,
|
PlayState,
|
||||||
@ -22,6 +25,13 @@ impl PlayState for TitleState {
|
|||||||
Event::Close => running = false,
|
Event::Close => running = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
global_state.window.render_ctx_mut().clear(Rgba::new(
|
||||||
|
0.0,
|
||||||
|
0.3,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
));
|
||||||
|
global_state.window.render_ctx_mut().flush_and_cleanup();
|
||||||
global_state.window.swap_buffers();
|
global_state.window.swap_buffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
45
voxygen/src/render_ctx.rs
Normal file
45
voxygen/src/render_ctx.rs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Library
|
||||||
|
use gfx_device_gl::{Device, Resources, Factory, CommandBuffer};
|
||||||
|
use gfx::{
|
||||||
|
handle::{RenderTargetView, DepthStencilView},
|
||||||
|
Device as DeviceTrait,
|
||||||
|
Encoder,
|
||||||
|
};
|
||||||
|
use vek::*;
|
||||||
|
|
||||||
|
type TgtColorView = RenderTargetView<Resources, gfx::format::Srgba8>;
|
||||||
|
type TgtDepthView = DepthStencilView<Resources, gfx::format::DepthStencil>;
|
||||||
|
|
||||||
|
pub struct RenderCtx {
|
||||||
|
device: Device,
|
||||||
|
encoder: Encoder<Resources, CommandBuffer>,
|
||||||
|
factory: Factory,
|
||||||
|
tgt_color_view: TgtColorView,
|
||||||
|
tgt_depth_view: TgtDepthView,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RenderCtx {
|
||||||
|
pub fn new(
|
||||||
|
device: Device,
|
||||||
|
mut factory: Factory,
|
||||||
|
tgt_color_view: TgtColorView,
|
||||||
|
tgt_depth_view: TgtDepthView,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
device,
|
||||||
|
encoder: Encoder::from(factory.create_command_buffer()),
|
||||||
|
factory,
|
||||||
|
tgt_color_view,
|
||||||
|
tgt_depth_view,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear(&mut self, col: Rgba<f32>) {
|
||||||
|
self.encoder.clear(&self.tgt_color_view, col.into_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn flush_and_cleanup(&mut self) {
|
||||||
|
self.encoder.flush(&mut self.device);
|
||||||
|
self.device.cleanup();
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,6 @@
|
|||||||
// External
|
// External
|
||||||
use gfx::handle::{RenderTargetView, DepthStencilView};
|
|
||||||
use gfx_device_gl::{Device, Resources, Factory};
|
|
||||||
use gfx_window_glutin;
|
use gfx_window_glutin;
|
||||||
use glutin::{
|
use glutin::{
|
||||||
self,
|
|
||||||
Api::OpenGl,
|
Api::OpenGl,
|
||||||
dpi::LogicalSize,
|
dpi::LogicalSize,
|
||||||
ContextBuilder,
|
ContextBuilder,
|
||||||
@ -14,15 +11,8 @@ use glutin::{
|
|||||||
WindowBuilder,
|
WindowBuilder,
|
||||||
};
|
};
|
||||||
|
|
||||||
type TgtColorView = RenderTargetView<Resources, gfx::format::Srgba8>;
|
// Crate
|
||||||
type TgtDepthView = DepthStencilView<Resources, gfx::format::DepthStencil>;
|
use crate::render_ctx::RenderCtx;
|
||||||
|
|
||||||
pub struct RenderCtx {
|
|
||||||
device: Device,
|
|
||||||
factory: Factory,
|
|
||||||
tgt_color_view: TgtColorView,
|
|
||||||
tgt_depth_view: TgtDepthView,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Window {
|
pub struct Window {
|
||||||
events_loop: EventsLoop,
|
events_loop: EventsLoop,
|
||||||
@ -56,15 +46,18 @@ impl Window {
|
|||||||
Self {
|
Self {
|
||||||
events_loop,
|
events_loop,
|
||||||
gl_window,
|
gl_window,
|
||||||
render_ctx: RenderCtx {
|
render_ctx: RenderCtx::new(
|
||||||
device,
|
device,
|
||||||
factory,
|
factory,
|
||||||
tgt_color_view,
|
tgt_color_view,
|
||||||
tgt_depth_view,
|
tgt_depth_view,
|
||||||
},
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn render_ctx(&self) -> &RenderCtx { &self.render_ctx }
|
||||||
|
pub fn render_ctx_mut(&mut self) -> &mut RenderCtx { &mut self.render_ctx }
|
||||||
|
|
||||||
pub fn poll_events<F: FnMut(Event)>(&mut self, mut f: F) {
|
pub fn poll_events<F: FnMut(Event)>(&mut self, mut f: F) {
|
||||||
self.events_loop.poll_events(|event| match event {
|
self.events_loop.poll_events(|event| match event {
|
||||||
glutin::Event::WindowEvent { event, .. } => match event {
|
glutin::Event::WindowEvent { event, .. } => match event {
|
||||||
|
Loading…
Reference in New Issue
Block a user