Split Mesh data and Pipeline

This commit is contained in:
Florian RICHER 2025-06-08 15:41:22 +02:00
parent 4f96a1e4b5
commit 078e9daba9
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
13 changed files with 331 additions and 109 deletions

View file

@ -5,11 +5,14 @@ use crate::core::app::DEPTH_IMAGE_ID;
use crate::core::app::context::WindowContext;
use crate::core::app::user_event::UserEvent;
use crate::core::render::primitives::camera::Camera3D;
use crate::core::render::primitives::mvp::Mvp;
use crate::core::render::primitives::transform::Transform;
use crate::core::render::primitives::{AsBindableDescriptorSet, AsRecordable};
use crate::core::render::render_pass_manager::{RenderPassConfig, RenderPassManager};
use crate::core::render::texture::Texture;
use crate::core::scene::Scene;
use crate::game::assets::square::Square;
use crate::game::assets::meshs::square::Square;
use crate::game::assets::pipelines::simple::{SimplePipeline, SimplePipelineRenderData};
use egui_winit_vulkano::egui;
use glam::EulerRot;
use glam::Quat;
@ -22,6 +25,7 @@ use winit::window::CursorGrabMode;
pub struct MainSceneState {
square: Square,
simple_pipeline: SimplePipeline,
instances: Vec<Transform>,
camera: Camera3D,
texture: Texture,
@ -46,9 +50,9 @@ impl Scene for MainScene {
let swapchain_image_view =
app_context.with_renderer(|renderer| renderer.swapchain_image_view().clone());
let square = Square::new(
let square = Square::new(&app_context.memory_allocator)?;
let simple_pipeline = SimplePipeline::new(
&app_context.device,
&app_context.memory_allocator,
swapchain_image_view.format(),
depth_image_view.format(),
)?;
@ -103,6 +107,7 @@ impl Scene for MainScene {
self.state = Some(MainSceneState {
square,
simple_pipeline,
instances,
camera,
texture,
@ -198,20 +203,20 @@ impl Scene for MainScene {
// Create camera uniform using the actual camera
let camera_uniform = state.camera.create_buffer(&app_context.memory_allocator)?;
let transform_uniform =
Transform::create_buffer(&app_context.memory_allocator, &state.instances)?;
state
.square
.render(
&mut builder,
&app_context.descriptor_set_allocator,
&camera_uniform,
&transform_uniform,
&state.texture,
)
.unwrap();
SimplePipeline::record_render_commands(
&mut builder,
&app_context.descriptor_set_allocator,
state.simple_pipeline.pipeline(),
&SimplePipelineRenderData {
mesh: &state.square,
mvp_uniform: &camera_uniform,
texture: &state.texture,
instances: &transform_uniform,
},
)?;
RenderPassManager::end_rendering(&mut builder)?;