vulkano_test/src/game/assets/meshs/square.rs

63 lines
1.5 KiB
Rust

use std::{error::Error, sync::Arc};
use vulkano::{buffer::Subbuffer, memory::allocator::StandardMemoryAllocator};
use crate::core::render::primitives::{
AsIndexBuffer, AsRenderableMesh, AsVertexBuffer, vertex::Vertex3D,
};
const VERTICES: [Vertex3D; 4] = [
Vertex3D {
position: [-0.5, -0.5, 0.0],
uv: [0.0, 0.0],
},
Vertex3D {
position: [-0.5, 0.5, 0.0],
uv: [0.0, 1.0],
},
Vertex3D {
position: [0.5, -0.5, 0.0],
uv: [1.0, 0.0],
},
Vertex3D {
position: [0.5, 0.5, 0.0],
uv: [1.0, 1.0],
},
];
const INDICES: [u32; 6] = [0, 2, 1, 2, 3, 1];
pub struct Square {
vertex_buffer: Subbuffer<[Vertex3D]>,
index_buffer: Subbuffer<[u32]>,
}
impl Square {
pub fn new(memory_allocator: &Arc<StandardMemoryAllocator>) -> Result<Self, Box<dyn Error>> {
let vertex_buffer = Vertex3D::create_vertex_buffer(memory_allocator, &VERTICES)?;
let index_buffer = u32::create_index_buffer(memory_allocator, &INDICES)?;
Ok(Self {
vertex_buffer,
index_buffer,
})
}
}
impl AsRenderableMesh<Vertex3D, Subbuffer<[u32]>> for Square {
fn vertex_buffer(&self) -> &Subbuffer<[Vertex3D]> {
&self.vertex_buffer
}
fn index_buffer(&self) -> Option<&Subbuffer<[u32]>> {
Some(&self.index_buffer)
}
fn vertex_count(&self) -> u32 {
VERTICES.len() as u32
}
fn index_count(&self) -> u32 {
INDICES.len() as u32
}
}