35 auto& thumbnail = gen.thumbnails[asset.
uid()];
36 auto current_fbo = thumbnail.get();
38 if(gen.remaining > 0 && thumbnail.needs_regeneration)
42 auto& scn = gen.get_scene();
45 bool focus_camera = frames == 1;
48 auto& rpath = ctx.get_cached<rendering_system>();
49 for(
int i = 0;
i < frames;
i++)
51 rpath.on_frame_update(scn, dt);
52 rpath.on_frame_before_render(scn, dt);
55 if(result.object && !focus_camera)
57 std::array<entt::handle, 1> entities = {result.object};
62 auto new_fbo = rpath.render_scene(scn, dt);
63 thumbnail.set(new_fbo);
65 catch(
const std::exception& e)
75auto get_thumbnail_impl(thumbnail_manager::generator& gen,
83 return transparent.
get();
91 return make_thumbnail(gen, asset, frames, dt);
100 auto thumbnail = get_thumbnail_impl(gen_, asset, thumbnails_.transparent, thumbnails_.loading);
107 return thumbnails_.mesh.get();
113 auto thumbnail = get_thumbnail_impl(gen_, asset, thumbnails_.transparent, thumbnails_.loading);
120 return thumbnails_.material.get();
129 return thumbnails_.transparent.get();
131 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.ui_tree.get();
139 return thumbnails_.transparent.get();
141 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.style_sheet.get();
149 return thumbnails_.transparent.get();
151 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.script.get();
160 return thumbnails_.transparent.get();
162 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.physics_material.get();
170 return thumbnails_.transparent.get();
172 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.audio_clip.get();
180 return thumbnails_.transparent.get();
182 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.font.get();
190 return thumbnails_.transparent.get();
192 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.animation.get();
200 return thumbnails_.transparent.get();
203 return !asset.
is_ready() ? thumbnails_.loading.get() : asset.
get();
211 return thumbnails_.transparent.get();
213 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.shader.get();
221 auto thumbnail = get_thumbnail_impl(gen_, asset, thumbnails_.transparent, thumbnails_.loading, frames, dt);
228 return thumbnails_.prefab.get();
236 return thumbnails_.transparent.get();
238 return !asset.
is_ready() ? thumbnails_.loading.get() : thumbnails_.scene_prefab.get();
244 if(fs::is_directory(path, ec))
246 return thumbnails_.folder.get();
249 return thumbnails_.file.get();
254 gen_.
thumbnails[uid].needs_regeneration =
true;
272 icon = gimzmo_icons_.camera;
278 const auto&
light = light_comp.get_light();
287 return gimzmo_icons_.sky_light;
289 return gimzmo_icons_.directional_light;
292 return gimzmo_icons_.point_light;
294 return gimzmo_icons_.spot_light;
296 return gimzmo_icons_.sky_light;
305 icon = gimzmo_icons_.reflection_probe;
310 icon = gimzmo_icons_.audio_source;
315 icon = gimzmo_icons_.particle_emitter;
324 APPLOG_TRACE(
"{}::{}", hpp::type_name_str(*
this), __func__);
326 auto& ev = ctx.get_cached<
events>();
332 thumbnails_.file = am.get_asset<
gfx::texture>(
"editor:/data/icons/file.png");
333 thumbnails_.folder = am.get_asset<
gfx::texture>(
"editor:/data/icons/folder.png");
334 thumbnails_.folder_empty = am.get_asset<
gfx::texture>(
"editor:/data/icons/folder_empty.png");
335 thumbnails_.loading = am.get_asset<
gfx::texture>(
"editor:/data/icons/loading.png");
336 thumbnails_.font = am.get_asset<
gfx::texture>(
"editor:/data/icons/font.png");
337 thumbnails_.shader = am.get_asset<
gfx::texture>(
"editor:/data/icons/shader.png");
338 thumbnails_.material = am.get_asset<
gfx::texture>(
"editor:/data/icons/material.png");
339 thumbnails_.physics_material = am.get_asset<
gfx::texture>(
"editor:/data/icons/material.png");
340 thumbnails_.mesh = am.get_asset<
gfx::texture>(
"editor:/data/icons/mesh.png");
341 thumbnails_.animation = am.get_asset<
gfx::texture>(
"editor:/data/icons/animation.png");
342 thumbnails_.prefab = am.get_asset<
gfx::texture>(
"editor:/data/icons/prefab.png");
343 thumbnails_.scene_prefab = am.get_asset<
gfx::texture>(
"editor:/data/icons/scene.png");
344 thumbnails_.audio_clip = am.get_asset<
gfx::texture>(
"editor:/data/icons/sound.png");
345 thumbnails_.script = am.get_asset<
gfx::texture>(
"editor:/data/icons/script.png");
346 thumbnails_.ui_tree = am.get_asset<
gfx::texture>(
"editor:/data/icons/rhtml.png");
347 thumbnails_.style_sheet = am.get_asset<
gfx::texture>(
"editor:/data/icons/rcss.png");
349 gimzmo_icons_.camera = am.get_asset<
gfx::texture>(
"editor:/data/icons/camera.png");
350 gimzmo_icons_.sky_light = am.get_asset<
gfx::texture>(
"editor:/data/icons/sky_light.png");
351 gimzmo_icons_.directional_light = am.get_asset<
gfx::texture>(
"editor:/data/icons/directional_light.png");
352 gimzmo_icons_.point_light = am.get_asset<
gfx::texture>(
"editor:/data/icons/point_light.png");
353 gimzmo_icons_.spot_light = am.get_asset<
gfx::texture>(
"editor:/data/icons/spot_light.png");
354 gimzmo_icons_.audio_source = am.get_asset<
gfx::texture>(
"editor:/data/icons/audio_source.png");
355 gimzmo_icons_.reflection_probe = am.get_asset<
gfx::texture>(
"editor:/data/icons/reflection_probe.png");
356 gimzmo_icons_.particle_emitter = am.get_asset<
gfx::texture>(
"editor:/data/icons/particle_emitter.png");
362 APPLOG_TRACE(
"{}::{}", hpp::type_name_str(*
this), __func__);
379 return thumbnail->get_texture();
392 return scenes[remaining];
397 if(wait_frames-- <= 0)
399 for(
auto& scn : scenes)
403 remaining = scenes.size();
std::shared_ptr< texture > ptr
Manages assets, including loading, unloading, and storage.
auto get_asset(const std::string &key, load_flags flags=load_flags::standard) -> asset_handle< T >
Gets an asset by its key.
Class that contains core data for audio sources.
Class that contains core camera data, used for rendering and other purposes.
Class that contains core light data, used for rendering and other purposes.
Component that wraps particle system emitter functionality.
Class that contains core reflection probe data, used for rendering and other purposes.
Class that contains sky light data.
std::chrono::duration< float > delta_t
#define APPLOG_ERROR(...)
#define APPLOG_TRACE(...)
Represents a handle to an asset, providing access and management functions.
auto is_valid() const -> bool
Checks if the handle is valid.
auto uid() const -> const hpp::uuid &
Gets the unique identifier of the asset.
auto get(bool wait=true) const -> std::shared_ptr< T >
Gets the shared pointer to the asset.
auto is_ready() const -> bool
Checks if the task is ready.
static void focus_camera_on_entities(entt::handle camera, hpp::span< const entt::handle > entities)
Focuses a camera on a specified entity.
static auto create_default_3d_scene_for_asset_preview(rtti::context &ctx, scene &scn, const asset_handle< T > &asset, const usize32_t &size, bool focus_camera=true) -> asset_preview_result
static auto context() -> rtti::context &
hpp::event< void(rtti::context &, delta_t)> on_frame_update
Struct representing a light.
light_type type
The type of the light.
Represents a scene in the ACE framework, managing entities and their relationships.
auto get() -> gfx::texture::ptr
void set(gfx::frame_buffer::ptr fbo)
gfx::frame_buffer::ptr thumbnail
std::map< hpp::uuid, generated_thumbnail > thumbnails
auto get_scene() -> scene &
auto init(rtti::context &ctx) -> bool
auto get_thumbnail(const asset_handle< T > &asset) -> gfx::texture::ptr
auto deinit(rtti::context &ctx) -> bool
auto get_gizmo_icon(entt::handle e) -> gfx::texture::ptr
void on_frame_update(rtti::context &ctx, delta_t)
void remove_thumbnail(const hpp::uuid &uid)
void regenerate_thumbnail(const hpp::uuid &uid)