diff --git a/VulkanTest b/VulkanTest index 719722f..d36e5ca 100755 Binary files a/VulkanTest and b/VulkanTest differ diff --git a/cve_pipeline.cpp b/cve_pipeline.cpp index 903711b..b526288 100644 --- a/cve_pipeline.cpp +++ b/cve_pipeline.cpp @@ -1,5 +1,7 @@ #include "cve_pipeline.hpp" +#include "cve_model.hpp" + #include #include #include @@ -63,12 +65,15 @@ namespace cve { shaderStages[1].pNext = nullptr; shaderStages[1].pSpecializationInfo = nullptr; + + auto bindingDescriptions = CveModel::Vertex::getBindingDescriptions(); + auto attributeDescriptions = CveModel::Vertex::getAttributeDescriptions(); VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; - vertexInputInfo.vertexBindingDescriptionCount = 0; - vertexInputInfo.vertexAttributeDescriptionCount = 0; - vertexInputInfo.pVertexBindingDescriptions = nullptr; - vertexInputInfo.pVertexAttributeDescriptions = nullptr; + vertexInputInfo.vertexAttributeDescriptionCount = static_cast(attributeDescriptions.size()); + vertexInputInfo.vertexBindingDescriptionCount = static_cast(bindingDescriptions.size()); + vertexInputInfo.pVertexBindingDescriptions = bindingDescriptions.data(); + vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions.data(); VkPipelineViewportStateCreateInfo viewportInfo{}; viewportInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; diff --git a/first_app.cpp b/first_app.cpp index 3b7cffe..d61bff0 100644 --- a/first_app.cpp +++ b/first_app.cpp @@ -5,6 +5,7 @@ namespace cve { FirstApp::FirstApp() { + loadModels(); createPipelineLayout(); createPipeline(); createCommandBuffers(); @@ -22,6 +23,17 @@ namespace cve { vkDeviceWaitIdle(cveDevice.device()); } + + void FirstApp::loadModels() { + std::vector verticies { + {{0.0f, -0.5f}}, + {{0.5f, 0.5f}}, + {{-0.5f, 0.5f}} + }; + + cveModel = std::make_unique(cveDevice, verticies); + } + void FirstApp::createPipelineLayout() { VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; @@ -86,7 +98,8 @@ namespace cve { vkCmdBeginRenderPass(commandBuffers[i], &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE); cvePipeline->bind(commandBuffers[i]); - vkCmdDraw(commandBuffers[i], 3, 1, 0, 0); + cveModel->bind(commandBuffers[i]); + cveModel->draw(commandBuffers[i]); vkCmdEndRenderPass(commandBuffers[i]); if (vkEndCommandBuffer(commandBuffers[i]) != VK_SUCCESS) { diff --git a/first_app.hpp b/first_app.hpp index 07b683d..374260c 100644 --- a/first_app.hpp +++ b/first_app.hpp @@ -4,6 +4,7 @@ #include "cve_pipeline.hpp" #include "cve_device.hpp" #include "cve_swap_chain.hpp" +#include "cve_model.hpp" #include #include @@ -22,6 +23,7 @@ namespace cve { void run(); private: + void loadModels(); void createPipelineLayout(); void createPipeline(); void createCommandBuffers(); @@ -33,5 +35,6 @@ namespace cve { std::unique_ptr cvePipeline; VkPipelineLayout pipelineLayout; std::vector commandBuffers; + std::unique_ptr cveModel; }; }