mod3d_base/example_client/
renderable.rs1use std::rc::Rc;
3
4use crate::{
5 AccessorClient, BufferClient, BufferData, BufferDataAccessor, BufferDescriptor,
6 BufferIndexAccessor, DescriptorClient, Material, MaterialClient, Renderable, Texture,
7 TextureClient, VertexAttr, Vertices, VerticesClient,
8};
9
10#[derive(Debug, Clone)]
19pub struct Buffer(Rc<u32>);
20
21impl std::fmt::Display for Buffer {
23 fn fmt(&self, fmt: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
24 write!(fmt, "{}", self.0)
25 }
26}
27
28impl Default for Buffer {
30 fn default() -> Self {
31 Self(Rc::new(0))
32 }
33}
34
35impl BufferClient for Buffer {}
37
38impl AccessorClient for Buffer {}
40
41#[derive(Debug, Clone, Default)]
47pub struct Id(u32);
48
49impl std::fmt::Display for Id {
51 fn fmt(&self, fmt: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
52 write!(fmt, "{}", self.0)
53 }
54}
55
56impl DescriptorClient for Buffer {}
58
59impl MaterialClient for Id {}
61
62impl TextureClient for Id {}
64
65impl VerticesClient for Id {}
67
68impl Renderable for Id {
70 type Buffer = Buffer;
71 type DataAccessor = Buffer;
72 type IndexAccessor = Buffer;
73 type Descriptor = Buffer;
74 type Texture = Id;
75 type Material = Id;
76 type Vertices = Id;
77 fn init_index_accessor_client(
78 &mut self,
79 _client: &mut Self::DataAccessor,
80 _buffer_view: &BufferIndexAccessor<Self>,
81 ) {
82 }
83 fn init_buffer_data_client(&mut self, _buffer: &mut Buffer, _data: &BufferData<Self>) {}
84 fn init_buffer_desc_client(
85 &mut self,
86 client: &mut Self::Descriptor,
87 buffer_desc: &BufferDescriptor<Self>,
88 ) {
89 buffer_desc.data.create_client(self);
90 *client = buffer_desc.data.borrow_client().clone();
91 }
92 fn init_buffer_view_client(
93 &mut self,
94 client: &mut Buffer,
95 buffer_view: &BufferDataAccessor<Self>,
96 _attr: VertexAttr,
97 ) {
98 buffer_view.data.create_client(self);
99 *client = buffer_view.data.borrow_client().clone();
100 }
101 fn create_vertices_client(&mut self, _vertices: &Vertices<Self>) -> Self::Vertices {
102 Self::Vertices::default()
103 }
104 fn create_texture_client(&mut self, _vertices: &Texture<Self>) -> Self::Texture {
105 Self::Texture::default()
106 }
107 fn create_material_client<M>(
108 &mut self,
109 _object: &crate::Object<M, Self>,
110 _material: &M,
111 ) -> Self::Material
112 where
113 M: Material,
114 {
115 Self::Material::default()
116 }
117 fn init_material_client<M: Material>(&mut self, _client: &mut Self::Material, _material: &M) {}
118}