Changes in / [40995d3:a0da009] in opengl-game


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-ref.cpp

    r40995d3 ra0da009  
    102102
    103103   size_t numVertices; // Currently unused
    104    size_t vertexCapacity;
    105104   VkBuffer vertexBuffer;
    106105   VkDeviceMemory vertexBufferMemory;
    107106
    108107   size_t numIndices;
    109    size_t indexCapacity;
    110108   VkBuffer indexBuffer;
    111109   VkDeviceMemory indexBufferMemory;
     
    228226
    229227      size_t currentFrame = 0;
    230 
    231       size_t numPlanes = 0; // temp
    232228
    233229/*** START OF REFACTORED CODE ***/
     
    378374         createDescriptorSetLayout(scenePipeline);
    379375
    380          numPlanes = 2;
    381376
    382377         vector<OverlayVertex> overlayVertices = {
     
    818813
    819814         info.numVertices = numVertices;
    820          info.vertexCapacity = numVertices * 2;
    821          createVertexBuffer(info, vertexData, vertexSize);
     815         createVertexBuffer(info, vertexData, vertexSize * numVertices);
    822816
    823817         info.numIndices = numIndices;
    824          info.indexCapacity = numIndices * 2;
    825          createIndexBuffer(info, indexData, indexSize);
     818         createIndexBuffer(info, indexData, indexSize * numIndices);
    826819      }
    827820
     
    14001393      }
    14011394
    1402       void createVertexBuffer(GraphicsPipelineInfo& info, const void* vertexData, int vertexSize) {
    1403          VkDeviceSize bufferSize = info.numVertices * vertexSize;
    1404          VkDeviceSize bufferCapacity = info.vertexCapacity * vertexSize;
    1405 
     1395      void createVertexBuffer(GraphicsPipelineInfo& info, const void* vertexData, VkDeviceSize bufferSize) {
    14061396         VkBuffer stagingBuffer;
    14071397         VkDeviceMemory stagingBufferMemory;
     
    14151405         vkUnmapMemory(device, stagingBufferMemory);
    14161406
    1417          createBuffer(bufferCapacity, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
     1407         createBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
    14181408            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, info.vertexBuffer, info.vertexBufferMemory);
    14191409
    1420          copyBuffer(stagingBuffer, info.vertexBuffer, 0, 0, bufferSize);
     1410         copyBuffer(stagingBuffer, info.vertexBuffer, bufferSize);
    14211411
    14221412         vkDestroyBuffer(device, stagingBuffer, nullptr);
     
    14241414      }
    14251415
    1426       void createIndexBuffer(GraphicsPipelineInfo& info, const void* indexData, int indexSize) {
    1427          VkDeviceSize bufferSize = info.numIndices * indexSize;
    1428          VkDeviceSize bufferCapacity = info.indexCapacity * indexSize;
    1429 
     1416      void createIndexBuffer(GraphicsPipelineInfo& info, const void* indexData, VkDeviceSize bufferSize) {
    14301417         VkBuffer stagingBuffer;
    14311418         VkDeviceMemory stagingBufferMemory;
     
    14391426         vkUnmapMemory(device, stagingBufferMemory);
    14401427
    1441          createBuffer(bufferCapacity, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
     1428         createBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
    14421429            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, info.indexBuffer, info.indexBufferMemory);
    14431430
    1444          copyBuffer(stagingBuffer, info.indexBuffer, 0, 0, bufferSize);
     1431         copyBuffer(stagingBuffer, info.indexBuffer, bufferSize);
    14451432
    14461433         vkDestroyBuffer(device, stagingBuffer, nullptr);
     
    14921479      }
    14931480
    1494       void copyDataToBuffer(const void* srcData, VkBuffer dst, VkDeviceSize dstOffset, VkDeviceSize dataSize) {
    1495          VkBuffer stagingBuffer;
    1496          VkDeviceMemory stagingBufferMemory;
    1497          createBuffer(dataSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
    1498             VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    1499             stagingBuffer, stagingBufferMemory);
    1500 
    1501          void* data;
    1502          vkMapMemory(device, stagingBufferMemory, 0, dataSize, 0, &data);
    1503          memcpy(data, srcData, (size_t) dataSize);
    1504          vkUnmapMemory(device, stagingBufferMemory);
    1505 
    1506          copyBuffer(stagingBuffer, dst, 0, dstOffset, dataSize);
    1507 
    1508          vkDestroyBuffer(device, stagingBuffer, nullptr);
    1509          vkFreeMemory(device, stagingBufferMemory, nullptr);
    1510       }
    1511 
    1512       void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize srcOffset, VkDeviceSize dstOffset,
    1513             VkDeviceSize size) {
     1481      void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size) {
    15141482         VkCommandBuffer commandBuffer = beginSingleTimeCommands();
    15151483
    1516          VkBufferCopy copyRegion = { srcOffset, dstOffset, size };
     1484         VkBufferCopy copyRegion = {};
     1485         copyRegion.size = size;
    15171486         vkCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, 1, &copyRegion);
    15181487
     
    17141683      }
    17151684
    1716       bool addObjectToScene(GraphicsPipelineInfo& info,
    1717             const void* vertexData, int vertexSize, size_t numVertices,
    1718             vector<uint16_t>& indices, size_t numIndices) {
    1719          int indexSize = sizeof(uint16_t);
    1720 
    1721          for (uint16_t& idx : indices) {
    1722             idx += info.numVertices;
    1723          }
    1724 
    1725          if (info.numVertices + numVertices > info.vertexCapacity) {
    1726             cout << "ERROR: Need to resize vertex buffers" << endl;
    1727          } else if (info.numIndices + numIndices > info.indexCapacity) {
    1728             cout << "ERROR: Need to resize index buffers" << endl;
    1729          } else {
    1730             cout << "Added object to scene" << endl;
    1731 
    1732             copyDataToBuffer(vertexData, info.vertexBuffer, info.numVertices * vertexSize, numVertices * vertexSize);
    1733             info.numVertices += numVertices;
    1734 
    1735             copyDataToBuffer(indices.data(), info.indexBuffer, info.numIndices * indexSize, numIndices * indexSize);
    1736             info.numIndices += numIndices;
    1737 
    1738             vkFreeCommandBuffers(device, commandPool, static_cast<uint32_t>(commandBuffers.size()), commandBuffers.data());
    1739             createCommandBuffers();
    1740 
    1741             return true;
    1742          }
    1743 
    1744          return false;
    1745       }
    1746 
    17471685/*** START OF REFACTORED CODE ***/
    17481686      void mainLoop() {
     
    17571695               }
    17581696               if (e.type == SDL_KEYDOWN) {
    1759                   if (e.key.keysym.sym == SDLK_SPACE) {
    1760                      float zOffset = -0.5f + (0.5f * numPlanes);
    1761                      vector<Vertex> vertices = {
    1762                         {{-0.5f, -0.5f,  zOffset}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
    1763                         {{ 0.5f, -0.5f,  zOffset}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
    1764                         {{ 0.5f,  0.5f,  zOffset}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
    1765                         {{-0.5f,  0.5f,  zOffset}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}
    1766                      };
    1767                      vector<uint16_t> indices = {
    1768                         0, 1, 2, 2, 3, 0
    1769                      };
    1770 
    1771                      if (addObjectToScene(scenePipeline,
    1772                            vertices.data(), sizeof(Vertex), vertices.size(),
    1773                            indices, indices.size())) {
    1774                         numPlanes++;
    1775                      }
    1776                   } else if (e.key.keysym.sym == SDLK_ESCAPE) {
     1697                  if (e.key.keysym.scancode == SDL_SCANCODE_ESCAPE) {
    17771698                     quit = true;
    17781699                  }
Note: See TracChangeset for help on using the changeset viewer.