pipeline: Refactor square pipeline + add support of indexes
This commit is contained in:
parent
122f577a26
commit
131811a539
9 changed files with 270 additions and 217 deletions
|
@ -1,43 +1,19 @@
|
|||
use crate::core::input::InputManager;
|
||||
use crate::core::render::pipelines::triangle_pipeline::create_triangle_pipeline;
|
||||
use crate::core::render::primitives::camera::Camera;
|
||||
use crate::core::render::primitives::vertex::Vertex2D;
|
||||
use crate::core::render::render_context::RenderContext;
|
||||
use crate::core::render::texture::Texture;
|
||||
use crate::core::scene::Scene;
|
||||
use crate::core::timer::Timer;
|
||||
use glam::{Mat4, Vec3};
|
||||
use std::sync::Arc;
|
||||
use vulkano::buffer::Subbuffer;
|
||||
use vulkano::command_buffer::{
|
||||
AutoCommandBufferBuilder, CommandBufferUsage, PrimaryAutoCommandBuffer,
|
||||
PrimaryCommandBufferAbstract,
|
||||
};
|
||||
use vulkano::descriptor_set::{DescriptorSet, WriteDescriptorSet};
|
||||
use vulkano::pipeline::{GraphicsPipeline, Pipeline, PipelineBindPoint};
|
||||
|
||||
const VERTICES: [Vertex2D; 4] = [
|
||||
Vertex2D {
|
||||
position: [0.0, 0.0],
|
||||
uv: [0.0, 0.0],
|
||||
},
|
||||
Vertex2D {
|
||||
position: [0.0, 5.0],
|
||||
uv: [0.0, 0.5],
|
||||
},
|
||||
Vertex2D {
|
||||
position: [10.0, 0.0],
|
||||
uv: [1.0, 0.0],
|
||||
},
|
||||
Vertex2D {
|
||||
position: [10.0, 5.0],
|
||||
uv: [1.0, 0.5],
|
||||
},
|
||||
];
|
||||
use super::assets::square::Square;
|
||||
|
||||
pub struct MainSceneState {
|
||||
pipeline: Arc<GraphicsPipeline>,
|
||||
vertex_buffer: Subbuffer<[Vertex2D]>,
|
||||
square: Square,
|
||||
camera: Camera,
|
||||
texture: Texture,
|
||||
speed: f32,
|
||||
|
@ -54,12 +30,12 @@ impl Scene for MainScene {
|
|||
}
|
||||
|
||||
fn load(&mut self, render_context: &RenderContext) {
|
||||
let pipeline =
|
||||
create_triangle_pipeline(render_context.device(), render_context.swapchain_format())
|
||||
.unwrap();
|
||||
let vertex_buffer =
|
||||
Vertex2D::create_buffer(Vec::from_iter(VERTICES), render_context.memory_allocator())
|
||||
.unwrap();
|
||||
let square = Square::new(
|
||||
render_context.device(),
|
||||
render_context.memory_allocator(),
|
||||
render_context.swapchain_format(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let camera = Camera::new(
|
||||
Mat4::look_at_rh(
|
||||
|
@ -97,8 +73,7 @@ impl Scene for MainScene {
|
|||
.unwrap();
|
||||
|
||||
self.state = Some(MainSceneState {
|
||||
pipeline,
|
||||
vertex_buffer,
|
||||
square,
|
||||
camera,
|
||||
texture,
|
||||
speed: 50.0,
|
||||
|
@ -128,49 +103,20 @@ impl Scene for MainScene {
|
|||
builder: &mut AutoCommandBufferBuilder<PrimaryAutoCommandBuffer>,
|
||||
) {
|
||||
let state = self.state.as_ref().unwrap();
|
||||
let vertex_count = state.vertex_buffer.len() as u32;
|
||||
let instance_count = vertex_count / 4;
|
||||
|
||||
let layouts = state.pipeline.layout().set_layouts();
|
||||
let uniform_buffer = state
|
||||
let camera_uniform = state
|
||||
.camera
|
||||
.create_buffer(render_context.memory_allocator())
|
||||
.unwrap();
|
||||
let uniform_descriptor_set = DescriptorSet::new(
|
||||
render_context.descriptor_set_allocator().clone(),
|
||||
layouts[0].clone(),
|
||||
[WriteDescriptorSet::buffer(0, uniform_buffer)],
|
||||
[],
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let texture_descriptor_set = DescriptorSet::new(
|
||||
render_context.descriptor_set_allocator().clone(),
|
||||
layouts[1].clone(),
|
||||
[
|
||||
WriteDescriptorSet::sampler(0, state.texture.get_sampler().clone()),
|
||||
WriteDescriptorSet::image_view(1, state.texture.get_texture().clone()),
|
||||
],
|
||||
[],
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
unsafe {
|
||||
builder
|
||||
.bind_pipeline_graphics(state.pipeline.clone())
|
||||
.unwrap()
|
||||
.bind_descriptor_sets(
|
||||
PipelineBindPoint::Graphics,
|
||||
state.pipeline.layout().clone(),
|
||||
0,
|
||||
vec![uniform_descriptor_set, texture_descriptor_set],
|
||||
)
|
||||
.unwrap()
|
||||
.bind_vertex_buffers(0, state.vertex_buffer.clone())
|
||||
.unwrap()
|
||||
.draw(vertex_count, instance_count, 0, 0)
|
||||
.unwrap();
|
||||
}
|
||||
state
|
||||
.square
|
||||
.render(
|
||||
builder,
|
||||
render_context.descriptor_set_allocator(),
|
||||
&camera_uniform,
|
||||
&state.texture,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn unload(&mut self) {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue