hexga_engine_render/
render.rs

1use crate::*;
2
3/*
4pub trait LoopDraw
5{
6    fn draw(&mut self);
7}
8impl LoopDraw for () { fn draw(&mut self) {} }
9*/
10
11// #proper_error
12// miniquad render wrapper
13pub trait RenderBackend
14{
15    fn new_buffer   (&mut self, data: BufferData, source : BufferSource) -> RawBufferID;
16    fn buffer_update(&mut self, dest: RawBufferID, source: &BufferSource);
17    fn delete_buffer(&mut self, id : RawBufferID);
18
19    fn new_texture             (&mut self, data : &TextureData) -> RawTextureID;
20    fn texture_update          (&mut self, dest : RawTextureID, data : &TextureData);
21    fn texture_set_mag_filter  (&mut self, id : RawTextureID, filter: FilterMode);
22    fn texture_set_wrap        (&mut self, id : RawTextureID, wrap : (TextureWrap, TextureWrap));
23    fn texture_generate_mipmaps(&mut self, id : RawTextureID);
24    fn texture_read_pixels     (&mut self, id : RawTextureID, dest : &mut TextureSource);
25    fn texture_update_portion  (&mut self, id : RawTextureID, rect : Rect2P, source : &texture::TextureSource);
26    fn delete_texture          (&mut self, id : RawTextureID);
27
28    fn new_render_pass   (&mut self, texture : RawTextureID, depth : Option<RawTextureID>) -> RawRenderPassID;
29    fn delete_render_pass(&mut self, id: RawRenderPassID);
30
31    fn new_pipeline   (&mut self, data : &PipelineData) -> RawPipelineID;
32    fn apply_pipeline (&mut self, pipeline: RawPipelineID);
33    fn delete_pipeline(&mut self, pipeline: RawPipelineID);
34
35    fn new_shader   (&mut self, data : &ShaderData) -> Result<RawShaderID, ShaderError>;
36    fn delete_shader(&mut self, program: RawShaderID);
37
38    fn apply_viewport(&mut self, viewport : Rect2P);
39    fn apply_scissor (&mut self, scissor : Rect2P);
40
41    fn apply_bindings_view(&mut self, binding : BindingsView);
42    fn apply_bindings(&mut self, binding : &Bindings) { self.apply_bindings_view(binding.view()); }
43
44    fn apply_uniforms(&mut self, uniforms: UniformsSource) { self.apply_uniforms_from_bytes(&*uniforms.source); }
45    fn apply_uniforms_from_bytes(&mut self, uniform_ptr: &[u8]);
46
47    fn clear(&mut self, data : ClearData);
48
49    fn begin_default_pass(&mut self, action: PassAction);
50    fn begin_pass(&mut self, pass: Option<RawRenderPassID>, action: PassAction);
51    fn end_render_pass(&mut self);
52
53    fn end_frame(&mut self);
54    fn draw(&mut self, base_element: usize, num_elements: usize, num_instances: usize);
55}
56
57
58impl RenderBackend for ()
59{
60    fn new_buffer   (&mut self, _: BufferData, _ : BufferSource) -> RawBufferID { RawBufferID::default() }
61    fn buffer_update(&mut self, _: RawBufferID, _: &BufferSource) {}
62    fn delete_buffer(&mut self,_id : RawBufferID) {}
63
64    fn new_texture             (&mut self, _ : &TextureData) -> RawTextureID { RawTextureID::default() }
65    fn texture_update          (&mut self, _ : RawTextureID, _ : &TextureData) {}
66    fn texture_set_mag_filter  (&mut self, _ : RawTextureID, _: FilterMode) {}
67    fn texture_set_wrap        (&mut self, _ : RawTextureID, _ : (TextureWrap, TextureWrap)) {}
68    fn texture_generate_mipmaps(&mut self, _ : RawTextureID) {}
69    fn texture_read_pixels     (&mut self, _ : RawTextureID, _ : &mut TextureSource) {}
70    fn texture_update_portion  (&mut self, _ : RawTextureID, _ : Rect2P, _ : &texture::TextureSource) {}
71    fn delete_texture          (&mut self, _ : RawTextureID) {}
72
73    fn new_render_pass   (&mut self, _ : RawTextureID, _ : Option<RawTextureID>) -> RawRenderPassID { RawRenderPassID::default() }
74    fn delete_render_pass(&mut self, _: RawRenderPassID) {}
75    fn new_pipeline   (&mut self, _ : &PipelineData) -> RawPipelineID { RawPipelineID::default() }
76    fn apply_pipeline (&mut self, _: RawPipelineID) {}
77    fn delete_pipeline(&mut self, _: RawPipelineID) {}
78    fn new_shader   (&mut self, _ : &ShaderData) -> Result<RawShaderID, ShaderError> { Ok(RawShaderID::default()) }
79    fn delete_shader(&mut self, _: RawShaderID) {}
80    fn apply_viewport(&mut self, _ : Rect2P) {}
81    fn apply_scissor (&mut self, _ : Rect2P) {}
82    fn apply_bindings_view(&mut self, _ : BindingsView) {}
83    fn apply_uniforms_from_bytes(&mut self, _: &[u8]) {}
84    fn clear(&mut self, _ : ClearData) {}
85    fn begin_default_pass(&mut self, _: PassAction) {}
86    fn begin_pass(&mut self, _: Option<RawRenderPassID>, _: PassAction) {}
87    fn end_render_pass(&mut self) {}
88    fn end_frame(&mut self) {}
89    fn draw(&mut self, _: usize, _: usize, _: usize) {}
90}