pub mod buffers_and_images;
pub mod config;
pub mod drawable_object;
pub mod shaders;
pub mod vertex_bindings;
mod vulkan;
pub use crate::{
error::SarektResult,
renderer::shaders::{ShaderBackendHandleTrait, ShaderCode, ShaderLoader},
};
pub use shaders::{ShaderHandle, ShaderType};
pub use vulkan::{
vulkan_buffer_image_functions::VulkanBufferImageFunctions, vulkan_renderer::VulkanRenderer,
};
use crate::{
image_data::ImageData,
renderer::{
buffers_and_images::{
BackendHandleTrait, BufferAndImageLoader, BufferImageHandle, BufferType,
MagnificationMinificationFilter, TextureAddressMode, UniformBufferHandle,
},
drawable_object::DrawableObject,
vertex_bindings::DescriptorLayoutInfo,
},
};
use std::fmt::Debug;
#[cfg(debug_assertions)]
const IS_DEBUG_MODE: bool = true;
#[cfg(not(debug_assertions))]
const IS_DEBUG_MODE: bool = false;
const ENABLE_VALIDATION_LAYERS: bool = IS_DEBUG_MODE;
const MAX_FRAMES_IN_FLIGHT: usize = 2;
pub trait Renderer {
type BL;
type SL;
fn set_rendering_enabled(&mut self, enabled: bool);
fn frame(&self) -> SarektResult<()>;
fn load_shader(
&mut self, spirv: &ShaderCode, shader_type: ShaderType,
) -> SarektResult<ShaderHandle<Self::SL>>
where
Self::SL: ShaderLoader,
<Self::SL as ShaderLoader>::SBH: ShaderBackendHandleTrait + Copy + Debug;
fn load_buffer<BufElem: Sized + Copy>(
&mut self, buffer_type: BufferType, buffer: &[BufElem],
) -> SarektResult<BufferImageHandle<Self::BL>>
where
Self::BL: BufferAndImageLoader,
<Self::BL as BufferAndImageLoader>::BackendHandle: BackendHandleTrait + Copy + Debug;
fn get_buffer(
&self, handle: &BufferImageHandle<Self::BL>,
) -> SarektResult<<Self::BL as BufferAndImageLoader>::BackendHandle>
where
Self::BL: BufferAndImageLoader,
<Self::BL as BufferAndImageLoader>::BackendHandle: BackendHandleTrait + Copy + Debug;
fn load_uniform_buffer<UniformBufElem: Sized + Copy>(
&mut self, buffer: UniformBufElem,
) -> SarektResult<UniformBufferHandle<Self::BL, UniformBufElem>>
where
Self::BL: BufferAndImageLoader,
<Self::BL as BufferAndImageLoader>::BackendHandle: BackendHandleTrait + Copy + Debug;
fn get_uniform_buffer<UniformBufElem: Sized + Copy>(
&self, handle: &UniformBufferHandle<Self::BL, UniformBufElem>,
) -> SarektResult<<Self::BL as BufferAndImageLoader>::UniformBufferDataHandle>
where
Self::BL: BufferAndImageLoader;
fn set_uniform<BufElem: Sized + Copy>(
&self, handle_data: &<Self::BL as BufferAndImageLoader>::UniformBufferDataHandle,
data: &BufElem,
) -> SarektResult<()>
where
Self::BL: BufferAndImageLoader;
fn load_image_with_staging_initialization(
&mut self, pixels: impl ImageData, magnification_filter: MagnificationMinificationFilter,
minification_filter: MagnificationMinificationFilter, address_x: TextureAddressMode,
address_y: TextureAddressMode, address_z: TextureAddressMode, mip_levels: u32,
) -> SarektResult<BufferImageHandle<Self::BL>>
where
Self::BL: BufferAndImageLoader,
<Self::BL as BufferAndImageLoader>::BackendHandle: BackendHandleTrait + Copy + Debug;
fn get_image(
&self, handle: &BufferImageHandle<Self::BL>,
) -> SarektResult<<Self::BL as BufferAndImageLoader>::BackendHandle>
where
Self::BL: BufferAndImageLoader,
<Self::BL as BufferAndImageLoader>::BackendHandle: BackendHandleTrait + Copy + Debug;
fn recreate_swapchain(&mut self, width: u32, height: u32) -> SarektResult<()>;
fn get_frame_count(&self) -> u64;
}
pub trait Drawer {
type R;
fn draw<UniformBufElem>(
&self, object: &DrawableObject<Self::R, UniformBufElem>,
) -> SarektResult<()>
where
UniformBufElem: Sized + Copy + DescriptorLayoutInfo,
Self::R: Renderer,
<Self::R as Renderer>::BL: BufferAndImageLoader,
<<Self::R as Renderer>::BL as BufferAndImageLoader>::BackendHandle:
BackendHandleTrait + Copy + Debug;
}