Export triangle to external scene
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 1s
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 1s
This commit is contained in:
parent
4b08b7359d
commit
7b5cae8322
18 changed files with 121 additions and 65 deletions
|
@ -1,13 +1,15 @@
|
|||
use crate::display::window::Window;
|
||||
use crate::renderer::vulkan::VkRenderContext;
|
||||
use crate::renderer::{vulkan::VkRenderContext, Renderable};
|
||||
use winit::application::ApplicationHandler;
|
||||
use winit::event::WindowEvent;
|
||||
use winit::event_loop::ActiveEventLoop;
|
||||
use winit::window::WindowId;
|
||||
use crate::scene::TriangleScene;
|
||||
|
||||
pub struct App {
|
||||
window: Window,
|
||||
render_context: Option<VkRenderContext>,
|
||||
scene: Option<Box<dyn Renderable>>,
|
||||
}
|
||||
|
||||
impl App {
|
||||
|
@ -15,6 +17,18 @@ impl App {
|
|||
Self {
|
||||
window,
|
||||
render_context: None,
|
||||
scene: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_scene(&mut self, mut scene: Box<dyn Renderable>) {
|
||||
let result = self.render_context.as_mut()
|
||||
.ok_or_else(|| anyhow::anyhow!("No render context"))
|
||||
.and_then(|render_context| render_context.init_scene(&mut scene));
|
||||
|
||||
match result {
|
||||
Ok(_) => self.scene = Some(scene),
|
||||
Err(err) => log::warn!("{err}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +41,9 @@ impl ApplicationHandler for App {
|
|||
.unwrap();
|
||||
|
||||
self.render_context = VkRenderContext::init(&self.window).ok();
|
||||
|
||||
let scene = TriangleScene::new();
|
||||
self.set_scene(Box::new(scene));
|
||||
}
|
||||
|
||||
fn window_event(&mut self, event_loop: &ActiveEventLoop, _id: WindowId, event: WindowEvent) {
|
||||
|
@ -59,7 +76,7 @@ impl ApplicationHandler for App {
|
|||
if !event_loop.exiting() {
|
||||
match self.render_context.as_mut() {
|
||||
Some(render_context) => {
|
||||
if let Err(error) = render_context.render() {
|
||||
if let Err(error) = render_context.render(self.scene.as_ref()) {
|
||||
log::error!("Failed to render with render context : {}", error);
|
||||
event_loop.exit();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue