diff --git a/src/modules/graphics/vulkan/Graphics.cpp b/src/modules/graphics/vulkan/Graphics.cpp index 7f3dcfa45..9eb0dd99e 100644 --- a/src/modules/graphics/vulkan/Graphics.cpp +++ b/src/modules/graphics/vulkan/Graphics.cpp @@ -224,11 +224,11 @@ namespace love { std::vector buffers; std::vector offsets; buffers.push_back((VkBuffer)cmd.buffers->info[0].buffer->getHandle()); - offsets.push_back((VkDeviceSize)cmd.buffers->info[0].offset); - buffers.push_back((VkBuffer)cmd.buffers->info[1].buffer->getHandle()); - offsets.push_back((VkDeviceSize)cmd.buffers->info[1].offset); + offsets.push_back((VkDeviceSize) 0); - vkCmdDraw(commandBuffers.at(imageIndex), 3, 1, 0, 0); // todo adjust + vkCmdBindVertexBuffers(commandBuffers.at(imageIndex), 0, 1, buffers.data(), offsets.data()); + vkCmdBindIndexBuffer(commandBuffers.at(imageIndex), (VkBuffer) cmd.indexBuffer->getHandle(), 0, VK_INDEX_TYPE_UINT16); + vkCmdDrawIndexed(commandBuffers.at(imageIndex), static_cast(cmd.indexCount), 1, 0, 0, 0); } graphics::StreamBuffer* Graphics::newStreamBuffer(BufferUsage type, size_t size) { @@ -724,9 +724,9 @@ namespace love { positionInputAttributeDescription.format = VK_FORMAT_R32G32_SFLOAT; positionInputAttributeDescription.offset = 0; - vertexInputInfo.vertexBindingDescriptionCount = 0; + vertexInputInfo.vertexBindingDescriptionCount = 1; vertexInputInfo.pVertexBindingDescriptions = &vertexBindingDescription; - vertexInputInfo.vertexAttributeDescriptionCount = 0; + vertexInputInfo.vertexAttributeDescriptionCount = 1; vertexInputInfo.pVertexAttributeDescriptions = &positionInputAttributeDescription; VkPipelineInputAssemblyStateCreateInfo inputAssembly{}; @@ -855,7 +855,7 @@ namespace love { VkCommandPoolCreateInfo poolInfo{}; poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; poolInfo.queueFamilyIndex = queueFamilyIndices.graphicsFamily.value(); - poolInfo.flags = 0; + poolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; if (vkCreateCommandPool(device, &poolInfo, nullptr, &commandPool) != VK_SUCCESS) { throw love::Exception("failed to create command pool"); @@ -903,11 +903,6 @@ namespace love { cleanupSwapChain(); - for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) { - vkDestroySemaphore(device, renderFinishedSemaphores[i], nullptr); - vkDestroySemaphore(device, imageAvailableSemaphores[i], nullptr); - vkDestroyFence(device, inFlightFences[i], nullptr); - } vkDestroyCommandPool(device, commandPool, nullptr); vkDestroyDevice(device, nullptr); vkDestroySurfaceKHR(instance, surface, nullptr); @@ -926,6 +921,11 @@ namespace love { vkDestroyImageView(device, swapChainImageViews[i], nullptr); } vkDestroySwapchainKHR(device, swapChain, nullptr); + for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) { + vkDestroySemaphore(device, renderFinishedSemaphores[i], nullptr); + vkDestroySemaphore(device, imageAvailableSemaphores[i], nullptr); + vkDestroyFence(device, inFlightFences[i], nullptr); + } } void Graphics::recreateSwapChain() { @@ -939,6 +939,7 @@ namespace love { createGraphicsPipeline(); createFramebuffers(); createCommandBuffers(); + createSyncObjects(); startRecordingGraphicsCommands(); } diff --git a/src/modules/graphics/vulkan/StreamBuffer.h b/src/modules/graphics/vulkan/StreamBuffer.h index d3a23e1b5..45ff57460 100644 --- a/src/modules/graphics/vulkan/StreamBuffer.h +++ b/src/modules/graphics/vulkan/StreamBuffer.h @@ -17,7 +17,7 @@ namespace love { void markUsed(size_t usedSize) override; ptrdiff_t getHandle() const override { - return 0; + return (ptrdiff_t) buffer; } private: