| 485 | self.material_by_source.remove(&source_key(source)); |
| 486 | self.material_source_by.remove(&id); |
| 487 | self.material_by.remove(&id); |
| 488 | self.material_revision = self.material_revision.wrapping_add(1); |
| 489 | self.clear_material_meta(id); |
| 490 | } |
| 491 | |
| 492 | #[inline] |
| 493 | pub fn create_mesh(&mut self, source: &str, reserved: bool) -> MeshID { |
| 494 | let key = source_key(source); |
| 495 | if let Some(id) = self.mesh_by_source.get(&key).copied() { |
| 496 | if self.has_mesh(id) { |
| 497 | if reserved { |
| 498 | self.set_mesh_reserved(id, true); |
| 499 | } |
| 500 | self.log_resource_reused("mesh", id.index(), id.generation(), source, reserved); |
| 501 | return id; |
| 502 | } |
| 503 | self.purge_stale_mesh_source(source, id); |
| 504 | } |
| 505 | let (index, generation) = self.meshes.create_parts(); |
| 506 | let id = MeshID::from_parts(index, generation); |
| 507 | self.mesh_by_source.insert(key, id); |
| 508 | self.mesh_source_by.insert(id, source.to_string()); |
| 509 | self.set_mesh_source_slot(index, source); |
| 510 | self.set_mesh_meta( |
| 511 | id, |
| 512 | ResourceMeta { |
| 513 | reserved, |
| 514 | ..ResourceMeta::default() |
| 515 | }, |