diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index 0114fb99549dc42edf99d04c3e7db350c8f9956b..c11cdf32db944a1603af8699f760233acb000da3 100644 --- a/include/vkcv/Core.hpp +++ b/include/vkcv/Core.hpp @@ -30,6 +30,12 @@ namespace vkcv BufferHandle buffer; }; + struct Mesh { + std::vector<VertexBufferBinding> vertexBufferBindings; + BufferHandle indexBuffer; + size_t indexCount; + }; + // forward declarations class PassManager; class PipelineManager; @@ -227,9 +233,7 @@ namespace vkcv const PipelineHandle pipelineHandle, const size_t pushConstantSize, const void* pushConstantData, - const std::vector<VertexBufferBinding> &vertexBufferBindings, - const BufferHandle &indexBuffer, - const size_t indexCount, + const Mesh &mesh, const vkcv::ResourcesHandle resourceHandle, const size_t resourceDescriptorSetIndex, const std::vector<ImageHandle> &renderTargets); diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp index e635eb68dcdfd890189d21d2bc0053e28ceb23fb..64c08943ca89a5a07bf41aced7a79d4838c4bf37 100644 --- a/projects/cmd_sync_test/src/main.cpp +++ b/projects/cmd_sync_test/src/main.cpp @@ -60,6 +60,15 @@ int main(int argc, const char** argv) { indexBuffer.fill(mesh.vertexGroups[0].indexBuffer.data); + vkcv::Mesh boxMesh; + boxMesh.indexBuffer = indexBuffer.getHandle(); + boxMesh.vertexBufferBindings = { + { mesh.vertexGroups[0].vertexBuffer.attributes[0].offset, vertexBuffer.getHandle() }, + { mesh.vertexGroups[0].vertexBuffer.attributes[1].offset, vertexBuffer.getHandle() }, + { mesh.vertexGroups[0].vertexBuffer.attributes[2].offset, vertexBuffer.getHandle() } + }; + boxMesh.indexCount = mesh.vertexGroups[0].numIndices; + // an example attachment for passes that output to the window const vkcv::AttachmentDescription present_color_attachment( vkcv::AttachmentLayout::UNDEFINED, @@ -136,12 +145,6 @@ int main(int argc, const char** argv) { vkcv::SamplerAddressMode::REPEAT ); - std::vector<vkcv::VertexBufferBinding> vertexBufferBindings = { - { mesh.vertexGroups[0].vertexBuffer.attributes[0].offset, vertexBuffer.getHandle() }, - { mesh.vertexGroups[0].vertexBuffer.attributes[1].offset, vertexBuffer.getHandle() }, - { mesh.vertexGroups[0].vertexBuffer.attributes[2].offset, vertexBuffer.getHandle() } - }; - vkcv::DescriptorWrites setWrites; setWrites.sampledImageWrites = { vkcv::SampledImageDescriptorWrite(0, texture.getHandle()) }; setWrites.samplerWrites = { vkcv::SamplerDescriptorWrite(1, sampler) }; @@ -170,9 +173,7 @@ int main(int argc, const char** argv) { trianglePipeline, sizeof(mvp), &mvp, - vertexBufferBindings, - indexBuffer.getHandle(), - mesh.vertexGroups[0].numIndices, + boxMesh, set, 0, { swapchainInput, depthBuffer }); diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index ff3bb54787c75043e37fb8c327287d64eaaab691..d72f87d6cb5c47b9f8fe9db174177c0ee8aca106 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -142,16 +142,14 @@ namespace vkcv } void Core::renderMesh( - const PassHandle renderpassHandle, - const PipelineHandle pipelineHandle, - const size_t pushConstantSize, - const void *pushConstantData, - const std::vector<VertexBufferBinding>& vertexBufferBindings, - const BufferHandle &indexBuffer, - const size_t indexCount, - const vkcv::ResourcesHandle resourceHandle, - const size_t resourceDescriptorSetIndex, - const std::vector<ImageHandle>& renderTargets) { + const PassHandle renderpassHandle, + const PipelineHandle pipelineHandle, + const size_t pushConstantSize, + const void *pushConstantData, + const Mesh &mesh, + const vkcv::ResourcesHandle resourceHandle, + const size_t resourceDescriptorSetIndex, + const std::vector<ImageHandle>& renderTargets) { if (m_currentSwapchainImageIndex == std::numeric_limits<uint32_t>::max()) { return; @@ -183,7 +181,6 @@ namespace vkcv const vk::Pipeline pipeline = m_PipelineManager->getVkPipeline(pipelineHandle); const vk::PipelineLayout pipelineLayout = m_PipelineManager->getVkPipelineLayout(pipelineHandle); const vk::Rect2D renderArea(vk::Offset2D(0, 0), vk::Extent2D(width, height)); - const vk::Buffer vulkanIndexBuffer = m_BufferManager->getBuffer(indexBuffer); const vk::ImageView swapchainImageView = m_swapchainImageViews[m_currentSwapchainImageIndex]; @@ -259,8 +256,8 @@ namespace vkcv cmdBuffer.setScissor(0, 1, &dynamicScissor); } - for (uint32_t i = 0; i < vertexBufferBindings.size(); i++) { - const auto &vertexBinding = vertexBufferBindings[i]; + for (uint32_t i = 0; i < mesh.vertexBufferBindings.size(); i++) { + const auto &vertexBinding = mesh.vertexBufferBindings[i]; const auto vertexBuffer = bufferManager->getBuffer(vertexBinding.buffer); cmdBuffer.bindVertexBuffers(i, (vertexBuffer), (vertexBinding.offset)); } @@ -270,9 +267,11 @@ namespace vkcv cmdBuffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, pipelineLayout, 0, descriptorSet, nullptr); } - cmdBuffer.bindIndexBuffer(vulkanIndexBuffer, 0, vk::IndexType::eUint16); //FIXME: choose proper size + const vk::Buffer indexBuffer = m_BufferManager->getBuffer(mesh.indexBuffer); + + cmdBuffer.bindIndexBuffer(indexBuffer, 0, vk::IndexType::eUint16); //FIXME: choose proper size cmdBuffer.pushConstants(pipelineLayout, vk::ShaderStageFlagBits::eAll, 0, pushConstantSize, pushConstantData); - cmdBuffer.drawIndexed(indexCount, 1, 0, 0, {}); + cmdBuffer.drawIndexed(mesh.indexCount, 1, 0, 0, {}); cmdBuffer.endRenderPass(); };