From c82e5bbe2d5569b0d39d2b5c1cd801b491c403f1 Mon Sep 17 00:00:00 2001 From: Sander Mertens Date: Fri, 1 Nov 2024 15:55:31 -0700 Subject: [PATCH] Fix z-fighting issue with lantern --- deps/flecs.c | 47 ++++++++++++++++++++++++++++++---------- etc/flecs_explorer.wasm | Bin 1007067 -> 1007159 bytes 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/deps/flecs.c b/deps/flecs.c index adef84c..550fbeb 100644 --- a/deps/flecs.c +++ b/deps/flecs.c @@ -927,12 +927,13 @@ typedef struct ecs_store_t { /* Records cache */ ecs_vec_t records; - /* Stack of ids being deleted. */ + /* Stack of ids being deleted during cleanup action. */ ecs_vec_t marked_ids; /* vector */ - - /* Entity ids associated with depth (for flat hierarchies) */ - ecs_vec_t depth_ids; - ecs_map_t entity_to_depth; /* What it says */ + + /* Components deleted during cleanup action. Used to delay cleaning up of + * type info so it's guaranteed that this data is available while the + * storage is cleaning up tables. */ + ecs_vec_t deleted_components; /* vector */ } ecs_store_t; /* fini actions */ @@ -3698,7 +3699,19 @@ void flecs_on_component(ecs_iter_t *it) { flecs_assert_relation_unused(world, e, ecs_id(EcsComponent)); } } else if (it->event == EcsOnRemove) { - flecs_type_info_free(world, e); + #ifdef FLECS_DEBUG + if (ecs_should_log(0)) { + char *path = ecs_get_path(world, e); + ecs_trace("unregistering component '%s'", path); + ecs_os_free(path); + } + #endif + if (!ecs_vec_count(&world->store.marked_ids)) { + flecs_type_info_free(world, e); + } else { + ecs_vec_append_t(&world->allocator, + &world->store.deleted_components, ecs_entity_t)[0] = e; + } } } } @@ -7735,7 +7748,7 @@ void flecs_on_delete( /* Cleanup can happen recursively. If a cleanup action is already in * progress, only append ids to the marked_ids. The topmost cleanup * frame will handle the actual cleanup. */ - int32_t count = ecs_vec_count(&world->store.marked_ids); + int32_t i, count = ecs_vec_count(&world->store.marked_ids); /* Make sure we're evaluating a consistent list of non-empty tables */ ecs_run_aperiodic(world, EcsAperiodicEmptyTables); @@ -7760,7 +7773,7 @@ void flecs_on_delete( /* Verify deleted ids are no longer in use */ #ifdef FLECS_DEBUG ecs_marked_id_t *ids = ecs_vec_first(&world->store.marked_ids); - int32_t i; count = ecs_vec_count(&world->store.marked_ids); + count = ecs_vec_count(&world->store.marked_ids); for (i = 0; i < count; i ++) { ecs_assert(!ecs_id_in_use(world, ids[i].id), ECS_INTERNAL_ERROR, NULL); @@ -7771,6 +7784,14 @@ void flecs_on_delete( /* Ids are deleted, clear stack */ ecs_vec_clear(&world->store.marked_ids); + /* If any components got deleted, cleanup type info. Delaying this + * ensures that type info remains available during cleanup. */ + count = ecs_vec_count(&world->store.deleted_components); + ecs_entity_t *comps = ecs_vec_first(&world->store.deleted_components); + for (i = 0; i < count; i ++) { + flecs_type_info_free(world, comps[i]); + } + ecs_log_pop_2(); } } @@ -18198,8 +18219,7 @@ void flecs_init_store( ecs_allocator_t *a = &world->allocator; ecs_vec_init_t(a, &world->store.records, ecs_table_record_t, 0); ecs_vec_init_t(a, &world->store.marked_ids, ecs_marked_id_t, 0); - ecs_vec_init_t(a, &world->store.depth_ids, ecs_entity_t, 0); - ecs_map_init(&world->store.entity_to_depth, &world->allocator); + ecs_vec_init_t(a, &world->store.deleted_components, ecs_entity_t, 0); /* Initialize entity index */ flecs_entities_init(world); @@ -18336,8 +18356,7 @@ void flecs_fini_store(ecs_world_t *world) { ecs_allocator_t *a = &world->allocator; ecs_vec_fini_t(a, &world->store.records, ecs_table_record_t); ecs_vec_fini_t(a, &world->store.marked_ids, ecs_marked_id_t); - ecs_vec_fini_t(a, &world->store.depth_ids, ecs_entity_t); - ecs_map_fini(&world->store.entity_to_depth); + ecs_vec_fini_t(a, &world->store.deleted_components, ecs_entity_t); } static @@ -19391,6 +19410,9 @@ void flecs_type_info_fini( ecs_os_free(ECS_CONST_CAST(char*, ti->name)); ti->name = NULL; } + + ti->size = 0; + ti->alignment = 0; } void flecs_type_info_free( @@ -37167,6 +37189,7 @@ void flecs_table_fini_data( table->data.entities = NULL; table->data.size = 0; } + table->data.count = 0; if (deactivate && count) { diff --git a/etc/flecs_explorer.wasm b/etc/flecs_explorer.wasm index 2e5d6cb7c681afe6d481944083af3728554d62d8..70468b4d1e4e93446e22c375fa72d2c597750851 100755 GIT binary patch delta 23056 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 delta 22880 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