summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-21 11:21:56 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-21 11:25:48 -0400
commit957a10c1d6f4ae734905cb7031981dca4cc21980 (patch)
tree0ff6189212a875f716f4fe6815c580f10d2537fd /src
parentbaa0276594b5871d9e61ef4f454bc84074c44084 (diff)
pke: entities DynArray to pk_arr_t
Diffstat (limited to 'src')
-rw-r--r--src/entities.cpp162
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);
}