diff --git a/lib/bsp_loader/src/bsp.rs b/lib/bsp_loader/src/bsp.rs index e8cfbdd..6c4897e 100644 --- a/lib/bsp_loader/src/bsp.rs +++ b/lib/bsp_loader/src/bsp.rs @@ -72,7 +72,7 @@ pub fn convert<'a>( let color=mb.acquire_color_id(glam::Vec4::ONE); let mut graphics_groups=Vec::new(); - let mut physics_group=model::IndexedPhysicsGroup::default(); + let mut render_id_to_graphics_group_id=std::collections::HashMap::new(); let polygon_groups=world_model.faces().enumerate().map(|(polygon_group_id,face)|{ let polygon_group_id=model::PolygonGroupId::new(polygon_group_id as u32); let face_texture=face.texture(); @@ -81,10 +81,6 @@ pub fn convert<'a>( let texture_transform_u=glam::Vec4::from_array(face_texture.texture_transforms_u)/(face_texture_data.width as f32); let texture_transform_v=glam::Vec4::from_array(face_texture.texture_transforms_v)/(face_texture_data.height as f32); - //this automatically figures out what the texture is trying to do and creates - //a render config for it, and then returns the id to that render config - let render_id=render_config_deferred_loader.acquire_render_config_id(Some(Cow::Borrowed(face_texture_data.name()))); - //normal let normal=mb.acquire_normal_id(valve_transform(face.normal().into())); let mut polygon_iter=face.vertex_positions().map(|vertex_position| @@ -102,11 +98,19 @@ pub fn convert<'a>( ).to_vec() }).collect(); if face.is_visible(){ - //TODO: deduplicate graphics groups by render id - graphics_groups.push(model::IndexedGraphicsGroup{ - render:render_id, - groups:vec![polygon_group_id], - }) + //this automatically figures out what the texture is trying to do and creates + //a render config for it, and then returns the id to that render config + let render_id=render_config_deferred_loader.acquire_render_config_id(Some(Cow::Borrowed(face_texture_data.name()))); + //deduplicate graphics groups by render id + let graphics_group_id=*render_id_to_graphics_group_id.entry(render_id).or_insert_with(||{ + let graphics_group_id=graphics_groups.len(); + graphics_groups.push(model::IndexedGraphicsGroup{ + render:render_id, + groups:vec![], + }); + graphics_group_id + }); + graphics_groups[graphics_group_id].groups.push(polygon_group_id); } model::PolygonGroup::PolygonList(model::PolygonList::new(polygon_list)) }).collect();