diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-09 07:50:24 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-09 07:50:24 -0400 |
| commit | dcd05e45538a04b7b0d9ae0ff8cc01272a48fd33 (patch) | |
| tree | b56b885e3473008e40af197770a5b7e1b67d90aa | |
| parent | 791c153aabd579f518a9b00613459cba13734797 (diff) | |
more memory works
| -rw-r--r-- | src/dynamic-array.hpp | 8 | ||||
| -rw-r--r-- | src/window.cpp | 27 |
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() { |
