diff --git a/fyrox-impl/src/engine/mod.rs b/fyrox-impl/src/engine/mod.rs index b76d59aa3..e4e8ffcd2 100644 --- a/fyrox-impl/src/engine/mod.rs +++ b/fyrox-impl/src/engine/mod.rs @@ -99,6 +99,7 @@ use std::{ use crate::plugin::dynamic::DynamicPlugin; use crate::plugin::{DynamicPluginState, PluginContainer}; +use crate::scene::mesh::surface::SurfaceData; use fyrox_core::futures::future::join_all; use fyrox_core::notify; use fyrox_core::notify::{EventKind, RecursiveMode, Watcher}; @@ -1210,6 +1211,7 @@ pub(crate) fn initialize_resource_manager_loaders( state.constructors_container.add::(); state.constructors_container.add::(); state.constructors_container.add::(); + state.constructors_container.add::(); let loaders = &mut state.loaders; loaders.set(model_loader); diff --git a/fyrox-impl/src/renderer/bundle.rs b/fyrox-impl/src/renderer/bundle.rs index a4c7bb99c..177ae20f0 100644 --- a/fyrox-impl/src/renderer/bundle.rs +++ b/fyrox-impl/src/renderer/bundle.rs @@ -355,7 +355,7 @@ impl RenderDataBundleStorageTrait for RenderDataBundleStorage { // Create temporary surface data (valid for one frame). let data = SurfaceResource::new_ok( ResourceKind::Embedded, - SurfaceData::new(vertex_buffer, triangle_buffer, true), + SurfaceData::new(vertex_buffer, triangle_buffer), ); self.bundle_map.insert(key, self.bundles.len()); diff --git a/fyrox-impl/src/renderer/light/mod.rs b/fyrox-impl/src/renderer/light/mod.rs index aacdefdc3..2562fb7cc 100644 --- a/fyrox-impl/src/renderer/light/mod.rs +++ b/fyrox-impl/src/renderer/light/mod.rs @@ -162,7 +162,6 @@ impl DeferredLightRenderer { TriangleDefinition([20, 21, 22]), TriangleDefinition([20, 22, 23]), ]), - true, ), GeometryBufferKind::StaticDraw, state, diff --git a/fyrox-impl/src/resource/fbx/mod.rs b/fyrox-impl/src/resource/fbx/mod.rs index 9485ac663..e78854791 100644 --- a/fyrox-impl/src/resource/fbx/mod.rs +++ b/fyrox-impl/src/resource/fbx/mod.rs @@ -237,8 +237,8 @@ enum FbxMeshBuilder { impl FbxMeshBuilder { fn build(self) -> SurfaceData { match self { - FbxMeshBuilder::Static(builder) => SurfaceData::from_raw_mesh(builder.build(), false), - FbxMeshBuilder::Animated(builder) => SurfaceData::from_raw_mesh(builder.build(), false), + FbxMeshBuilder::Static(builder) => SurfaceData::from_raw_mesh(builder.build()), + FbxMeshBuilder::Animated(builder) => SurfaceData::from_raw_mesh(builder.build()), } } } @@ -279,7 +279,7 @@ async fn create_surfaces( surface_data.blend_shapes_container = make_blend_shapes_container(&surface_data.vertex_buffer, data.blend_shapes); let mut surface = Surface::new(SurfaceResource::new_ok( - ResourceKind::Embedded, + ResourceKind::External(model_path.to_path_buf()), surface_data, )); surface.vertex_weights = data.skin_data; @@ -291,7 +291,7 @@ async fn create_surfaces( surface_data.blend_shapes_container = make_blend_shapes_container(&surface_data.vertex_buffer, data.blend_shapes); let mut surface = Surface::new(SurfaceResource::new_ok( - ResourceKind::Embedded, + ResourceKind::External(model_path.to_path_buf()), surface_data, )); surface.vertex_weights = data.skin_data; diff --git a/fyrox-impl/src/scene/mesh/mod.rs b/fyrox-impl/src/scene/mesh/mod.rs index db2b07490..9f66f3d84 100644 --- a/fyrox-impl/src/scene/mesh/mod.rs +++ b/fyrox-impl/src/scene/mesh/mod.rs @@ -201,7 +201,6 @@ impl RenderDataBundleStorageTrait for BatchContainer { VertexBuffer::new_with_layout(layout, 0, BytesStorage::with_capacity(4096)) .unwrap(), TriangleBuffer::new(Vec::with_capacity(4096)), - false, ), ), material: material.clone(), @@ -238,7 +237,6 @@ impl RenderDataBundleStorageTrait for BatchContainer { SurfaceData::new( src_data.vertex_buffer.clone_empty(4096), TriangleBuffer::new(Vec::with_capacity(4096)), - false, ), ), material: material.clone(), diff --git a/fyrox-impl/src/scene/mesh/surface.rs b/fyrox-impl/src/scene/mesh/surface.rs index ff366d5bf..43315ca73 100644 --- a/fyrox-impl/src/scene/mesh/surface.rs +++ b/fyrox-impl/src/scene/mesh/surface.rs @@ -198,9 +198,6 @@ pub struct SurfaceData { pub geometry_buffer: TriangleBuffer, /// A container for blend shapes. pub blend_shapes_container: Option, - // If true - indicates that surface was generated and does not have reference - // resource. Procedural data will be serialized. - is_embedded: bool, #[reflect(hidden)] pub(crate) cache_index: Arc, } @@ -229,15 +226,12 @@ impl ResourceData for SurfaceData { } impl SurfaceData { - /// Creates new data source using given vertices and indices. `is_procedural` flags affects serialization - when it - /// is `true` the content of the vertex and triangle buffers will be serialized. It is useful if you need to save - /// surfaces with procedural content. - pub fn new(vertex_buffer: VertexBuffer, triangles: TriangleBuffer, is_embedded: bool) -> Self { + /// Creates new data source using given vertices and indices. + pub fn new(vertex_buffer: VertexBuffer, triangles: TriangleBuffer) -> Self { Self { vertex_buffer, geometry_buffer: triangles, blend_shapes_container: None, - is_embedded, cache_index: Arc::new(AtomicIndex::unassigned()), } } @@ -273,7 +267,7 @@ impl SurfaceData { /// Converts raw mesh into "renderable" mesh. It is useful to build procedural meshes. See [`RawMesh`] docs for more /// info. - pub fn from_raw_mesh(raw: RawMesh, is_embedded: bool) -> Self + pub fn from_raw_mesh(raw: RawMesh) -> Self where T: VertexTrait, { @@ -281,7 +275,6 @@ impl SurfaceData { vertex_buffer: VertexBuffer::new(raw.vertices.len(), raw.vertices).unwrap(), geometry_buffer: TriangleBuffer::new(raw.triangles), blend_shapes_container: Default::default(), - is_embedded, cache_index: Arc::new(AtomicIndex::unassigned()), } } @@ -407,7 +400,6 @@ impl SurfaceData { Self::new( VertexBuffer::new(vertices.len(), vertices).unwrap(), TriangleBuffer::new(triangles), - true, ) } @@ -446,7 +438,6 @@ impl SurfaceData { Self::new( VertexBuffer::new(vertices.len(), vertices).unwrap(), TriangleBuffer::new(triangles), - true, ) } @@ -485,7 +476,6 @@ impl SurfaceData { TriangleDefinition([0, 1, 2]), TriangleDefinition([0, 2, 3]), ]), - true, ); data.calculate_tangents().unwrap(); data.transform_geometry(transform).unwrap(); @@ -590,7 +580,7 @@ impl SurfaceData { } } - let mut data = Self::from_raw_mesh(builder.build(), true); + let mut data = Self::from_raw_mesh(builder.build()); data.calculate_tangents().unwrap(); data.transform_geometry(transform).unwrap(); data @@ -668,7 +658,7 @@ impl SurfaceData { )); } - let mut data = Self::from_raw_mesh(builder.build(), true); + let mut data = Self::from_raw_mesh(builder.build()); data.calculate_tangents().unwrap(); data.transform_geometry(transform).unwrap(); data @@ -725,7 +715,6 @@ impl SurfaceData { let mut data = Self::new( VertexBuffer::new(vertices.len(), vertices).unwrap(), TriangleBuffer::new(triangles), - true, ); data.calculate_tangents().unwrap(); data.transform_geometry(transform).unwrap(); @@ -840,7 +829,7 @@ impl SurfaceData { )); } - let mut data = Self::from_raw_mesh(builder.build(), true); + let mut data = Self::from_raw_mesh(builder.build()); data.calculate_tangents().unwrap(); data.transform_geometry(transform).unwrap(); data @@ -1019,7 +1008,6 @@ impl SurfaceData { let mut data = Self::new( VertexBuffer::new(vertices.len(), vertices).unwrap(), TriangleBuffer::new(triangles), - true, ); data.calculate_tangents().unwrap(); data.transform_geometry(&transform).unwrap(); @@ -1040,24 +1028,14 @@ impl SurfaceData { self.geometry_buffer.modify().clear(); self.vertex_buffer.modify().clear(); } - - /// Marks surface's content as procedural (created from code) or not. Content of procedural surfaces will - /// be serialized. It is useful if you need to save procedural surfaces to disk or some other storage. - pub fn set_embedded(&mut self, is_embedded: bool) { - self.is_embedded = is_embedded; - } } impl Visit for SurfaceData { fn visit(&mut self, name: &str, visitor: &mut Visitor) -> VisitResult { let mut region = visitor.enter_region(name)?; - self.is_embedded.visit("IsProcedural", &mut region)?; - - if self.is_embedded { - self.vertex_buffer.visit("VertexBuffer", &mut region)?; - self.geometry_buffer.visit("GeometryBuffer", &mut region)? - } + self.vertex_buffer.visit("VertexBuffer", &mut region)?; + self.geometry_buffer.visit("GeometryBuffer", &mut region)?; Ok(()) } diff --git a/fyrox-impl/src/scene/terrain/geometry.rs b/fyrox-impl/src/scene/terrain/geometry.rs index d9baf7572..a32a83ec0 100644 --- a/fyrox-impl/src/scene/terrain/geometry.rs +++ b/fyrox-impl/src/scene/terrain/geometry.rs @@ -29,7 +29,6 @@ impl TerrainGeometry { let mut surface_data = SurfaceData::new( VertexBuffer::new::(0, vec![]).unwrap(), TriangleBuffer::default(), - false, ); let mut vertex_buffer_mut = surface_data.vertex_buffer.modify();