mirror of
https://github.com/lisk77/comet.git
synced 2025-12-12 17:18:50 +00:00
Compare commits
No commits in common. "9c5a471519f2060f1de0b86a7f65e35c9f88203a" and "bf7f0bebe9c8fc16f6b567b05b5a53b8b119defe" have entirely different histories.
9c5a471519
...
bf7f0bebe9
2 changed files with 36 additions and 88 deletions
|
|
@ -9,7 +9,7 @@ use std::sync::Arc;
|
||||||
use winit::dpi::LogicalSize;
|
use winit::dpi::LogicalSize;
|
||||||
use winit::{
|
use winit::{
|
||||||
event::*,
|
event::*,
|
||||||
event_loop::{ControlFlow, EventLoop},
|
event_loop::EventLoop,
|
||||||
window::{Icon, Window},
|
window::{Icon, Window},
|
||||||
};
|
};
|
||||||
use winit_input_helper::WinitInputHelper as InputManager;
|
use winit_input_helper::WinitInputHelper as InputManager;
|
||||||
|
|
@ -349,18 +349,27 @@ impl App {
|
||||||
setup(&mut self, &mut renderer);
|
setup(&mut self, &mut renderer);
|
||||||
|
|
||||||
let mut time_stack = 0.0;
|
let mut time_stack = 0.0;
|
||||||
let mut window_focused = true;
|
|
||||||
let mut window_occluded = false;
|
|
||||||
|
|
||||||
info!("Starting event loop!");
|
info!("Starting event loop!");
|
||||||
event_loop
|
event_loop
|
||||||
.run(|event, elwt| {
|
.run(|event, elwt| {
|
||||||
|
self.delta_time = renderer.update();
|
||||||
|
|
||||||
if self.should_quit {
|
if self.should_quit {
|
||||||
elwt.exit()
|
elwt.exit()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.input_manager.update(&event);
|
self.input_manager.update(&event);
|
||||||
|
|
||||||
|
if self.dt() != f32::INFINITY {
|
||||||
|
time_stack += self.delta_time;
|
||||||
|
while time_stack > self.update_timer {
|
||||||
|
let time = self.dt();
|
||||||
|
update(&mut self, &mut renderer, time);
|
||||||
|
time_stack -= self.update_timer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
match event {
|
match event {
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
|
|
@ -368,18 +377,6 @@ impl App {
|
||||||
window_id,
|
window_id,
|
||||||
} => match event {
|
} => match event {
|
||||||
WindowEvent::CloseRequested {} => elwt.exit(),
|
WindowEvent::CloseRequested {} => elwt.exit(),
|
||||||
WindowEvent::Focused(focused) => {
|
|
||||||
window_focused = *focused;
|
|
||||||
if window_focused && !window_occluded {
|
|
||||||
window.request_redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
WindowEvent::Occluded(occluded) => {
|
|
||||||
window_occluded = *occluded;
|
|
||||||
if window_focused && !window_occluded {
|
|
||||||
window.request_redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
WindowEvent::Resized(physical_size) => {
|
WindowEvent::Resized(physical_size) => {
|
||||||
renderer.resize(*physical_size);
|
renderer.resize(*physical_size);
|
||||||
}
|
}
|
||||||
|
|
@ -387,45 +384,26 @@ impl App {
|
||||||
renderer.set_scale_factor(*scale_factor);
|
renderer.set_scale_factor(*scale_factor);
|
||||||
}
|
}
|
||||||
WindowEvent::RedrawRequested => {
|
WindowEvent::RedrawRequested => {
|
||||||
if window_focused && !window_occluded {
|
window.request_redraw();
|
||||||
match renderer.render() {
|
match renderer.render() {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(
|
Err(
|
||||||
wgpu::SurfaceError::Lost
|
wgpu::SurfaceError::Lost | wgpu::SurfaceError::Outdated,
|
||||||
| wgpu::SurfaceError::Outdated,
|
) => {
|
||||||
) => {
|
let size = renderer.size();
|
||||||
let size = renderer.size();
|
renderer.resize(size);
|
||||||
renderer.resize(size);
|
}
|
||||||
}
|
Err(wgpu::SurfaceError::OutOfMemory) => {
|
||||||
Err(wgpu::SurfaceError::OutOfMemory) => {
|
error!("Out of memory!");
|
||||||
error!("Out of memory!");
|
elwt.exit();
|
||||||
elwt.exit();
|
}
|
||||||
}
|
Err(wgpu::SurfaceError::Timeout) => {
|
||||||
Err(wgpu::SurfaceError::Timeout) => {
|
warn!("Surface timeout - skipping frame");
|
||||||
warn!("Surface timeout - skipping frame");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
Event::AboutToWait => {
|
|
||||||
elwt.set_control_flow(ControlFlow::Poll);
|
|
||||||
self.delta_time = renderer.update();
|
|
||||||
|
|
||||||
if self.dt() != f32::INFINITY {
|
|
||||||
time_stack += self.delta_time;
|
|
||||||
while time_stack > self.update_timer {
|
|
||||||
let time = self.dt();
|
|
||||||
update(&mut self, &mut renderer, time);
|
|
||||||
time_stack -= self.update_timer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if window_focused && !window_occluded {
|
|
||||||
window.request_redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ use crate::{
|
||||||
render_pass::{universal_clear_execute, universal_load_execute, RenderPass},
|
render_pass::{universal_clear_execute, universal_load_execute, RenderPass},
|
||||||
renderer::Renderer,
|
renderer::Renderer,
|
||||||
};
|
};
|
||||||
use comet_colors::Color;
|
use comet_colors::{sRgba, Color};
|
||||||
use comet_ecs::{Component, Render, Render2D, Transform2D};
|
use comet_ecs::{Component, Render, Render2D, Transform2D};
|
||||||
use comet_log::*;
|
use comet_log::*;
|
||||||
use comet_math::{m4, v2};
|
use comet_math::v2;
|
||||||
use comet_resources::{
|
use comet_resources::{
|
||||||
font::Font, graphic_resource_manager::GraphicResourceManager, texture_atlas::*, Texture, Vertex,
|
font::Font, graphic_resource_manager::GraphicResourceManager, texture_atlas::*, Texture, Vertex,
|
||||||
};
|
};
|
||||||
|
|
@ -500,36 +500,6 @@ impl<'a> Renderer2D<'a> {
|
||||||
resources.insert_sampler(label.clone(), texture_sampler);
|
resources.insert_sampler(label.clone(), texture_sampler);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(camera_layout) = extra_bind_group_layouts.get(0) {
|
|
||||||
let device = self.render_context.device();
|
|
||||||
|
|
||||||
let identity: [[f32; 4]; 4] = m4::IDENTITY.into();
|
|
||||||
let cam_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
|
|
||||||
label: Some(&format!("{} Default Camera Buffer", label)),
|
|
||||||
contents: bytemuck::cast_slice(&[identity]),
|
|
||||||
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
|
|
||||||
});
|
|
||||||
|
|
||||||
let default_camera_bg =
|
|
||||||
Arc::new(device.create_bind_group(&wgpu::BindGroupDescriptor {
|
|
||||||
label: Some(&format!("{} Default Camera Bind Group", label)),
|
|
||||||
layout: camera_layout,
|
|
||||||
entries: &[wgpu::BindGroupEntry {
|
|
||||||
binding: 0,
|
|
||||||
resource: cam_buffer.as_entire_binding(),
|
|
||||||
}],
|
|
||||||
}));
|
|
||||||
|
|
||||||
let resources = self.render_context.resources_mut();
|
|
||||||
resources.insert_buffer(label.clone(), Arc::new(cam_buffer));
|
|
||||||
resources.insert_bind_group(label.clone(), default_camera_bg);
|
|
||||||
} else {
|
|
||||||
warn!(
|
|
||||||
"Render pass '{}' created without camera layout — skipping default camera bind group",
|
|
||||||
label
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
self.render_passes
|
self.render_passes
|
||||||
.push(RenderPass::new(label.clone(), execute));
|
.push(RenderPass::new(label.clone(), execute));
|
||||||
|
|
||||||
|
|
@ -805,34 +775,34 @@ impl<'a> Renderer2D<'a> {
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let snapped_screen_corners: Vec<(f32, f32)> = rotated_world_corners
|
let screen_corners: Vec<(f32, f32)> = rotated_world_corners
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(x, y)| {
|
.map(|(x, y)| {
|
||||||
(
|
(
|
||||||
x.round() / self.render_context.config().width as f32,
|
*x / self.render_context.config().width as f32,
|
||||||
y.round() / self.render_context.config().height as f32,
|
*y / self.render_context.config().height as f32,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
vertex_buffer.extend_from_slice(&[
|
vertex_buffer.extend_from_slice(&[
|
||||||
Vertex::new(
|
Vertex::new(
|
||||||
[snapped_screen_corners[0].0, snapped_screen_corners[0].1, 0.0],
|
[screen_corners[0].0, screen_corners[0].1, 0.0],
|
||||||
[region.u0(), region.v0()],
|
[region.u0(), region.v0()],
|
||||||
[1.0, 1.0, 1.0, 1.0],
|
[1.0, 1.0, 1.0, 1.0],
|
||||||
),
|
),
|
||||||
Vertex::new(
|
Vertex::new(
|
||||||
[snapped_screen_corners[1].0, snapped_screen_corners[1].1, 0.0],
|
[screen_corners[1].0, screen_corners[1].1, 0.0],
|
||||||
[region.u0(), region.v1()],
|
[region.u0(), region.v1()],
|
||||||
[1.0, 1.0, 1.0, 1.0],
|
[1.0, 1.0, 1.0, 1.0],
|
||||||
),
|
),
|
||||||
Vertex::new(
|
Vertex::new(
|
||||||
[snapped_screen_corners[2].0, snapped_screen_corners[2].1, 0.0],
|
[screen_corners[2].0, screen_corners[2].1, 0.0],
|
||||||
[region.u1(), region.v1()],
|
[region.u1(), region.v1()],
|
||||||
[1.0, 1.0, 1.0, 1.0],
|
[1.0, 1.0, 1.0, 1.0],
|
||||||
),
|
),
|
||||||
Vertex::new(
|
Vertex::new(
|
||||||
[snapped_screen_corners[3].0, snapped_screen_corners[3].1, 0.0],
|
[screen_corners[3].0, screen_corners[3].1, 0.0],
|
||||||
[region.u1(), region.v0()],
|
[region.u1(), region.v0()],
|
||||||
[1.0, 1.0, 1.0, 1.0],
|
[1.0, 1.0, 1.0, 1.0],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue