diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-31 16:28:12 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-03 15:03:20 -0400 |
| commit | 5891af6843661a9d30c12c3ef0f9efeb534aee88 (patch) | |
| tree | 5e1af54c08f6ff4baaefcd187fbec4d031de76c9 /src/ecs.cpp | |
| parent | cb26bbf9945b7b3badb088e1c3df06efdfc7fad1 (diff) | |
rebuild instance buffers as they become oversized
Diffstat (limited to 'src/ecs.cpp')
| -rw-r--r-- | src/ecs.cpp | 8 |
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(); |
