diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-18 07:25:55 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-09-18 07:25:55 -0400 |
| commit | aa880ba627b3c18ea9538416bae6f060e72b43d3 (patch) | |
| tree | c05d0b00a0d2246a6d06d5ade7139bdfe0654c4d /src | |
| parent | b99d942010ed0ee678fafb917a4afd14c8a88fbc (diff) | |
uniform buffer first pass, created but not used
Diffstat (limited to 'src')
| -rw-r--r-- | src/window.cpp | 39 | ||||
| -rw-r--r-- | src/window.hpp | 7 |
2 files changed, 46 insertions, 0 deletions
diff --git a/src/window.cpp b/src/window.cpp index 8e91184..de391a2 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -60,6 +60,8 @@ VkCommandBuffer presentCommandBuffers[MAX_FRAMES_IN_FLIGHT]; VkSemaphore presentImageAvailableSemaphores[MAX_FRAMES_IN_FLIGHT]; VkSemaphore presentRenderFinishedSemaphores[MAX_FRAMES_IN_FLIGHT]; VkFence presentInFlightFences[MAX_FRAMES_IN_FLIGHT]; +VkDeviceMemory uniformBufferMemory; +VkBuffer uniformBuffers[MAX_FRAMES_IN_FLIGHT]; /* * ImGui @@ -955,6 +957,40 @@ void CreateCommandBuffer() { } } +void CreateUniformBuffers() { + uint32_t queueFamilyIndexes[2] = {graphicsFamilyIndex, transferFamilyIndex}; + VkBufferCreateInfo vkBufferCreateInfo; + vkBufferCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + vkBufferCreateInfo.pNext = nullptr; + vkBufferCreateInfo.flags = {}; + vkBufferCreateInfo.size = sizeof(UniformBufferObject); + vkBufferCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + vkBufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + vkBufferCreateInfo.queueFamilyIndexCount = graphicsFamilyIndex == transferFamilyIndex ? 1 : 2; + vkBufferCreateInfo.pQueueFamilyIndices = queueFamilyIndexes; + + vkCreateBuffer(vkDevice, &vkBufferCreateInfo, vkAllocator, &uniformBuffers[0]); + + VkMemoryRequirements memReqs; + vkGetBufferMemoryRequirements(vkDevice, uniformBuffers[0], &memReqs); + + VkMemoryAllocateInfo vkMemoryAllocateInfo; + vkMemoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + vkMemoryAllocateInfo.pNext = nullptr; + vkMemoryAllocateInfo.allocationSize = memReqs.size * MAX_FRAMES_IN_FLIGHT; + vkMemoryAllocateInfo.memoryTypeIndex = FindMemoryTypeIndex(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + vkAllocateMemory(vkDevice, &vkMemoryAllocateInfo, vkAllocator, &uniformBufferMemory); + + vkDestroyBuffer(vkDevice, uniformBuffers[0], vkAllocator); + vkBufferCreateInfo.size = memReqs.size; + + for (long i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) { + vkCreateBuffer(vkDevice, &vkBufferCreateInfo, vkAllocator, &uniformBuffers[i]); + vkBindBufferMemory(vkDevice, uniformBuffers[i], uniformBufferMemory, memReqs.size * i); + } +} + void CreateSyncObjects() { VkSemaphoreCreateInfo semaphoreInfo; semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; @@ -1207,6 +1243,7 @@ void CreateWindow(PKEWindowProperties *wp) { CreateFramebuffers(); CreateCommandPool(); CreateCommandBuffer(); + CreateUniformBuffers(); CreateSyncObjects(); CreateImGui(); } @@ -1218,10 +1255,12 @@ void DestroyWindow() { ImGui::DestroyContext(); DestroySwapchain(); for (long i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) { + vkDestroyBuffer(vkDevice, uniformBuffers[i], vkAllocator); vkDestroySemaphore(vkDevice, presentImageAvailableSemaphores[i], vkAllocator); vkDestroySemaphore(vkDevice, presentRenderFinishedSemaphores[i], vkAllocator); vkDestroyFence(vkDevice, presentInFlightFences[i], vkAllocator); } + vkFreeMemory(vkDevice, uniformBufferMemory, vkAllocator); vkDestroyCommandPool(vkDevice, graphicsCommandPool, vkAllocator); vkDestroyCommandPool(vkDevice, transferCommandPool, vkAllocator); vkDestroyPipeline(vkDevice, graphicsPipeline, vkAllocator); diff --git a/src/window.hpp b/src/window.hpp index ce79dd5..430151e 100644 --- a/src/window.hpp +++ b/src/window.hpp @@ -9,6 +9,7 @@ #include "memory.hpp" #include "ecs.hpp" +#include "glm/mat4x4.hpp" #include <cstring> #include <cstdio> #include <vector> @@ -41,6 +42,12 @@ struct PKEWindowProperties { unsigned int height = 720; }; +struct UniformBufferObject { + glm::mat4 model; + glm::mat4 view; + glm::mat4 proj; +}; + void CreateWindow(PKEWindowProperties *wp); void DestroyWindow(); VkShaderModule UploadShader(AssetHandle handle); |
