Add pipeline loader
This commit is contained in:
parent
8b982ba089
commit
6099a3e27f
5 changed files with 179 additions and 53 deletions
|
@ -11,6 +11,7 @@ use crate::core::render::primitives::transform::Transform;
|
|||
use crate::core::render::primitives::{AsDescriptorSet, AsRecordable};
|
||||
use crate::core::render::render_pass_manager::{RenderPassConfig, RenderPassManager};
|
||||
use crate::core::render::resources::meshes::{ObjMesh, SquareMesh};
|
||||
use crate::core::render::resources::pipeline::PipelineLoader;
|
||||
use crate::core::render::resources::texture::{TextureLoadInfo, TextureLoader, TextureSourceKind};
|
||||
use crate::core::scene::Scene;
|
||||
use crate::game::assets::pipelines::simple::SimplePipeline;
|
||||
|
@ -28,9 +29,9 @@ use winit::window::CursorGrabMode;
|
|||
|
||||
pub struct MainSceneState {
|
||||
texture_loader: TextureLoader,
|
||||
pipeline_loader: PipelineLoader,
|
||||
square: SquareMesh,
|
||||
obj: ObjMesh,
|
||||
simple_pipeline: SimplePipeline,
|
||||
square_instances: Vec<Transform>,
|
||||
obj_instances: Vec<Transform>,
|
||||
camera: Camera3D,
|
||||
|
@ -55,6 +56,14 @@ impl Scene for MainScene {
|
|||
let swapchain_image_view =
|
||||
app_context.with_renderer(|renderer| renderer.swapchain_image_view().clone());
|
||||
|
||||
let mut pipeline_loader = PipelineLoader::new(
|
||||
app_context.device.clone(),
|
||||
swapchain_image_view.format(),
|
||||
depth_image_view.format(),
|
||||
);
|
||||
pipeline_loader.register::<SimplePipeline>(SimplePipeline::new)?;
|
||||
pipeline_loader.load_pipelines()?;
|
||||
|
||||
let mut texture_loader = TextureLoader::new(app_context);
|
||||
texture_loader.add_texture(
|
||||
"wooden-crate".to_string(),
|
||||
|
@ -90,11 +99,6 @@ impl Scene for MainScene {
|
|||
let obj = ObjMesh::new(&app_context.memory_allocator, "res/objects/cube.obj")?;
|
||||
obj.into_iter().next().unwrap()
|
||||
};
|
||||
let simple_pipeline = SimplePipeline::new(
|
||||
&app_context.device,
|
||||
swapchain_image_view.format(),
|
||||
depth_image_view.format(),
|
||||
)?;
|
||||
|
||||
let num_instances = 100;
|
||||
let instance_size = 10.0;
|
||||
|
@ -147,7 +151,7 @@ impl Scene for MainScene {
|
|||
self.state = Some(MainSceneState {
|
||||
square,
|
||||
obj,
|
||||
simple_pipeline,
|
||||
pipeline_loader,
|
||||
square_instances,
|
||||
obj_instances,
|
||||
camera,
|
||||
|
@ -256,43 +260,53 @@ impl Scene for MainScene {
|
|||
let obj_transform_uniform =
|
||||
Transform::create_buffer(&app_context.memory_allocator, &state.obj_instances)?;
|
||||
|
||||
SimplePipeline::record_bind_commands(
|
||||
&mut builder,
|
||||
&app_context.descriptor_set_allocator,
|
||||
state.simple_pipeline.pipeline(),
|
||||
&state.square,
|
||||
&square_transform_uniform,
|
||||
vec![
|
||||
camera_uniform.clone() as Arc<dyn AsDescriptorSet>,
|
||||
state
|
||||
.texture_loader
|
||||
.get_texture("wooden-crate")
|
||||
.unwrap()
|
||||
.clone(),
|
||||
],
|
||||
)?;
|
||||
SimplePipeline::record_draw_commands(
|
||||
&mut builder,
|
||||
&state.square,
|
||||
&square_transform_uniform,
|
||||
)?;
|
||||
state
|
||||
.pipeline_loader
|
||||
.with_pipeline::<SimplePipeline, _>(|pipeline| {
|
||||
SimplePipeline::record_bind_commands(
|
||||
&mut builder,
|
||||
&app_context.descriptor_set_allocator,
|
||||
pipeline,
|
||||
&state.square,
|
||||
&square_transform_uniform,
|
||||
vec![
|
||||
camera_uniform.clone() as Arc<dyn AsDescriptorSet>,
|
||||
state
|
||||
.texture_loader
|
||||
.get_texture("wooden-crate")
|
||||
.unwrap()
|
||||
.clone(),
|
||||
],
|
||||
)?;
|
||||
SimplePipeline::record_draw_commands(
|
||||
&mut builder,
|
||||
&state.square,
|
||||
&square_transform_uniform,
|
||||
)?;
|
||||
|
||||
SimplePipeline::record_bind_commands(
|
||||
&mut builder,
|
||||
&app_context.descriptor_set_allocator,
|
||||
state.simple_pipeline.pipeline(),
|
||||
&state.obj,
|
||||
&obj_transform_uniform,
|
||||
vec![
|
||||
camera_uniform.clone() as Arc<dyn AsDescriptorSet>,
|
||||
state
|
||||
.texture_loader
|
||||
.get_texture("cube-diffuse")
|
||||
.unwrap()
|
||||
.clone(),
|
||||
],
|
||||
)?;
|
||||
SimplePipeline::record_draw_commands(&mut builder, &state.obj, &obj_transform_uniform)?;
|
||||
SimplePipeline::record_bind_commands(
|
||||
&mut builder,
|
||||
&app_context.descriptor_set_allocator,
|
||||
pipeline,
|
||||
&state.obj,
|
||||
&obj_transform_uniform,
|
||||
vec![
|
||||
camera_uniform.clone() as Arc<dyn AsDescriptorSet>,
|
||||
state
|
||||
.texture_loader
|
||||
.get_texture("cube-diffuse")
|
||||
.unwrap()
|
||||
.clone(),
|
||||
],
|
||||
)?;
|
||||
SimplePipeline::record_draw_commands(
|
||||
&mut builder,
|
||||
&state.obj,
|
||||
&obj_transform_uniform,
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
})?;
|
||||
|
||||
RenderPassManager::end_rendering(&mut builder)?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue