From 852d72d716710ac0e9c30298d26371c7d98bdbf5 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Fri, 4 Apr 2025 13:38:27 +0200 Subject: [PATCH] Begin move mesh + Vertex and Camera into core --- src/core/camera/mod.rs | 19 +++++++++++++++++++ src/core/mod.rs | 3 +++ src/core/render/mesh.rs | 14 ++++++++++++++ src/core/render/mod.rs | 2 ++ src/{vulkan => core/render}/vertex.rs | 0 src/core/scene.rs | 21 +++++++++++++++++++++ src/game/mod.rs | 1 + src/main.rs | 1 + src/vulkan/mod.rs | 1 - src/vulkan/pipelines/triangle_pipeline.rs | 2 +- src/vulkan/scene.rs | 3 ++- 11 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/core/camera/mod.rs create mode 100644 src/core/render/mesh.rs create mode 100644 src/core/render/mod.rs rename src/{vulkan => core/render}/vertex.rs (100%) create mode 100644 src/core/scene.rs create mode 100644 src/game/mod.rs diff --git a/src/core/camera/mod.rs b/src/core/camera/mod.rs new file mode 100644 index 0000000..f9b6925 --- /dev/null +++ b/src/core/camera/mod.rs @@ -0,0 +1,19 @@ +use bevy_ecs::component::Component; +use glam::{Mat4, Quat, Vec3}; + +pub trait Camera: Into + Component {} + +#[derive(Component)] +pub struct Camera3D { + pub projection: Mat4, + pub position: Vec3, + pub rotation: Quat, +} + +impl Into for Camera3D { + fn into(self) -> Mat4 { + Mat4::from_rotation_translation(self.rotation, self.position) * self.projection + } +} + +impl Camera for Camera3D {} diff --git a/src/core/mod.rs b/src/core/mod.rs index 309be62..f058532 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1 +1,4 @@ pub mod app; +pub mod camera; +pub mod render; +pub mod scene; diff --git a/src/core/render/mesh.rs b/src/core/render/mesh.rs new file mode 100644 index 0000000..ca5ec0f --- /dev/null +++ b/src/core/render/mesh.rs @@ -0,0 +1,14 @@ +use bevy_ecs::component::Component; + +use super::vertex::Vertex2D; + +#[derive(Component)] +pub struct Mesh2D { + pub vertices: Vec, +} + +impl Mesh2D { + pub fn new(vertices: Vec) -> Self { + Self { vertices } + } +} diff --git a/src/core/render/mod.rs b/src/core/render/mod.rs new file mode 100644 index 0000000..6f29814 --- /dev/null +++ b/src/core/render/mod.rs @@ -0,0 +1,2 @@ +pub mod mesh; +pub mod vertex; diff --git a/src/vulkan/vertex.rs b/src/core/render/vertex.rs similarity index 100% rename from src/vulkan/vertex.rs rename to src/core/render/vertex.rs diff --git a/src/core/scene.rs b/src/core/scene.rs new file mode 100644 index 0000000..a424da3 --- /dev/null +++ b/src/core/scene.rs @@ -0,0 +1,21 @@ +use bevy_ecs::world::World; + +pub struct Scene { + world: World, +} + +impl Scene { + pub fn new() -> Self { + Self { + world: World::new(), + } + } + + pub fn world(&self) -> &World { + &self.world + } + + pub fn world_mut(&mut self) -> &mut World { + &mut self.world + } +} diff --git a/src/game/mod.rs b/src/game/mod.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/game/mod.rs @@ -0,0 +1 @@ + diff --git a/src/main.rs b/src/main.rs index 54a1427..2b80274 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::error::Error; use winit::event_loop::{ControlFlow, EventLoop}; pub mod core; +pub mod game; pub mod vulkan; fn main() -> Result<(), impl Error> { diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs index 56d8c07..dc3d731 100644 --- a/src/vulkan/mod.rs +++ b/src/vulkan/mod.rs @@ -1,5 +1,4 @@ pub mod pipelines; -pub mod vertex; pub mod vulkan_context; pub mod window_render_context; diff --git a/src/vulkan/pipelines/triangle_pipeline.rs b/src/vulkan/pipelines/triangle_pipeline.rs index bb07389..e573747 100644 --- a/src/vulkan/pipelines/triangle_pipeline.rs +++ b/src/vulkan/pipelines/triangle_pipeline.rs @@ -20,7 +20,7 @@ use vulkano::pipeline::{ use vulkano::shader::{EntryPoint, ShaderStages}; use vulkano::swapchain::Swapchain; -use crate::vulkan::vertex::Vertex2D; +use crate::core::render::vertex::Vertex2D; pub mod shaders { pub mod vs { diff --git a/src/vulkan/scene.rs b/src/vulkan/scene.rs index 1f77e5a..4d1de95 100644 --- a/src/vulkan/scene.rs +++ b/src/vulkan/scene.rs @@ -8,7 +8,8 @@ use vulkano::command_buffer::{AutoCommandBufferBuilder, PrimaryAutoCommandBuffer use vulkano::descriptor_set::{DescriptorSet, WriteDescriptorSet}; use vulkano::pipeline::{GraphicsPipeline, Pipeline, PipelineBindPoint}; -use crate::vulkan::{pipelines::triangle_pipeline::create_triangle_pipeline, vertex::Vertex2D}; +use crate::core::render::vertex::Vertex2D; +use crate::vulkan::pipelines::triangle_pipeline::create_triangle_pipeline; use super::vulkan_context::VulkanContext; use super::window_render_context::WindowRenderContext;