Changeset b794178 in opengl-game for vulkan-ref.cpp
- Timestamp:
- Oct 17, 2019, 9:30:18 PM (5 years ago)
- Branches:
- feature/imgui-sdl, master, points-test
- Children:
- e83b155
- Parents:
- 771b33a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vulkan-ref.cpp
r771b33a rb794178 80 80 }; 81 81 82 /*** START OF REFACTORED CODE ***/ 82 83 struct DescriptorInfo { 83 84 VkDescriptorType type; … … 87 88 VkDescriptorImageInfo* imageData; 88 89 }; 90 /*** END OF REFACTORED CODE ***/ 89 91 90 92 struct GraphicsPipelineInfo { 93 /*** START OF REFACTORED CODE ***/ 91 94 VkPipelineLayout pipelineLayout; 92 95 VkPipeline pipeline; … … 100 103 VkDescriptorSetLayout descriptorSetLayout; 101 104 vector<VkDescriptorSet> descriptorSets; 105 /*** END OF REFACTORED CODE ***/ 102 106 103 107 size_t numVertices; // Currently unused … … 153 157 SDL_Window* window = nullptr; 154 158 SDL_Renderer* gRenderer = nullptr; 155 /*** END OF REFACTORED CODE ***/156 159 SDL_Texture* uiOverlay = nullptr; 160 /*** END OF REFACTORED CODE ***/ 157 161 158 162 TTF_Font* gFont = nullptr; … … 176 180 /*** END OF REFACTORED CODE ***/ 177 181 // (This was taken out of vulkan-game for now and replaced with Viewport) 178 // It will definitely be needed when creating render passes and I could use it in a few other places 182 // It will definitely be needed when creating command buffers and I could use it in a few other places 183 // TODO: Check above ^ 179 184 VkExtent2D swapChainExtent; 180 185 /*** START OF REFACTORED CODE ***/ … … 190 195 vector<VkCommandBuffer> commandBuffers; 191 196 197 /*** START OF REFACTORED CODE ***/ 192 198 // The images and the sampler are used to store data for specific attributes. I probably 193 199 // want to keep them separate from the GraphicsPipelineInfo objects and start passing … … 197 203 VkDeviceMemory depthImageMemory; 198 204 VkImageView depthImageView; 205 /*** END OF REFACTORED CODE ***/ 199 206 200 207 VkImage textureImage; … … 202 209 VkImageView textureImageView; 203 210 204 VkImage overlayImage;205 VkDeviceMemory overlayImageMemory;206 VkImageView overlayImageView;207 208 211 VkImage sdlOverlayImage; 209 212 VkDeviceMemory sdlOverlayImageMemory; 210 213 VkImageView sdlOverlayImageView; 211 214 215 /*** START OF REFACTORED CODE ***/ 212 216 VkSampler textureSampler; 213 217 214 218 // These are currently to store the MVP matrix 215 219 // I should figure out if it makes sense to use them for other uniforms in the future 216 // If not, I should rename them to better indicate their pu prose.220 // If not, I should rename them to better indicate their purpose. 217 221 // I should also decide if I can use these for all shaders, or if I need a separapte set of buffers for each one 218 222 vector<VkBuffer> uniformBuffers; 219 223 vector<VkDeviceMemory> uniformBuffersMemory; 224 /*** END OF REFACTORED CODE ***/ 220 225 221 226 VkDescriptorImageInfo sceneImageInfo; 222 227 VkDescriptorImageInfo overlayImageInfo; 223 228 229 /*** START OF REFACTORED CODE ***/ 224 230 vector<VkDescriptorBufferInfo> uniformBufferInfoList; 231 /*** END OF REFACTORED CODE ***/ 225 232 226 233 GraphicsPipelineInfo scenePipeline; … … 257 264 return RTWO_ERROR; 258 265 } 259 /*** END OF REFACTORED CODE ***/260 266 261 267 SDL_VERSION(&sdlVersion); … … 277 283 cout << "Unable to set texture blend mode! SDL Error: " << SDL_GetError() << endl; 278 284 } 285 /*** END OF REFACTORED CODE ***/ 279 286 280 287 gFont = TTF_OpenFont("fonts/lazy.ttf", 28); … … 334 341 /*** END OF REFACTORED CODE ***/ 335 342 336 // THIS SECTION IS WHERE TEXTURES ARE CREATED, MAYBE SPLIT IT OFF INTO A SEPARATE FUNCTION337 // MAY WANT TO CREATE A STRUCT TO HOLD SIMILAR VARIABLES< LIKE THOSE FOR A TEXTURE338 339 343 createImageResources("textures/texture.jpg", textureImage, textureImageMemory, textureImageView); 344 /*** START OF REFACTORED CODE ***/ 340 345 createImageResourcesFromSDLTexture(uiOverlay, sdlOverlayImage, sdlOverlayImageMemory, sdlOverlayImageView); 341 346 createTextureSampler(); … … 350 355 overlayImageInfo.imageView = sdlOverlayImageView; 351 356 overlayImageInfo.sampler = textureSampler; 357 /*** END OF REFACTORED CODE ***/ 352 358 353 359 // SHADER-SPECIFIC STUFF STARTS HERE … … 377 383 addAttributeDescription(scenePipeline, VK_FORMAT_R32G32B32_SFLOAT, offset_of(&Vertex::color)); 378 384 addAttributeDescription(scenePipeline, VK_FORMAT_R32G32_SFLOAT, offset_of(&Vertex::texCoord)); 379 /*** END OF REFACTORED CODE ***/380 385 381 386 addDescriptorInfo(scenePipeline, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, &uniformBufferInfoList, nullptr); … … 383 388 384 389 createDescriptorSetLayout(scenePipeline); 390 /*** END OF REFACTORED CODE ***/ 385 391 386 392 numPlanes = 2; … … 403 409 addAttributeDescription(overlayPipeline, VK_FORMAT_R32G32B32_SFLOAT, offset_of(&OverlayVertex::pos)); 404 410 addAttributeDescription(overlayPipeline, VK_FORMAT_R32G32_SFLOAT, offset_of(&OverlayVertex::texCoord)); 405 /*** END OF REFACTORED CODE ***/406 411 407 412 addDescriptorInfo(overlayPipeline, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, nullptr, &overlayImageInfo); 408 413 409 414 createDescriptorSetLayout(overlayPipeline); 415 /*** END OF REFACTORED CODE ***/ 410 416 411 417 createBufferResources(); … … 847 853 } 848 854 855 /*** START OF REFACTORED CODE ***/ 849 856 void addDescriptorInfo(GraphicsPipelineInfo& info, VkDescriptorType type, VkShaderStageFlags stageFlags, vector<VkDescriptorBufferInfo>* bufferData, VkDescriptorImageInfo* imageData) { 850 857 info.descriptorInfoList.push_back({ type, stageFlags, bufferData, imageData }); … … 873 880 874 881 void createGraphicsPipeline(string vertShaderFile, string fragShaderFile, GraphicsPipelineInfo& info) { 875 /*** START OF REFACTORED CODE ***/876 882 vector<char> vertShaderCode = readFile(vertShaderFile); 877 883 vector<char> fragShaderCode = readFile(fragShaderFile); … … 977 983 pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; 978 984 pipelineLayoutInfo.setLayoutCount = 1; 979 /*** END OF REFACTORED CODE ***/980 985 pipelineLayoutInfo.pSetLayouts = &info.descriptorSetLayout; 981 986 pipelineLayoutInfo.pushConstantRangeCount = 0; … … 1007 1012 } 1008 1013 1009 /*** START OF REFACTORED CODE ***/1010 1014 vkDestroyShaderModule(device, vertShaderModule, nullptr); 1011 1015 vkDestroyShaderModule(device, fragShaderModule, nullptr); 1012 /*** END OF REFACTORED CODE ***/ 1013 } 1016 } 1017 /*** END OF REFACTORED CODE ***/ 1014 1018 1015 1019 VkShaderModule createShaderModule(const vector<char>& code) { … … 1134 1138 throw runtime_error("failed to find supported format!"); 1135 1139 } 1136 /*** END OF REFACTORED CODE ***/1137 1140 1138 1141 bool hasStencilComponent(VkFormat format) { … … 1191 1194 view = createImageView(image, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_ASPECT_COLOR_BIT); 1192 1195 } 1196 /*** END OF REFACTORED CODE ***/ 1193 1197 1194 1198 void populateImageFromSDLTexture(SDL_Texture* texture, VkImage& image) { … … 1386 1390 return imageView; 1387 1391 } 1388 /*** END OF REFACTORED CODE ***/1389 1392 1390 1393 void createTextureSampler() { … … 1413 1416 } 1414 1417 } 1418 /*** END OF REFACTORED CODE ***/ 1415 1419 1416 1420 void createVertexBuffer(GraphicsPipelineInfo& info, const void* vertexData, int vertexSize) { … … 1462 1466 } 1463 1467 1468 /*** START OF REFACTORED CODE ***/ 1464 1469 void createUniformBuffers() { 1465 1470 VkDeviceSize bufferSize = sizeof(UniformBufferObject); … … 1505 1510 vkBindBufferMemory(device, buffer, bufferMemory, 0); 1506 1511 } 1512 /*** END OF REFACTORED CODE ***/ 1507 1513 1508 1514 void copyDataToBuffer(const void* srcData, VkBuffer dst, VkDeviceSize dstOffset, VkDeviceSize dataSize) { … … 1567 1573 } 1568 1574 1575 /*** START OF REFACTORED CODE ***/ 1569 1576 uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) { 1570 1577 VkPhysicalDeviceMemoryProperties memProperties; … … 1642 1649 } 1643 1650 } 1651 /*** END OF REFACTORED CODE ***/ 1644 1652 1645 1653 void createCommandBuffers() { … … 1948 1956 1949 1957 void createBufferResources() { 1958 // TODO: The three functions below will be called in vulkan-game following the 1959 // pipeline creation (createDescriptorSets()), and before createCommandBuffers() 1950 1960 createDepthResources(); 1951 1961 createFramebuffers(); 1952 1962 createUniformBuffers(); 1953 1963 1964 /*** START OF REFACTORED CODE ***/ 1954 1965 createGraphicsPipeline("shaders/scene-vert.spv", "shaders/scene-frag.spv", scenePipeline); 1955 1966 createDescriptorPool(scenePipeline); 1967 /*** END OF REFACTORED CODE ***/ 1956 1968 createDescriptorSets(scenePipeline); 1957 1969 1970 /*** START OF REFACTORED CODE ***/ 1958 1971 createGraphicsPipeline("shaders/overlay-vert.spv", "shaders/overlay-frag.spv", overlayPipeline); 1959 1972 createDescriptorPool(overlayPipeline); 1973 /*** END OF REFACTORED CODE ***/ 1960 1974 createDescriptorSets(overlayPipeline); 1961 1975 … … 1963 1977 } 1964 1978 1965 /*** START OF REFACTORED CODE ***/1966 1979 void cleanup() { 1980 /*** START OF REFACTORED CODE ***/ 1967 1981 cleanupSwapChain(); 1968 1982 /*** END OF REFACTORED CODE ***/ … … 1974 1988 vkFreeMemory(device, textureImageMemory, nullptr); 1975 1989 1976 vkDestroyImageView(device, overlayImageView, nullptr);1977 vkDestroyImage(device, overlayImage, nullptr);1978 vkFreeMemory(device, overlayImageMemory, nullptr);1979 1980 1990 vkDestroyImageView(device, sdlOverlayImageView, nullptr); 1981 1991 vkDestroyImage(device, sdlOverlayImage, nullptr); 1982 1992 vkFreeMemory(device, sdlOverlayImageMemory, nullptr); 1983 1993 1994 /*** START OF REFACTORED CODE ***/ 1984 1995 cleanupPipelineBuffers(scenePipeline); 1985 1996 cleanupPipelineBuffers(overlayPipeline); 1997 /*** END OF REFACTORED CODE ***/ 1986 1998 1987 1999 for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) { … … 2001 2013 2002 2014 vkDestroyInstance(instance, nullptr); 2003 /*** END OF REFACTORED CODE ***/2004 2015 2005 2016 // TODO: Check if any of these functions accept null parameters … … 2010 2021 uiOverlay = nullptr; 2011 2022 } 2023 /*** END OF REFACTORED CODE ***/ 2012 2024 2013 2025 TTF_CloseFont(gFont); … … 2045 2057 vkFreeCommandBuffers(device, commandPool, static_cast<uint32_t>(commandBuffers.size()), commandBuffers.data()); 2046 2058 2059 /*** START OF REFACTORED CODE ***/ 2047 2060 cleanupPipeline(scenePipeline); 2048 2061 cleanupPipeline(overlayPipeline); 2049 2062 2050 /*** START OF REFACTORED CODE ***/2051 2063 vkDestroyRenderPass(device, renderPass, nullptr); 2052 2064 … … 2062 2074 vkFreeMemory(device, uniformBuffersMemory[i], nullptr); 2063 2075 } 2064 /*** START OF REFACTORED CODE ***/ 2065 } 2066 /*** END OF REFACTORED CODE ***/ 2067 2076 } 2077 2078 /*** START OF REFACTORED CODE ***/ 2068 2079 void cleanupPipeline(GraphicsPipelineInfo& pipeline) { 2069 2080 vkDestroyPipeline(device, pipeline.pipeline, nullptr); … … 2071 2082 vkDestroyPipelineLayout(device, pipeline.pipelineLayout, nullptr); 2072 2083 } 2084 /*** END OF REFACTORED CODE ***/ 2073 2085 2074 2086 void cleanupPipelineBuffers(GraphicsPipelineInfo& pipeline) { 2087 /*** START OF REFACTORED CODE ***/ 2075 2088 vkDestroyDescriptorSetLayout(device, pipeline.descriptorSetLayout, nullptr); 2089 /*** END OF REFACTORED CODE ***/ 2076 2090 2077 2091 vkDestroyBuffer(device, pipeline.vertexBuffer, nullptr);
Note:
See TracChangeset
for help on using the changeset viewer.