diff options
Diffstat (limited to 'src/window.cpp')
| -rw-r--r-- | src/window.cpp | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/src/window.cpp b/src/window.cpp index 084f5c2..02249a5 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1020,6 +1020,29 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) { throw "failed to begin recording command buffer"; } + // TODO there should be a RenderPass that sandwiches this somewhere + const uint64_t bindBucketCount = ECS_GetGrBinds_BucketCount(); + for (long b = 0; b < bindBucketCount; ++b) { + uint64_t itemCount; + CompGrBinds *items = ECS_GetGrBinds(b, itemCount); + for (long i = 0; i < itemCount; ++i) { + CompGrBinds *binder = &items[i]; + vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, binder->vkPipelineLayout, 0U, 1U, &binder->vkDescriptorSet, 0, {}); + vkCmdBindVertexBuffers(commandBuffer, binder->vertexFirstBinding, binder->vertexCount, &binder->vertexBuffer, &binder->vertexOffsets); + if (binder->normalsCount > 0) + vkCmdBindVertexBuffers(commandBuffer, binder->normalsFirstBinding, binder->normalsCount, &binder->normalsBuffer, &binder->normalsOffsets); + if (binder->uvCount > 0) + vkCmdBindVertexBuffers(commandBuffer, binder->uvFirstBinding, binder->uvCount, &binder->uvBuffer, &binder->uvOffsets); + if (binder->indexCount > 0) + vkCmdBindIndexBuffer(commandBuffer, binder->indexBuffer, binder->vertexOffsets, VK_INDEX_TYPE_UINT16); + + vkCmdBindVertexBuffers(commandBuffer, binder->indexFirstBinding, binder->instanceCount, &binder->instanceBuffer, &binder->instanceOffsets); + + vkCmdDrawIndexed(commandBuffer, binder->indexCount, binder->instanceCount, 0, 0, 0); + } + } + + // present pass VkClearValue clearColor = {{{0.0f, 0.0f, 0.0f, 1.0f}}}; VkRenderPassBeginInfo renderPassInfo{}; @@ -1049,28 +1072,6 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) { 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; - CompGrBinds *items = ECS_GetGrBinds(b, itemCount); - for (long i = 0; i < itemCount; ++i) { - CompGrBinds *binder = &items[i]; - vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, binder->vkPipelineLayout, 0U, 1U, &binder->vkDescriptorSet, 0, {}); - vkCmdBindVertexBuffers(commandBuffer, binder->vertexFirstBinding, binder->vertexCount, &binder->vertexBuffer, &binder->vertexOffsets); - if (binder->normalsCount > 0) - vkCmdBindVertexBuffers(commandBuffer, binder->normalsFirstBinding, binder->normalsCount, &binder->normalsBuffer, &binder->normalsOffsets); - if (binder->uvCount > 0) - vkCmdBindVertexBuffers(commandBuffer, binder->uvFirstBinding, binder->uvCount, &binder->uvBuffer, &binder->uvOffsets); - if (binder->indexCount > 0) - vkCmdBindIndexBuffer(commandBuffer, binder->indexBuffer, binder->vertexOffsets, VK_INDEX_TYPE_UINT16); - - vkCmdBindVertexBuffers(commandBuffer, binder->indexFirstBinding, binder->instanceCount, &binder->instanceBuffer, &binder->instanceOffsets); - - vkCmdDrawIndexed(commandBuffer, binder->indexCount, binder->instanceCount, 0, 0, 0); - } - } - // reminder that present.vert is a triangle vkCmdDraw(commandBuffer, 3, 1, 0, 0); |
