Changeset b8b32bd in opengl-game


Ignore:
Timestamp:
Aug 19, 2019, 9:51:48 PM (5 years ago)
Author:
Dmitry Portnoy <dmitry.portnoy@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
58b95b3, d22ae72
Parents:
c8b0357
Message:

Create separate graphics pipelines for the overlay and the scene

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-game.cpp

    rc8b0357 rb8b32bd  
    111111};
    112112
    113 struct BufferInfo {
     113struct GraphicsPipelineInfo {
     114   VkPipeline pipeline;
     115
    114116   VkBuffer vertexBuffer;
    115117   VkDeviceMemory vertexBufferMemory;
     
    187189      VkDescriptorSetLayout descriptorSetLayout;
    188190      VkPipelineLayout pipelineLayout;
    189       VkPipeline graphicsPipeline;
    190191      VkDescriptorPool descriptorPool;
    191192      vector<VkDescriptorSet> descriptorSets;
     
    211212      VkSampler textureSampler;
    212213
    213       BufferInfo sceneBuffers;
    214       BufferInfo overlayBuffers;
     214      GraphicsPipelineInfo scenePipeline;
     215      GraphicsPipelineInfo overlayPipeline;
    215216
    216217      vector<VkBuffer> uniformBuffers;
     
    313314         createRenderPass();
    314315         createDescriptorSetLayout();
    315          createGraphicsPipeline();
     316         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &scenePipeline.pipeline);
     317         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &overlayPipeline.pipeline);
    316318         createCommandPool();
    317319         createDepthResources();
     
    321323         createTextureSampler();
    322324
    323          createShaderBuffers(sceneBuffers, {
     325         createShaderBuffers(scenePipeline, {
    324326            {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
    325327            {{ 0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
     
    336338         });
    337339
    338          createShaderBuffers(overlayBuffers, {
     340         createShaderBuffers(overlayPipeline, {
    339341            // Filler vertices to increase the overlay vertex indices to at least 8
    340342            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
     
    797799      }
    798800
    799       void createGraphicsPipeline() {
    800          auto vertShaderCode = readFile("shaders/vert.spv");
    801          auto fragShaderCode = readFile("shaders/frag.spv");
     801      void createGraphicsPipeline(string vertShaderFile, string fragShaderFile, VkPipeline* pipeline) {
     802         auto vertShaderCode = readFile(vertShaderFile);
     803         auto fragShaderCode = readFile(fragShaderFile);
    802804
    803805         VkShaderModule vertShaderModule = createShaderModule(vertShaderCode);
     
    929931         pipelineInfo.basePipelineIndex = -1;
    930932
    931          if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &graphicsPipeline) != VK_SUCCESS) {
     933         if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, pipeline) != VK_SUCCESS) {
    932934            throw runtime_error("failed to create graphics pipeline!");
    933935         }
     
    13341336      }
    13351337
    1336       void createShaderBuffers(BufferInfo& info, const vector<Vertex>& vertices, const vector<uint16_t>& indices) {
     1338      void createShaderBuffers(GraphicsPipelineInfo& info, const vector<Vertex>& vertices, const vector<uint16_t>& indices) {
    13371339         createVertexBuffer(info.vertexBuffer, info.vertexBufferMemory, vertices);
    13381340         info.numVertices = vertices.size();
     
    16101612            vkCmdBeginRenderPass(commandBuffers[i], &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
    16111613
    1612             vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
     1614            vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, scenePipeline.pipeline);
    16131615
    16141616            vkCmdBindDescriptorSets(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSets[i], 0, nullptr);
    16151617
    1616             VkBuffer vertexBuffers[] = { sceneBuffers.vertexBuffer };
     1618            VkBuffer vertexBuffers[] = { scenePipeline.vertexBuffer };
    16171619            VkDeviceSize offsets[] = { 0 };
    16181620            vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffers, offsets);
    16191621
    1620             vkCmdBindIndexBuffer(commandBuffers[i], sceneBuffers.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
    1621 
    1622             vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(sceneBuffers.numIndices), 1, 0, 0, 0);
    1623 
    1624             vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
    1625 
    1626             VkBuffer vertexBuffersOverlay[] = { overlayBuffers.vertexBuffer };
     1622            vkCmdBindIndexBuffer(commandBuffers[i], scenePipeline.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
     1623
     1624            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(scenePipeline.numIndices), 1, 0, 0, 0);
     1625
     1626            vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, overlayPipeline.pipeline);
     1627
     1628            VkBuffer vertexBuffersOverlay[] = { overlayPipeline.vertexBuffer };
    16271629            vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffersOverlay, offsets);
    16281630
    1629             vkCmdBindIndexBuffer(commandBuffers[i], overlayBuffers.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
    1630 
    1631             vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(overlayBuffers.numIndices), 1, 0, 0, 0);
     1631            vkCmdBindIndexBuffer(commandBuffers[i], overlayPipeline.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
     1632
     1633            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(overlayPipeline.numIndices), 1, 0, 0, 0);
    16321634
    16331635            vkCmdEndRenderPass(commandBuffers[i]);
     
    18221824         createImageViews();
    18231825         createRenderPass();
    1824          createGraphicsPipeline();
     1826         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &scenePipeline.pipeline);
     1827         createGraphicsPipeline("shaders/vert.spv", "shaders/frag.spv", &overlayPipeline.pipeline);
    18251828         createDepthResources();
    18261829         createFramebuffers();
     
    18501853         vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
    18511854
    1852          vkDestroyBuffer(device, sceneBuffers.vertexBuffer, nullptr);
    1853          vkFreeMemory(device, sceneBuffers.vertexBufferMemory, nullptr);
    1854          vkDestroyBuffer(device, sceneBuffers.indexBuffer, nullptr);
    1855          vkFreeMemory(device, sceneBuffers.indexBufferMemory, nullptr);
    1856 
    1857          vkDestroyBuffer(device, overlayBuffers.vertexBuffer, nullptr);
    1858          vkFreeMemory(device, overlayBuffers.vertexBufferMemory, nullptr);
    1859          vkDestroyBuffer(device, overlayBuffers.indexBuffer, nullptr);
    1860          vkFreeMemory(device, overlayBuffers.indexBufferMemory, nullptr);
     1855         vkDestroyBuffer(device, scenePipeline.vertexBuffer, nullptr);
     1856         vkFreeMemory(device, scenePipeline.vertexBufferMemory, nullptr);
     1857         vkDestroyBuffer(device, scenePipeline.indexBuffer, nullptr);
     1858         vkFreeMemory(device, scenePipeline.indexBufferMemory, nullptr);
     1859
     1860         vkDestroyBuffer(device, overlayPipeline.vertexBuffer, nullptr);
     1861         vkFreeMemory(device, overlayPipeline.vertexBufferMemory, nullptr);
     1862         vkDestroyBuffer(device, overlayPipeline.indexBuffer, nullptr);
     1863         vkFreeMemory(device, overlayPipeline.indexBufferMemory, nullptr);
    18611864
    18621865         for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
     
    19171920         vkFreeCommandBuffers(device, commandPool, static_cast<uint32_t>(commandBuffers.size()), commandBuffers.data());
    19181921
    1919          vkDestroyPipeline(device, graphicsPipeline, nullptr);
     1922         vkDestroyPipeline(device, scenePipeline.pipeline, nullptr);
     1923         vkDestroyPipeline(device, overlayPipeline.pipeline, nullptr);
     1924
    19201925         vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
    19211926         vkDestroyRenderPass(device, renderPass, nullptr);
Note: See TracChangeset for help on using the changeset viewer.