diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-21 11:21:56 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-21 11:25:48 -0400 |
| commit | 957a10c1d6f4ae734905cb7031981dca4cc21980 (patch) | |
| tree | 0ff6189212a875f716f4fe6815c580f10d2537fd | |
| parent | baa0276594b5871d9e61ef4f454bc84074c44084 (diff) | |
pke: entities DynArray to pk_arr_t
| -rw-r--r-- | src/entities.cpp | 162 |
1 files changed, 88 insertions, 74 deletions
diff --git a/src/entities.cpp b/src/entities.cpp index 9a8b4e1..6b9cff4 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -2,7 +2,6 @@ #include "entities.hpp" #include "bucketed-array.hpp" -#include "dynamic-array.hpp" #include "ecs.hpp" #include "game-settings.hpp" #include "math-helpers.hpp" @@ -26,10 +25,11 @@ struct EntToTeardown { CompGrBinds *grBinds[1] = {nullptr}; uint8_t ticksToWait = 0; }; -DynArray<EntToTeardown> EntityTypesToTeardown{16}; +pk_arr_t<EntToTeardown> EntityTypesToTeardown{}; void EntityType_Init() { Buckets_Init(EntityType_BC); + pk_arr_reserve(&EntityTypesToTeardown, 16); } EntityType *EntityType_Create(pk_uuid uuid) { @@ -151,22 +151,22 @@ struct EntityTypeDetails_LoadHelperStruct { AssetHandle textureAssetHandle = AssetHandle_MAX; const Asset *textureAsset = nullptr; struct { - DynArray<glm::vec3> *vertexes = nullptr; - DynArray<glm::vec3> *normals = nullptr; - DynArray<glm::vec2> *uv = nullptr; - DynArray<uint16_t> *indexes = nullptr; + pk_arr_t<glm::vec3> vertexes; + pk_arr_t<glm::vec3> normals; + pk_arr_t<glm::vec2> uv; + pk_arr_t<uint16_t> indexes; } physDbg; }; struct EntityType_LoadHelperStruct { struct pk_membucket *bkt = nullptr; EntityType &et; - DynArray<EntityTypeDetails_LoadHelperStruct> *etdHelpers = nullptr; + pk_arr_t<EntityTypeDetails_LoadHelperStruct> etdHelpers; const cgltf_data *gltfData = nullptr; const Asset *modelBinAsset = nullptr; - DynArray<VkMemoryRequirements> *vertMemoryRequirements = nullptr; - DynArray<VkMemoryRequirements> *instMemoryRequirements = nullptr; - DynArray<VkMemoryRequirements> *physVertMemoryRequirements = nullptr; - DynArray<VkMemoryRequirements> *textureMemoryRequirements = nullptr; + pk_arr_t<VkMemoryRequirements> vertMemoryRequirements; + pk_arr_t<VkMemoryRequirements> instMemoryRequirements; + pk_arr_t<VkMemoryRequirements> physVertMemoryRequirements; + pk_arr_t<VkMemoryRequirements> textureMemoryRequirements; VkMemoryRequirements vertMemoryRequirementsCombined{}; VkMemoryRequirements instMemoryRequirementsCombined{}; VkMemoryRequirements physVertMemoryRequirementsCombined{}; @@ -294,10 +294,10 @@ void EntityType_Inner_UpdateDescriptorSets_EvCallabck(void *mgr_data, void *enti void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { const long expectedBufferCount = 4; - helper.vertMemoryRequirements->Reserve(helper.et.detailsCount * expectedBufferCount); - helper.instMemoryRequirements->Reserve(helper.et.detailsCount); - helper.physVertMemoryRequirements->Reserve(helper.et.detailsCount * expectedBufferCount); - helper.textureMemoryRequirements->Reserve(helper.et.detailsCount); + pk_arr_reserve(&helper.vertMemoryRequirements, helper.et.detailsCount * expectedBufferCount); + pk_arr_reserve(&helper.instMemoryRequirements, helper.et.detailsCount); + pk_arr_reserve(&helper.physVertMemoryRequirements, helper.et.detailsCount * expectedBufferCount); + pk_arr_reserve(&helper.textureMemoryRequirements, helper.et.detailsCount); VkBuffer buffer; VkBufferCreateInfo bufferCI; @@ -326,17 +326,18 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { for (int64_t i = 0; i < helper.et.detailsCount; ++i) { EntityTypeDetails &etd = helper.et.details[i]; - EntityTypeDetails_LoadHelperStruct &etdHelper = helper.etdHelpers->Push(); - etdHelper.etd = &etd; - etd.grBinds = ECS_CreateGrBinds(&helper.et);; - etdHelper.physDbg.vertexes = pk_new<DynArray<glm::vec3>>(64, helper.bkt); - etdHelper.physDbg.normals = pk_new<DynArray<glm::vec3>>(64, helper.bkt); - etdHelper.physDbg.uv = pk_new<DynArray<glm::vec2>>(64, helper.bkt); - etdHelper.physDbg.indexes = pk_new<DynArray<uint16_t>>(64, helper.bkt); - // new (etdHelper.physDbg.vertexes) DynArray<glm::vec3>(helper.bkt); - // new (etdHelper.physDbg.normals) DynArray<glm::vec3>(helper.bkt); - // new (etdHelper.physDbg.uv) DynArray<glm::vec2>(helper.bkt); - // new (etdHelper.physDbg.indexes) DynArray<uint16_t>(helper.bkt); + { + EntityTypeDetails_LoadHelperStruct tmp{}; + tmp.etd = &etd; + etd.grBinds = ECS_CreateGrBinds(&helper.et);; + tmp.physDbg.vertexes.bkt = helper.bkt; + tmp.physDbg.normals.bkt = helper.bkt; + tmp.physDbg.uv.bkt = helper.bkt; + tmp.physDbg.indexes.bkt = helper.bkt; + pk_arr_append_t(&helper.etdHelpers, tmp); + } + + EntityTypeDetails_LoadHelperStruct &etdHelper = helper.etdHelpers[helper.etdHelpers.next-1]; /* * phys @@ -358,24 +359,27 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { assert(shape != nullptr); // convex hull debug const btConvexPolyhedron *pol = shape->getConvexPolyhedron(); - etdHelper.physDbg.vertexes->Reserve(pol->m_vertices.size()); - etdHelper.physDbg.normals->Reserve(pol->m_vertices.size()); - etdHelper.physDbg.uv->Reserve(pol->m_vertices.size()); - etdHelper.physDbg.indexes->Reserve(pol->m_faces.size()); + int count = pol->m_vertices.size(); + pk_arr_reserve(&etdHelper.physDbg.vertexes, count); + pk_arr_reserve(&etdHelper.physDbg.normals, count); + pk_arr_reserve(&etdHelper.physDbg.uv, count); + pk_arr_reserve(&etdHelper.physDbg.indexes, count); for (long k = 0; k < pol->m_vertices.size(); ++k) { btVector3 norm = pol->m_vertices[k]; - auto &glmVert = etdHelper.physDbg.vertexes->Push(); + pk_arr_append_t(&etdHelper.physDbg.vertexes, {}); + glm::vec3 &glmVert = etdHelper.physDbg.vertexes[etdHelper.physDbg.vertexes.next-1]; BulletToGlm(norm, glmVert); norm.safeNormalize(); - auto &glmNorm = etdHelper.physDbg.normals->Push(); + pk_arr_append_t(&etdHelper.physDbg.normals, {}); + glm::vec3 &glmNorm = etdHelper.physDbg.normals[etdHelper.physDbg.normals.next-1]; BulletToGlm(norm, glmNorm); - etdHelper.physDbg.uv->Push({norm.x(), norm.y()}); + pk_arr_append_t(&etdHelper.physDbg.uv, {norm.x(), norm.y()}); } for (long ii = 0; ii < pol->m_faces.size(); ++ii) { for (long k = 2; k < pol->m_faces[ii].m_indices.size(); ++k) { - etdHelper.physDbg.indexes->Push(pol->m_faces[ii].m_indices[0]); - etdHelper.physDbg.indexes->Push(pol->m_faces[ii].m_indices[k - 1]); - etdHelper.physDbg.indexes->Push(pol->m_faces[ii].m_indices[k]); + pk_arr_append_t(&etdHelper.physDbg.indexes, (uint16_t)pol->m_faces[ii].m_indices[0]); + pk_arr_append_t(&etdHelper.physDbg.indexes, (uint16_t)pol->m_faces[ii].m_indices[k - 1]); + pk_arr_append_t(&etdHelper.physDbg.indexes, (uint16_t)pol->m_faces[ii].m_indices[k]); } } for (int64_t index = 0; index < expectedBufferCount; ++index) { @@ -383,13 +387,13 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { * lol */ if (index == 0) { - bufferCI.size = sizeof(glm::vec3) * etdHelper.physDbg.vertexes->Count(); + bufferCI.size = sizeof(glm::vec3) * etdHelper.physDbg.vertexes.next; } else if (index == 1) { - bufferCI.size = sizeof(glm::vec3) * etdHelper.physDbg.normals->Count(); + bufferCI.size = sizeof(glm::vec3) * etdHelper.physDbg.normals.next; } else if (index == 2) { - bufferCI.size = sizeof(glm::vec2) * etdHelper.physDbg.uv->Count(); + bufferCI.size = sizeof(glm::vec2) * etdHelper.physDbg.uv.next; } else if (index == 3) { - bufferCI.size = sizeof(uint16_t) * etdHelper.physDbg.indexes->Count(); + bufferCI.size = sizeof(uint16_t) * etdHelper.physDbg.indexes.next; } if (index == 3) { bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT; @@ -397,7 +401,8 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; } vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &buffer); - vkGetBufferMemoryRequirements(vkDevice, buffer, &helper.physVertMemoryRequirements->Push()); + pk_arr_append_t(&helper.physVertMemoryRequirements, {}); + vkGetBufferMemoryRequirements(vkDevice, buffer, &helper.physVertMemoryRequirements[helper.physVertMemoryRequirements.next-1]); vkDestroyBuffer(vkDevice, buffer, vkAllocator); } @@ -417,7 +422,8 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; } vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &buffer); - vkGetBufferMemoryRequirements(vkDevice, buffer, &helper.vertMemoryRequirements->Push()); + pk_arr_append_t(&helper.vertMemoryRequirements, {}); + vkGetBufferMemoryRequirements(vkDevice, buffer, &helper.vertMemoryRequirements[helper.vertMemoryRequirements.next-1]); vkDestroyBuffer(vkDevice, buffer, vkAllocator); } @@ -429,7 +435,8 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { bufferCI.size = sizeof(glm::mat4) * instBufferStartingCount; bufferCI.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; vkCreateBuffer(vkDevice, &bufferCI, vkAllocator, &buffer); - vkGetBufferMemoryRequirements(vkDevice, buffer, &helper.instMemoryRequirements->Push()); + pk_arr_append_t(&helper.instMemoryRequirements, {}); + vkGetBufferMemoryRequirements(vkDevice, buffer, &helper.instMemoryRequirements[helper.instMemoryRequirements.next-1]); vkDestroyBuffer(vkDevice, buffer, vkAllocator); /* @@ -465,7 +472,8 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { .depth = 1 }; vkCreateImage(vkDevice, &vkImageCreateInfo, vkAllocator, &image); - vkGetImageMemoryRequirements(vkDevice, image, &helper.textureMemoryRequirements->Push()); + pk_arr_append_t(&helper.textureMemoryRequirements, {}); + vkGetImageMemoryRequirements(vkDevice, image, &helper.textureMemoryRequirements[helper.textureMemoryRequirements.next-1]); vkDestroyImage(vkDevice, image, vkAllocator); } @@ -476,7 +484,7 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { /* * phys */ - CalculateCombinedMemReqs(helper.physVertMemoryRequirements->Count(), helper.physVertMemoryRequirements->GetPtr(), helper.physVertMemoryRequirementsCombined); + CalculateCombinedMemReqs(helper.physVertMemoryRequirements.next, reinterpret_cast<VkMemoryRequirements*>(helper.physVertMemoryRequirements.data), helper.physVertMemoryRequirementsCombined); vkMemoryAllocateInfo.allocationSize = helper.physVertMemoryRequirementsCombined.size; vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(helper.physVertMemoryRequirementsCombined.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &helper.et.deviceMemoryPhysVert); @@ -484,7 +492,7 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { /* * verts */ - CalculateCombinedMemReqs(helper.vertMemoryRequirements->Count(), helper.vertMemoryRequirements->GetPtr(), helper.vertMemoryRequirementsCombined); + CalculateCombinedMemReqs(helper.vertMemoryRequirements.next, reinterpret_cast<VkMemoryRequirements*>(helper.vertMemoryRequirements.data), helper.vertMemoryRequirementsCombined); vkMemoryAllocateInfo.allocationSize = helper.vertMemoryRequirementsCombined.size; vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(helper.vertMemoryRequirementsCombined.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &helper.et.deviceMemoryVert); @@ -492,7 +500,7 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { /* * instance */ - CalculateCombinedMemReqs(helper.instMemoryRequirements->Count(), helper.instMemoryRequirements->GetPtr(), helper.instMemoryRequirementsCombined); + CalculateCombinedMemReqs(helper.instMemoryRequirements.next, reinterpret_cast<VkMemoryRequirements*>(helper.instMemoryRequirements.data), helper.instMemoryRequirementsCombined); vkMemoryAllocateInfo.allocationSize = helper.instMemoryRequirementsCombined.size; vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(helper.instMemoryRequirementsCombined.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &helper.et.deviceMemoryInst); @@ -500,7 +508,7 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { /* * texture */ - CalculateCombinedMemReqs(helper.textureMemoryRequirements->Count(), helper.textureMemoryRequirements->GetPtr(), helper.textureMemoryRequirementsCombined); + CalculateCombinedMemReqs(helper.textureMemoryRequirements.next, reinterpret_cast<VkMemoryRequirements*>(helper.textureMemoryRequirements.data), helper.textureMemoryRequirementsCombined); vkMemoryAllocateInfo.allocationSize = helper.textureMemoryRequirementsCombined.size; vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(helper.textureMemoryRequirementsCombined.memoryTypeBits, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); if (vkMemoryAllocateInfo.memoryTypeIndex == 0) { @@ -511,7 +519,7 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { void EntityType_LoadTexture(EntityType_LoadHelperStruct &helper, const int64_t index) { PKVK_TmpBufferDetails tmpBufferDetails{}; - EntityTypeDetails_LoadHelperStruct &etdHelper = (*helper.etdHelpers)[index]; + EntityTypeDetails_LoadHelperStruct &etdHelper = helper.etdHelpers[index]; int32_t pixelWidth, pixelHeight, pixelChannels; stbi_uc *pixels = nullptr; @@ -725,7 +733,7 @@ void EntityType_LoadTexture(EntityType_LoadHelperStruct &helper, const int64_t i void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t meshIndex) { PKVK_TmpBufferDetails tmpBufferDetails{}; - EntityTypeDetails_LoadHelperStruct &etdHelper = (*helper.etdHelpers)[meshIndex]; + EntityTypeDetails_LoadHelperStruct &etdHelper = helper.etdHelpers[meshIndex]; // create and bind buffers @@ -910,7 +918,7 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh // vertex offsetVert = runningOffset; - sizeVert = sizeof(glm::vec3) * etdHelper.physDbg.vertexes->Count(); + sizeVert = sizeof(glm::vec3) * etdHelper.physDbg.vertexes.next; etdHelper.etd->grBinds->physVertBD.firstBinding = index; etdHelper.etd->grBinds->physVertBD.bindingCount = 1; alignmentPadding = sizeVert % helper.physVertMemoryRequirementsCombined.alignment; @@ -925,7 +933,7 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh // norm index = 1; offsetNorm = runningOffset; - sizeNorm = sizeof(glm::vec3) * etdHelper.physDbg.normals->Count(); + sizeNorm = sizeof(glm::vec3) * etdHelper.physDbg.normals.next; etdHelper.etd->grBinds->physNormBD.firstBinding = index; etdHelper.etd->grBinds->physNormBD.bindingCount = 1; alignmentPadding = sizeNorm % helper.physVertMemoryRequirementsCombined.alignment; @@ -940,7 +948,7 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh // uv index = 2; offsetUV = runningOffset; - sizeUV = sizeof(glm::vec2) * etdHelper.physDbg.uv->Count(); + sizeUV = sizeof(glm::vec2) * etdHelper.physDbg.uv.next; etdHelper.etd->grBinds->physUvBD.firstBinding = index; etdHelper.etd->grBinds->physUvBD.bindingCount = 1; alignmentPadding = sizeUV % helper.physVertMemoryRequirementsCombined.alignment; @@ -955,7 +963,7 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh // index index = 3; offsetIndex = runningOffset; - sizeIndex = sizeof(uint16_t) * etdHelper.physDbg.indexes->Count(); + sizeIndex = sizeof(uint16_t) * etdHelper.physDbg.indexes.next; etdHelper.etd->grBinds->physIndxBD.firstBinding = index; etdHelper.etd->grBinds->physIndxBD.bindingCount = 1; alignmentPadding = sizeIndex % helper.physVertMemoryRequirementsCombined.alignment; @@ -979,22 +987,22 @@ void EntityType_LoadMesh(EntityType_LoadHelperStruct &helper, const int64_t mesh char *srcPtr = nullptr; dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; - srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.vertexes->GetPtr()); + srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.vertexes.data); memcpy(dstPtr, srcPtr, sizeVert); runningOffset += sizeVert; dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; - srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.normals->GetPtr()); + srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.normals.data); memcpy(dstPtr, srcPtr, sizeNorm); runningOffset += sizeNorm; dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; - srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.uv->GetPtr()); + srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.uv.data); memcpy(dstPtr, srcPtr, sizeUV); runningOffset += sizeUV; dstPtr = static_cast<char *>(tmpBufferDetails.deviceData) + runningOffset; - srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.indexes->GetPtr()); + srcPtr = reinterpret_cast<char *>(etdHelper.physDbg.indexes.data); memcpy(dstPtr, srcPtr, sizeIndex); VkCommandBufferBeginInfo vkCommandBufferBeginInfo; @@ -1088,24 +1096,24 @@ void EntityType_Load(EntityType &et) { EntityType_LoadHelperStruct helper { .bkt = entLoaderBkt, .et = et, - .etdHelpers = pk_new<DynArray<EntityTypeDetails_LoadHelperStruct>>(64, entLoaderBkt), + .etdHelpers = {}, .gltfData = gltfData, .modelBinAsset = modelBinAsset, - .vertMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), - .instMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), - .physVertMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), - .textureMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), + .vertMemoryRequirements = {}, + .instMemoryRequirements = {}, + .physVertMemoryRequirements = {}, + .textureMemoryRequirements = {}, }; - // new (helper.etdHelpers) DynArray<EntityTypeDetails_LoadHelperStruct>{entLoaderBkt}; - // new (helper.vertMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; - // new (helper.instMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; - // new (helper.physVertMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; - // new (helper.textureMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; + helper.etdHelpers.bkt = entLoaderBkt; + helper.vertMemoryRequirements.bkt = entLoaderBkt; + helper.instMemoryRequirements.bkt = entLoaderBkt; + helper.physVertMemoryRequirements.bkt = entLoaderBkt; + helper.textureMemoryRequirements.bkt = entLoaderBkt; EntityType_PreLoad(helper); for (int64_t i = 0; i < et.detailsCount; ++i) { - EntityTypeDetails_LoadHelperStruct &etdHelper = (*helper.etdHelpers)[i]; + EntityTypeDetails_LoadHelperStruct &etdHelper = helper.etdHelpers[i]; /* * 2023-09-13 - JCB * I don't like that we're just copying this. @@ -1130,6 +1138,11 @@ void EntityType_Load(EntityType &et) { // cleanup AM_Release(modelBinHandle); AM_Release(assetHandle); + helper.etdHelpers.bkt = nullptr; + helper.vertMemoryRequirements.bkt = nullptr; + helper.instMemoryRequirements.bkt = nullptr; + helper.physVertMemoryRequirements.bkt = nullptr; + helper.textureMemoryRequirements.bkt = nullptr; pk_bucket_destroy(helper.bkt); } @@ -1249,7 +1262,8 @@ void EntityType_Tick(double delta) { auto *entTypePtr = EntityType_FindByEntityHandle(EntitiesToBeRemoved[i]->handle); if (entTypePtr != nullptr) { auto &entType = *entTypePtr; - auto &td = EntityTypesToTeardown.Push(); + pk_arr_append_t(&EntityTypesToTeardown, {}); + auto &td = EntityTypesToTeardown[EntityTypesToTeardown.next-1]; td.handle = EntitiesToBeRemoved[i]->handle; td.ticksToWait = 1; for (long k = 0; k < entType.detailsCount; ++k) { @@ -1272,14 +1286,14 @@ void EntityType_Tick_Late(double delta) { EntityType_RolloverInstances(et, *etd.grBinds); } } - for (int64_t i = EntityTypesToTeardown.Count() - 1; i >= 0; --i) { - auto &td = EntityTypesToTeardown[i]; + for (uint32_t i = EntityTypesToTeardown.next; i > 0; --i) { + auto &td = EntityTypesToTeardown[i-1]; td.ticksToWait -= 1; if (td.ticksToWait == 0) { auto *entityType = EntityType_FindByEntityHandle(td.handle); assert(entityType != nullptr); EntityType_Unload(*entityType, td.grBinds); - EntityTypesToTeardown.Remove(i); + pk_arr_remove_at(&EntityTypesToTeardown, i-1); } } } @@ -1413,5 +1427,5 @@ void EntityType_Teardown() { } } Buckets_Destroy(EntityType_BC); - EntityTypesToTeardown.~DynArray(); + pk_arr_reset(&EntityTypesToTeardown); } |
