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, 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
84 fn init_buffer_data_client(&mut self, _buffer: &mut Buffer, _data: &BufferData<Self>) {}
85
86 fn init_buffer_desc_client(
87 &mut self,
88 client: &mut Self::Descriptor,
89 buffer_desc: &BufferDescriptor<Self>,
90 ) {
91 buffer_desc.data().create_client(self);
92 *client = buffer_desc.data().borrow_client().clone();
93 }
94
95 fn init_data_accessor_client(
96 &mut self,
97 client: &mut Buffer,
98 buffer_data_acc: &BufferDataAccessor<Self>,
99 ) {
100 buffer_data_acc.desc().data().create_client(self);
101 *client = buffer_data_acc.desc().data().borrow_client().clone();
102 }
103
104 fn create_vertices_client(&mut self, _vertices: &Vertices<Self>) -> Self::Vertices {
105 Self::Vertices::default()
106 }
107
108 fn create_texture_client(&mut self, _vertices: &Texture<Self>) -> Self::Texture {
109 Self::Texture::default()
110 }
111
112 fn create_material_client<M>(
113 &mut self,
114 _object: &crate::Object<M, Self>,
115 _material: &M,
116 ) -> Self::Material
117 where
118 M: Material,
119 {
120 Self::Material::default()
121 }
122 fn init_material_client<M: Material>(&mut self, _client: &mut Self::Material, _material: &M) {}
123}