1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
use crate::canvas::{CanvasTextureHandle, CanvasImageHandle}; use vulkano::image::{ImmutableImage, AttachmentImage}; use std::sync::Arc; use vulkano::format::Format; use crate::canvas_shader::CanvasShader; use vulkano::sampler::Sampler; use vulkano::descriptor::DescriptorSet; use vulkano::descriptor::descriptor_set::PersistentDescriptorSet; #[derive(Clone)] pub struct CanvasTexture { pub(crate) handle: Arc<CanvasTextureHandle>, pub(crate) buffer: Arc<ImmutableImage<Format>>, pub(crate) name: String, pub(crate) size: (u32, u32), } impl CanvasTexture { pub fn get_descriptor_set(&self, shader: Arc<CanvasShader>, sampler: Arc<Sampler>) -> Box<dyn DescriptorSet + Send + Sync> { let o: Box<dyn DescriptorSet + Send + Sync> = Box::new( PersistentDescriptorSet::start( shader.clone().get_pipeline().clone(), 0, ) .add_sampled_image(self.buffer.clone(), sampler.clone()).unwrap() .build().unwrap()); o } } #[derive(Clone)] pub struct CanvasImage { pub(crate) handle: Arc<CanvasImageHandle>, pub(crate) buffer: Arc<AttachmentImage>, pub(crate) size: (u32, u32), } impl CanvasImage { pub fn get_descriptor_set(&self, shader: Arc<CanvasShader>) -> Box<dyn DescriptorSet + Send + Sync> { let o: Box<dyn DescriptorSet + Send + Sync> = Box::new( PersistentDescriptorSet::start( shader.clone().get_pipeline().clone(), 0, ) .add_image(self.buffer.clone()).unwrap() .build().unwrap()); o } }