c-Vulkan内存使用率在记录命令缓冲区时不断增加



我已经试着学习Vulkan一周了,我在屏幕上画了一个三角形https://vulkan-tutorial.com.内存使用量不断增加,而且不会停止,在进行一些调试时,我发现这是RecordCommandBuffer函数。

以下是记录命令缓冲区的函数:

void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex)
{
VkCommandBufferBeginInfo beginInfo = {0};
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
beginInfo.flags = 0;
beginInfo.pInheritanceInfo = NULL;
if (vkBeginCommandBuffer(commandBuffer, &beginInfo) != VK_SUCCESS)
fprintf(stderr, "Failed to begin recording command buffer!");
VkRenderPassBeginInfo renderPassInfo = { 0 };
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = application.renderPass;
renderPassInfo.framebuffer = application.swapChainFramebuffers[imageIndex];
renderPassInfo.renderArea.offset = (VkOffset2D){ 0, 0 };
renderPassInfo.renderArea.extent = application.swapChainExtent;
VkClearValue clearColor = { { {0.0f, 0.0f, 0.0f, 1.0f} } };
renderPassInfo.clearValueCount = 1;
renderPassInfo.pClearValues = &clearColor;
vkCmdBeginRenderPass(commandBuffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, application.graphicsPipeline);
VkViewport viewport = { 0 };
viewport.x = 0.0f;
viewport.y = 0.0f;
viewport.width = (float)application.swapChainExtent.width;
viewport.height = (float)application.swapChainExtent.height;
viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;
vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
VkRect2D scissor = { 0 };
scissor.offset = (VkOffset2D){ 0, 0 };
scissor.extent = application.swapChainExtent;
vkCmdSetScissor(commandBuffer, 0, 1, &scissor);
vkCmdDraw(commandBuffer, 3, 1, 0, 0);
vkEndCommandBuffer(commandBuffer);
}

我发现它可能是vkCmdBeginSendPass函数,但我不知道如何修复它。

原来我错过了vkCmdEndRenderPass函数。RenderPass已创建,但从未发布。:(

最新更新