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) -> Result> { 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> 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 } }