summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-09 07:50:24 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-10-09 07:50:24 -0400
commitdcd05e45538a04b7b0d9ae0ff8cc01272a48fd33 (patch)
treeb56b885e3473008e40af197770a5b7e1b67d90aa
parent791c153aabd579f518a9b00613459cba13734797 (diff)
more memory works
-rw-r--r--src/dynamic-array.hpp8
-rw-r--r--src/window.cpp27
2 files changed, 24 insertions, 11 deletions
diff --git a/src/dynamic-array.hpp b/src/dynamic-array.hpp
index 284ddcc..343f6c1 100644
--- a/src/dynamic-array.hpp
+++ b/src/dynamic-array.hpp
@@ -147,13 +147,13 @@ template <typename T> inline void DynArray<T>::Remove(std::size_t index) {
assert(this->elementCount == 0 && "Invalid DynArray<T>::Remove() - Contains no elements");
assert(index >= this->elementCount && "Invalid DynArray<T>::Remove() - Out of bounds");
uint64_t moveCount = (this->elementCount - index - 1);
- auto *tmp = Pke_New(this->elementSize * moveCount);
+ auto *tmp = Pke_New(sizeof(T) * moveCount);
if IS_DESTRUCTIBLE(T) {
reinterpret_cast<T>(this->ptr + (index * sizeof(T))).~T();
}
- memcpy(tmp, this->ptr + (this->elementSize * (index + 1)), this->elementSize * moveCount);
- memcpy(this->ptr + (this->elementSize * index), tmp, this->elementSize * moveCount);
- Pke_Delete<T>(tmp, moveCount * this->elementSize);
+ memcpy(tmp, this->ptr + (sizeof(T) * (index + 1)), sizeof(T) * moveCount);
+ memcpy(this->ptr + (sizeof(T) * index), tmp, sizeof(T) * moveCount);
+ Pke_Delete(tmp, moveCount * sizeof(T));
this->elementCount -= 1;
}
diff --git a/src/window.cpp b/src/window.cpp
index 0bd1140..0a43072 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -361,7 +361,7 @@ void InitVulkan() {
auto it = requiredExtensions.begin();
while (it != requiredExtensions.end()) {
if (strcmp(*it.base(), property.extensionName)) {
- requiredExtensions.erase(it);
+ it = requiredExtensions.erase(it);
} else {
it++;
}
@@ -655,6 +655,15 @@ void CreateSwapchain() {
};
vkImageViewCreateInfo.subresourceRange = vkImageSubresourceRange;
+ assert(swapchainImages == nullptr || swapchainImages == CAFE_BABE(VkImage));
+ assert(swapchainImageViews == nullptr || swapchainImageViews == CAFE_BABE(VkImageView));
+ assert(renderImages == nullptr || renderImages == CAFE_BABE(VkImage));
+ assert(renderImageViews == nullptr || renderImageViews == CAFE_BABE(VkImageView));
+ assert(colorImages == nullptr || colorImages == CAFE_BABE(VkImage));
+ assert(colorImageViews == nullptr || colorImageViews == CAFE_BABE(VkImageView));
+ assert(depthImages == nullptr || depthImages == CAFE_BABE(VkImage));
+ assert(depthImageViews == nullptr || depthImageViews == CAFE_BABE(VkImageView));
+
vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, nullptr);
swapchainImages = Pke_New<VkImage>(swapchainLength);
vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, swapchainImages);
@@ -1438,12 +1447,14 @@ void DestroySwapchain() {
vkDestroyFramebuffer(vkDevice, renderImageFramebuffers[i], vkAllocator);
}
Pke_Delete<VkFramebuffer>(renderImageFramebuffers, swapchainLength);
+ renderImageFramebuffers = CAFE_BABE(VkFramebuffer);
}
if (swapchainFramebuffers != nullptr && swapchainFramebuffers != CAFE_BABE(VkFramebuffer)) {
for (long i = 0; i < swapchainLength; ++i) {
vkDestroyFramebuffer(vkDevice, swapchainFramebuffers[i], vkAllocator);
}
Pke_Delete<VkFramebuffer>(swapchainFramebuffers, swapchainLength);
+ swapchainFramebuffers = CAFE_BABE(VkFramebuffer);
}
if (renderImageViews!= nullptr && renderImageViews != CAFE_BABE(VkImageView)) {
for (long i = 0; i < swapchainLength; ++i) {
@@ -1457,11 +1468,17 @@ void DestroySwapchain() {
vkDestroyImage(vkDevice, renderImages[i], vkAllocator);
}
Pke_Delete<VkImageView>(depthImageViews, swapchainLength);
+ depthImageViews = CAFE_BABE(VkImageView);
Pke_Delete<VkImage>(depthImages, swapchainLength);
+ depthImages = CAFE_BABE(VkImage);
Pke_Delete<VkImageView>(colorImageViews, swapchainLength);
+ colorImageViews = CAFE_BABE(VkImageView);
Pke_Delete<VkImage>(colorImages, swapchainLength);
+ colorImages = CAFE_BABE(VkImage);
Pke_Delete<VkImageView>(renderImageViews, swapchainLength);
+ renderImageViews = CAFE_BABE(VkImageView);
Pke_Delete<VkImage>(renderImages, swapchainLength);
+ renderImages = CAFE_BABE(VkImage);
vkFreeMemory(vkDevice, depthImagesMemory, vkAllocator);
vkFreeMemory(vkDevice, colorImagesMemory, vkAllocator);
vkFreeMemory(vkDevice, renderImagesMemory, vkAllocator);
@@ -1471,15 +1488,11 @@ void DestroySwapchain() {
vkDestroyImageView(vkDevice, swapchainImageViews[i], vkAllocator);
}
Pke_Delete<VkImageView>(swapchainImageViews, swapchainLength);
+ swapchainImageViews = CAFE_BABE(VkImageView);
Pke_Delete<VkImage>(swapchainImages, swapchainLength);
+ swapchainImages = CAFE_BABE(VkImage);
}
vkDestroySwapchainKHR(vkDevice, vkSwapchainKHR, vkAllocator);
- swapchainImages = CAFE_BABE(VkImage);
- swapchainImageViews = CAFE_BABE(VkImageView);
- swapchainFramebuffers = CAFE_BABE(VkFramebuffer);
- renderImages = CAFE_BABE(VkImage);
- renderImageViews = CAFE_BABE(VkImageView);
- renderImageFramebuffers = CAFE_BABE(VkFramebuffer);
}
void RecreateSwapchain() {