use crate::shaders; pub trait RenderBackend { type ShaderSource; type DrawCommand; fn new() -> Self where Self: Sized; fn resume(&mut self, event_loop: &winit::event_loop::ActiveEventLoop); fn resize(&mut self, width: u32, height: u32); fn draw(&self, cmd: &Self::DrawCommand); fn suspend(&mut self); // // Frame // fn begin_frame(&mut self) -> FrameContext; // fn end_frame(&mut self); // // // Resources fn create_shader(&mut self, desc: Self::ShaderSource) -> Result; // fn create_buffer(&mut self, data: &[u8], usage: BufferUsage) -> BufferHandle; // fn create_texture(&mut self, desc: TextureDescriptor) -> TextureHandle; // // // Material = shader + uniforms + textures bundled // fn create_material(&mut self, shader: ShaderHandle) -> MaterialHandle; // fn set_material_param(&mut self, material: MaterialHandle, name: &str, value: UniformValue); } // pub struct FrameContext<'a> { // backend: &'a mut dyn RenderBackend, // } // // impl FrameContext<'_> { // pub fn draw(&mut self, mesh: &Mesh, material: MaterialHandle, transform: Mat4); // }