34 lines
1.1 KiB
Rust
34 lines
1.1 KiB
Rust
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<shaders::ShaderHandle, String>;
|
|
// 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);
|
|
// }
|