You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.4 KiB
75 lines
2.4 KiB
use crate::canvas::canvas_state::{CanvasTextureHandle, CanvasImageHandle};
|
|
use vulkano::image::{ImmutableImage, AttachmentImage};
|
|
use std::sync::Arc;
|
|
use vulkano::format::{Format, R8Unorm};
|
|
use vulkano::sampler::Sampler;
|
|
use vulkano::descriptor::DescriptorSet;
|
|
use vulkano::descriptor::descriptor_set::PersistentDescriptorSet;
|
|
use vulkano::buffer::{CpuAccessibleBuffer, BufferAccess};
|
|
use vulkano::pipeline::GraphicsPipelineAbstract;
|
|
use crate::canvas::canvas_text::CanvasFontHandle;
|
|
use rusttype::Font;
|
|
|
|
#[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,
|
|
pipeline: Arc<dyn GraphicsPipelineAbstract + Sync + Send>,
|
|
sampler: Arc<Sampler>) -> Box<dyn DescriptorSet + Send + Sync> {
|
|
let o: Box<dyn DescriptorSet + Send + Sync> = Box::new(
|
|
PersistentDescriptorSet::start(
|
|
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, pipeline: Arc<dyn GraphicsPipelineAbstract + Sync + Send>)
|
|
-> Box<dyn DescriptorSet + Send + Sync> {
|
|
let o: Box<dyn DescriptorSet + Send + Sync> = Box::new(
|
|
PersistentDescriptorSet::start(
|
|
pipeline.clone(), 0,
|
|
)
|
|
.add_image(self.buffer.clone()).unwrap()
|
|
.build().unwrap());
|
|
o
|
|
}
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct CanvasFont {
|
|
pub(crate) handle: Arc<CanvasImageHandle>,
|
|
pub(crate) buffer: Arc<(dyn BufferAccess + Send + Sync)>, // Font atlas
|
|
pub(crate) font: Font<'static>,
|
|
pub(crate) name: String,
|
|
|
|
}
|
|
|
|
impl CanvasFont {
|
|
pub fn get_descriptor_set(pipeline: Arc<dyn GraphicsPipelineAbstract + Sync + Send>)
|
|
-> Box<dyn DescriptorSet + Send + Sync> {
|
|
let o: Box<dyn DescriptorSet + Send + Sync> = Box::new(
|
|
PersistentDescriptorSet::start(
|
|
pipeline.clone(), 0,
|
|
)
|
|
.build().unwrap());
|
|
o
|
|
}
|
|
}
|