summaryrefslogtreecommitdiff
path: root/src/ecs.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-31 16:28:12 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-11-03 15:03:20 -0400
commit5891af6843661a9d30c12c3ef0f9efeb534aee88 (patch)
tree5e1af54c08f6ff4baaefcd187fbec4d031de76c9 /src/ecs.cpp
parentcb26bbf9945b7b3badb088e1c3df06efdfc7fad1 (diff)
rebuild instance buffers as they become oversized
Diffstat (limited to 'src/ecs.cpp')
-rw-r--r--src/ecs.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/ecs.cpp b/src/ecs.cpp
index 03f26db..b4207f8 100644
--- a/src/ecs.cpp
+++ b/src/ecs.cpp
@@ -21,6 +21,9 @@ DynArray<EntityHandle> EntitiesToBeRemoved{16}; // public
DynArray<Entity> entitiesYetToBeRemoved{0, nullptr};
DynArray<EntityHandle> entitiesMarkedForRemoval{16};
+
+DynArray<EntityHandle> EntitiesWithExcessInstances{16};
+
BucketContainer<EntityBucket, EntityHandle_T> Entities_BucketContainer{};
BucketContainer<GrBindsBucket, GrBindsHandle_T> Comp_GrBinds_BucketContainer{};
BucketContainer<InstanceBucket, InstanceHandle_T> Comp_Instance_BucketContainer{};
@@ -344,6 +347,10 @@ CompInstance &ECS_CreateInstance(EntityHandle entHandle, EntityHandle entityType
comp->instPos.rot = glm::quat(1, 0, 0, 0);
comp->instPos.scale = glm::vec3(1, 1, 1);
comp->isNeedingUpdated = true;
+
+ if (grBinds->instanceCounter > grBinds->instanceBufferMaxCount) {
+ EntitiesWithExcessInstances.Push(grBinds->entHandle);
+ }
return *comp;
}
@@ -394,6 +401,7 @@ CompInstance *ECS_GetInstances(uint64_t bucketIndex, uint64_t &itemCount) {
}
void ECS_Teardown() {
+ EntitiesWithExcessInstances.~DynArray();
entitiesYetToBeRemoved.~DynArray();
EntitiesToBeRemoved.~DynArray();
entitiesMarkedForRemoval.~DynArray();