From b361965033337551f488e39f4bd81b945abf4754 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Mon, 7 Apr 2025 22:51:49 +0200 Subject: [PATCH] Update --- src/core/render/material.rs | 7 ++++++ src/core/render/material/mod.rs | 10 -------- src/core/render/material/triangle.rs | 34 ---------------------------- src/core/render/vertex.rs | 2 +- src/vulkan/scene.rs | 24 +++++++++++++------- src/vulkan/vulkan_context.rs | 18 +-------------- 6 files changed, 25 insertions(+), 70 deletions(-) create mode 100644 src/core/render/material.rs delete mode 100644 src/core/render/material/mod.rs delete mode 100644 src/core/render/material/triangle.rs diff --git a/src/core/render/material.rs b/src/core/render/material.rs new file mode 100644 index 0000000..539d4bc --- /dev/null +++ b/src/core/render/material.rs @@ -0,0 +1,7 @@ +use std::sync::Arc; + +use bevy_ecs::component::Component; +use vulkano::pipeline::GraphicsPipeline; + +#[derive(Component)] +pub struct Material(pub Arc); diff --git a/src/core/render/material/mod.rs b/src/core/render/material/mod.rs deleted file mode 100644 index 8cccde2..0000000 --- a/src/core/render/material/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod triangle; - -use vulkano::command_buffer::CommandBuffer; - -use crate::vulkan::vulkan_context::VulkanContext; - -pub trait Material { - fn load(&self, vulkan_context: &VulkanContext); - fn bind(&self, command_buffer: &mut CommandBuffer); -} diff --git a/src/core/render/material/triangle.rs b/src/core/render/material/triangle.rs deleted file mode 100644 index c3bafaa..0000000 --- a/src/core/render/material/triangle.rs +++ /dev/null @@ -1,34 +0,0 @@ -use glam::Vec4; -use vulkano::command_buffer::CommandBuffer; - -use super::Material; - -pub mod shaders { - pub mod vs { - vulkano_shaders::shader! { - ty: "vertex", - path: r"res/shaders/vertex.vert", - } - } - - pub mod fs { - vulkano_shaders::shader! { - ty: "fragment", - path: r"res/shaders/vertex.frag", - } - } -} - -pub struct TriangleMaterial { - pub colors: [Vec4; 3], -} - -impl Material for TriangleMaterial { - fn bind(&self, command_buffer: &mut CommandBuffer) { - todo!() - } - - fn load(&self, vulkan_context: &crate::vulkan::vulkan_context::VulkanContext) { - todo!() - } -} diff --git a/src/core/render/vertex.rs b/src/core/render/vertex.rs index fc2ee21..9bf133e 100644 --- a/src/core/render/vertex.rs +++ b/src/core/render/vertex.rs @@ -1,10 +1,10 @@ use std::sync::Arc; +use vulkano::Validated; use vulkano::buffer::{ AllocateBufferError, Buffer, BufferContents, BufferCreateInfo, BufferUsage, Subbuffer, }; use vulkano::memory::allocator::{AllocationCreateInfo, MemoryTypeFilter, StandardMemoryAllocator}; use vulkano::pipeline::graphics::vertex_input::Vertex; -use vulkano::Validated; #[derive(BufferContents, Vertex)] #[repr(C)] diff --git a/src/vulkan/scene.rs b/src/vulkan/scene.rs index 4d1de95..22986ff 100644 --- a/src/vulkan/scene.rs +++ b/src/vulkan/scene.rs @@ -3,9 +3,10 @@ use glam::{Mat3, Mat4, Vec3}; use std::error::Error; use std::sync::Arc; use std::time::Instant; -use vulkano::buffer::Subbuffer; +use vulkano::buffer::{Buffer, BufferCreateInfo, BufferUsage, Subbuffer}; use vulkano::command_buffer::{AutoCommandBufferBuilder, PrimaryAutoCommandBuffer}; use vulkano::descriptor_set::{DescriptorSet, WriteDescriptorSet}; +use vulkano::memory::allocator::{AllocationCreateInfo, MemoryTypeFilter}; use vulkano::pipeline::{GraphicsPipeline, Pipeline, PipelineBindPoint}; use crate::core::render::vertex::Vertex2D; @@ -156,12 +157,19 @@ impl Scene { projection: proj.to_cols_array_2d(), }; - let buffer = vulkan_context - .uniform_buffer_allocator - .allocate_sized() - .unwrap(); - *buffer.write().unwrap() = uniform_data; - - buffer + Buffer::from_data( + vulkan_context.memory_allocator.clone(), + BufferCreateInfo { + usage: BufferUsage::UNIFORM_BUFFER, + ..Default::default() + }, + AllocationCreateInfo { + memory_type_filter: MemoryTypeFilter::PREFER_DEVICE + | MemoryTypeFilter::HOST_SEQUENTIAL_WRITE, + ..Default::default() + }, + uniform_data, + ) + .unwrap() } } diff --git a/src/vulkan/vulkan_context.rs b/src/vulkan/vulkan_context.rs index ea1b29b..bad47de 100644 --- a/src/vulkan/vulkan_context.rs +++ b/src/vulkan/vulkan_context.rs @@ -2,10 +2,6 @@ use std::{any::Any, sync::Arc}; use vulkano::{ Version, VulkanLibrary, - buffer::{ - BufferUsage, - allocator::{SubbufferAllocator, SubbufferAllocatorCreateInfo}, - }, command_buffer::{ AutoCommandBufferBuilder, CommandBufferUsage, PrimaryAutoCommandBuffer, allocator::StandardCommandBufferAllocator, @@ -17,7 +13,7 @@ use vulkano::{ physical::{PhysicalDevice, PhysicalDeviceType}, }, instance::{Instance, InstanceCreateFlags, InstanceCreateInfo, InstanceExtensions}, - memory::allocator::{MemoryTypeFilter, StandardMemoryAllocator}, + memory::allocator::StandardMemoryAllocator, swapchain::Surface, }; use winit::{ @@ -32,7 +28,6 @@ pub struct VulkanContext { pub memory_allocator: Arc, pub command_buffer_allocator: Arc, - pub uniform_buffer_allocator: Arc, pub descriptor_set_allocator: Arc, } @@ -54,16 +49,6 @@ impl From<&EventLoop<()>> for VulkanContext { Default::default(), )); - let uniform_buffer_allocator = Arc::new(SubbufferAllocator::new( - memory_allocator.clone(), - SubbufferAllocatorCreateInfo { - buffer_usage: BufferUsage::UNIFORM_BUFFER, - memory_type_filter: MemoryTypeFilter::PREFER_DEVICE - | MemoryTypeFilter::HOST_SEQUENTIAL_WRITE, - ..Default::default() - }, - )); - let descriptor_set_allocator = Arc::new(StandardDescriptorSetAllocator::new( device.clone(), Default::default(), @@ -75,7 +60,6 @@ impl From<&EventLoop<()>> for VulkanContext { graphics_queue, memory_allocator, command_buffer_allocator, - uniform_buffer_allocator, descriptor_set_allocator, } }