1 type Mesh = 2 var format : VertexFormat 3 val vertex_buffer : VertexBuffer 4 val index_buffer : IndexBuffer 5 var index_count : u32 6 val memory : Atom<Option<MeshMemory>> 7 let token : Token @late 8 9 def discard = token.discard 10 11 object Mesh = 12 def from_memory (memory : Atom<Option<MeshMemory>>) = 13 let vertex_buffer = VertexBuffer.create 14 let index_buffer = IndexBuffer.create 15 let mesh = Mesh 16 format = VertexFormat.regular 17 =vertex_buffer =index_buffer 18 index_count = 0 19 =memory 20 21 let token = memory.bind { maybe_x -> 22 let is_empty = maybe_x.is_none || maybe_x.unwrap.vertices.is_empty 23 if is_empty then 24 mesh.index_count = 0 25 else 26 let x = maybe_x.unwrap 27 mesh.vertex_buffer.ensure_size x.vertices.size 28 update x.vertices.as_slice BarrierFlags@all 29 30 mesh.index_buffer.ensure_size (x.indices.size * 4) 31 update x.indices.as_slice BarrierFlags@all 32 33 mesh.format = case x.format of 34 MeshFormat/Regular -> VertexFormat.regular 35 MeshFormat/Skinned -> VertexFormat.skinned 36 37 mesh.index_count = x.indices.size } 38 39 mesh.token = token 40 41 mesh 42