Skip to content

Commit

Permalink
build-in surfaces + previewer
Browse files Browse the repository at this point in the history
  • Loading branch information
mrDIMAS committed Jun 25, 2024
1 parent 5914d47 commit 8545452
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 0 deletions.
42 changes: 42 additions & 0 deletions editor/src/asset/preview/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ impl AssetPreviewGeneratorsCollection {
this.add(CurveResourceState::type_uuid(), CurvePreview);
this.add(Font::type_uuid(), FontPreview);
this.add(UserInterface::type_uuid(), UserInterfacePreview);
this.add(SurfaceData::type_uuid(), SurfaceDataPreview);
this
}

Expand Down Expand Up @@ -403,6 +404,47 @@ impl AssetPreviewGenerator for ModelPreview {
}
}

pub struct SurfaceDataPreview;

impl AssetPreviewGenerator for SurfaceDataPreview {
fn generate_scene(
&mut self,
resource: &UntypedResource,
_resource_manager: &ResourceManager,
scene: &mut Scene,
) -> Handle<Node> {
if let Some(surface) = resource.try_cast::<SurfaceData>() {
MeshBuilder::new(BaseBuilder::new())
.with_surfaces(vec![SurfaceBuilder::new(surface.clone()).build()])
.build(&mut scene.graph)
} else {
Handle::NONE
}
}

fn generate_preview(
&mut self,
resource: &UntypedResource,
engine: &mut Engine,
) -> Option<AssetPreviewTexture> {
let surface = resource.try_cast::<SurfaceData>()?;
let mut scene = Scene::new();
scene.rendering_options.ambient_lighting_color = Color::opaque(180, 180, 180);
MeshBuilder::new(BaseBuilder::new())
.with_surfaces(vec![SurfaceBuilder::new(surface.clone()).build()])
.build(&mut scene.graph);
render_scene_to_texture(engine, &mut scene, Vector2::new(128.0, 128.0))
}

fn simple_icon(
&self,
_resource: &UntypedResource,
_resource_manager: &ResourceManager,
) -> Option<UntypedResource> {
load_image(include_bytes!("../../../resources/model.png"))
}
}

pub struct ShaderPreview;

impl AssetPreviewGenerator for ShaderPreview {
Expand Down
15 changes: 15 additions & 0 deletions fyrox-impl/src/engine/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ use std::{

use crate::plugin::dynamic::DynamicPlugin;
use crate::plugin::{DynamicPluginState, PluginContainer};
use crate::scene::mesh::surface;
use crate::scene::mesh::surface::{SurfaceData, SurfaceDataLoader};
use fyrox_core::futures::future::join_all;
use fyrox_core::notify;
Expand Down Expand Up @@ -1202,6 +1203,20 @@ pub(crate) fn initialize_resource_manager_loaders(
);
}

for material in [
surface::CUBE.clone(),
surface::QUAD.clone(),
surface::CYLINDER.clone(),
surface::SPHERE.clone(),
surface::CONE.clone(),
surface::TORUS.clone(),
] {
state.built_in_resources.insert(
material.kind().path_owned().unwrap(),
material.clone().into_untyped(),
);
}

state.constructors_container.add::<Texture>();
state.constructors_container.add::<Shader>();
state.constructors_container.add::<Model>();
Expand Down
49 changes: 49 additions & 0 deletions fyrox-impl/src/scene/mesh/surface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ use crate::{
};
use fxhash::{FxHashMap, FxHasher};
use half::f16;
use lazy_static::lazy_static;
use std::{
any::Any,
error::Error,
Expand Down Expand Up @@ -1455,3 +1456,51 @@ impl ResourceLoader for SurfaceDataLoader {
})
}
}

lazy_static! {
/// Cube surface resource.
pub static ref CUBE: SurfaceResource = SurfaceResource::new_ok(
"__CubeSurface".into(),
SurfaceData::make_cube(Matrix4::identity()),
);
}

lazy_static! {
/// Quad surface resource.
pub static ref QUAD: SurfaceResource = SurfaceResource::new_ok(
"__QuadSurface".into(),
SurfaceData::make_quad(&Matrix4::identity()),
);
}

lazy_static! {
/// Cylinder surface resource.
pub static ref CYLINDER: SurfaceResource = SurfaceResource::new_ok(
"__CylinderSurface".into(),
SurfaceData::make_cylinder(32, 1.0, 1.0, true, &Matrix4::identity()),
);
}

lazy_static! {
/// Sphere surface resource.
pub static ref SPHERE: SurfaceResource = SurfaceResource::new_ok(
"__SphereSurface".into(),
SurfaceData::make_sphere(32, 32, 1.0, &Matrix4::identity()),
);
}

lazy_static! {
/// Cone surface resource.
pub static ref CONE: SurfaceResource = SurfaceResource::new_ok(
"__ConeSurface".into(),
SurfaceData::make_cone(32, 1.0, 1.0, &Matrix4::identity()),
);
}

lazy_static! {
/// Torus surface resource.
pub static ref TORUS: SurfaceResource = SurfaceResource::new_ok(
"__TorusSurface".into(),
SurfaceData::make_torus(1.0, 0.25,32, 32, &Matrix4::identity()),
);
}

0 comments on commit 8545452

Please sign in to comment.