Changeset 055750a in opengl-game for vulkan-game.hpp


Ignore:
Timestamp:
Dec 4, 2019, 9:33:43 PM (5 years ago)
Author:
Dmitry Portnoy <dmitry.portnoy@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
785333b, cf727ca
Parents:
e1308e8
Message:

In VulkanGame, use SSBOs in the ship and scene shaders to store per-object data (currently just the model matrix)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vulkan-game.hpp

    re1308e8 r055750a  
    3535};
    3636
    37 struct UBO_MvpMat {
    38    alignas(16) mat4 model;
     37struct UBO_VP_mats {
    3938   alignas(16) mat4 view;
    4039   alignas(16) mat4 proj;
     40};
     41
     42struct SBO_SceneObject {
     43   alignas(16) mat4 model;
    4144};
    4245
     
    5760      vec3 cam_pos;
    5861
    59       UBO_MvpMat modelMvpMats;
    60       UBO_MvpMat shipMvpMats;
     62      UBO_VP_mats object_VP_mats;
     63      SBO_SceneObject so_Object;
     64
     65      UBO_VP_mats ship_VP_mats;
     66      SBO_SceneObject so_Ship;
    6167
    6268      GameGui* gui;
     
    96102      VkSampler textureSampler;
    97103
    98       // These are currently to store the MVP matrix
    99       // I should figure out if it makes sense to use them for other uniforms in the future
    100       // If not, I should rename them to better indicate their purpose.
    101       vector<VkBuffer> uniformBuffers;
    102       vector<VkDeviceMemory> uniformBuffersMemory;
    103 
    104       vector<VkDescriptorBufferInfo> uniformBufferInfoList;
     104      // TODO: I should probably rename the uniformBuffer* and storageBuffer*
     105      // variables to better reflect the data they hold
     106
     107      vector<VkBuffer> uniformBuffers_scenePipeline;
     108      vector<VkDeviceMemory> uniformBuffersMemory_scenePipeline;
     109
     110      vector<VkDescriptorBufferInfo> uniformBufferInfoList_scenePipeline;
     111
     112      vector<VkBuffer> storageBuffers_scenePipeline;
     113      vector<VkDeviceMemory> storageBuffersMemory_scenePipeline;
     114
     115      vector<VkDescriptorBufferInfo> storageBufferInfoList_scenePipeline;
    105116
    106117      vector<VkBuffer> uniformBuffers_shipPipeline;
     
    108119
    109120      vector<VkDescriptorBufferInfo> uniformBufferInfoList_shipPipeline;
     121
     122      vector<VkBuffer> storageBuffers_shipPipeline;
     123      vector<VkDeviceMemory> storageBuffersMemory_shipPipeline;
     124
     125      vector<VkDescriptorBufferInfo> storageBufferInfoList_shipPipeline;
    110126
    111127      VulkanImage floorTextureImage;
     
    162178      vector<VertexType> addVertexNormals(vector<VertexType> vertices);
    163179
    164       template<class UniformType>
    165       void createUniformBuffers(vector<VkBuffer>& buffers, vector<VkDeviceMemory>& buffersMemory,
    166          vector<VkDescriptorBufferInfo>& bufferInfoList);
     180      void createBufferSet(VkDeviceSize bufferSize, VkBufferUsageFlags flags,
     181         vector<VkBuffer>& buffers, vector<VkDeviceMemory>& buffersMemory, vector<VkDescriptorBufferInfo>& bufferInfoList);
    167182
    168183      void recreateSwapChain();
     
    176191            void* pUserData);
    177192};
    178 
    179 template<class UniformType>
    180 void VulkanGame::createUniformBuffers(vector<VkBuffer>& buffers, vector<VkDeviceMemory>& buffersMemory,
    181       vector<VkDescriptorBufferInfo>& bufferInfoList) {
    182    buffers.resize(swapChainImages.size());
    183    buffersMemory.resize(swapChainImages.size());
    184    bufferInfoList.resize(swapChainImages.size());
    185 
    186    for (size_t i = 0; i < swapChainImages.size(); i++) {
    187       VulkanUtils::createBuffer(device, physicalDevice, sizeof(UniformType), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
    188          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
    189          buffers[i], buffersMemory[i]);
    190 
    191       bufferInfoList[i].buffer = buffers[i];
    192       bufferInfoList[i].offset = 0;
    193       bufferInfoList[i].range = sizeof(UniformType);
    194    }
    195 }
    196193
    197194template<class VertexType>
Note: See TracChangeset for help on using the changeset viewer.