From ac9fa36a7b7888f47339d7ddead8b3d395cc3933 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Wed, 20 Sep 2023 11:52:41 -0400 Subject: sandwich render pass --- src/window.cpp | 58 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index de1a6ea..406ccc5 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1298,7 +1298,43 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) { throw "failed to begin recording command buffer"; } - // TODO there should be a RenderPass that sandwiches this somewhere + VkClearColorValue clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; + VkClearDepthStencilValue clearDepth; + clearDepth.depth = 1.0; + clearDepth.stencil = 0; + VkClearValue clearValues[2] = { + VkClearValue { .color = clearColor }, + VkClearValue { .depthStencil = clearDepth }, + }; + + VkRenderPassBeginInfo renderPassInfo; + renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + renderPassInfo.renderPass = renderRenderPass; + renderPassInfo.framebuffer = renderImageFramebuffers[imageIndex]; + renderPassInfo.renderArea.offset = {0, 0}; + renderPassInfo.renderArea.extent = extent; + renderPassInfo.clearValueCount = 2; + renderPassInfo.pClearValues = clearValues; + renderPassInfo.pNext = VK_NULL_HANDLE; + + vkCmdBeginRenderPass(commandBuffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline); + + VkViewport viewport; + viewport.x = 0.0f; + viewport.y = 0.0f; + viewport.width = (float)extent.width; + viewport.height = (float)extent.height; + viewport.minDepth = 0.0f; + viewport.maxDepth = 1.0f; + + VkRect2D scissor; + scissor.offset = {0, 0}; + scissor.extent = extent; + + vkCmdSetViewport(commandBuffer, 0, 1, &viewport); + vkCmdSetScissor(commandBuffer, 0, 1, &scissor); + const uint64_t bindBucketCount = ECS_GetGrBinds_BucketCount(); for (long b = 0; b < bindBucketCount; ++b) { uint64_t itemCount; @@ -1321,33 +1357,15 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) { } // present pass - VkClearValue clearColor = {{{0.0f, 0.0f, 0.0f, 1.0f}}}; + vkCmdEndRenderPass(commandBuffer); - VkRenderPassBeginInfo renderPassInfo; - renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.renderPass = presentRenderPass; renderPassInfo.framebuffer = swapchainFramebuffers[imageIndex]; - renderPassInfo.renderArea.offset = {0, 0}; - renderPassInfo.renderArea.extent = extent; renderPassInfo.clearValueCount = 1; - renderPassInfo.pClearValues = &clearColor; - renderPassInfo.pNext = VK_NULL_HANDLE; vkCmdBeginRenderPass(commandBuffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE); vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline); - VkViewport viewport; - viewport.x = 0.0f; - viewport.y = 0.0f; - viewport.width = (float)extent.width; - viewport.height = (float)extent.height; - viewport.minDepth = 0.0f; - viewport.maxDepth = 1.0f; - - VkRect2D scissor; - scissor.offset = {0, 0}; - scissor.extent = extent; - vkCmdSetViewport(commandBuffer, 0, 1, &viewport); vkCmdSetScissor(commandBuffer, 0, 1, &scissor); // reminder that present.vert is a triangle -- cgit v1.2.3