source: opengl-game/vulkan-game.hpp@ b8777b7

feature/imgui-sdl points-test
Last change on this file since b8777b7 was b8777b7, checked in by Dmitry Portnoy <dmitry.portnoy@…>, 5 years ago

Templatize GraphicsPipeline_Vulkan by adding a VertexType parameter and moving all the function definitions into the header file, separate the model and overlay pipelines into separate variables in VulkanGame instead of storing them in a vector

  • Property mode set to 100644
File size: 4.1 KB
Line 
1#ifndef _VULKAN_GAME_H
2#define _VULKAN_GAME_H
3
4#include <glm/glm.hpp>
5
6#include "game-gui-sdl.hpp"
7#include "graphics-pipeline_vulkan.hpp"
8
9#include "vulkan-utils.hpp"
10
11#ifdef NDEBUG
12 const bool ENABLE_VALIDATION_LAYERS = false;
13#else
14 const bool ENABLE_VALIDATION_LAYERS = true;
15#endif
16
17struct ModelVertex {
18 glm::vec3 pos;
19 glm::vec3 color;
20 glm::vec2 texCoord;
21};
22
23struct OverlayVertex {
24 glm::vec3 pos;
25 glm::vec2 texCoord;
26};
27
28class VulkanGame {
29 public:
30 VulkanGame(int maxFramesInFlight);
31 ~VulkanGame();
32
33 void run(int width, int height, unsigned char guiFlags);
34
35 private:
36 const int MAX_FRAMES_IN_FLIGHT;
37
38 GameGui* gui;
39
40 GraphicsPipeline_Vulkan<ModelVertex> modelPipeline;
41 GraphicsPipeline_Vulkan<OverlayVertex> overlayPipeline;
42
43 SDL_version sdlVersion;
44 SDL_Window* window = nullptr;
45 SDL_Renderer* renderer = nullptr;
46
47 SDL_Texture* uiOverlay = nullptr;
48
49 VkInstance instance;
50 VkDebugUtilsMessengerEXT debugMessenger;
51 VkSurfaceKHR surface; // TODO: Change the variable name to vulkanSurface
52 VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
53 VkDevice device;
54
55 VkQueue graphicsQueue;
56 VkQueue presentQueue;
57
58 VkSwapchainKHR swapChain;
59 vector<VkImage> swapChainImages;
60 VkFormat swapChainImageFormat;
61 VkExtent2D swapChainExtent;
62 vector<VkImageView> swapChainImageViews;
63 vector<VkFramebuffer> swapChainFramebuffers;
64
65 VkRenderPass renderPass;
66 VkCommandPool commandPool;
67 vector<VkCommandBuffer> commandBuffers;
68
69 VulkanImage depthImage;
70
71 VkSampler textureSampler;
72
73 vector<VkDescriptorBufferInfo> uniformBufferInfoList;
74
75 // These are currently to store the MVP matrix
76 // I should figure out if it makes sense to use them for other uniforms in the future
77 // If not, I should rename them to better indicate their purpose.
78 // I should also decide if I can use these for all shaders, or if I need a separapte set of buffers for each one
79 vector<VkBuffer> uniformBuffers;
80 vector<VkDeviceMemory> uniformBuffersMemory;
81
82 VulkanImage floorTextureImage;
83 VkDescriptorImageInfo floorTextureImageDescriptor;
84
85 VulkanImage sdlOverlayImage;
86 VkDescriptorImageInfo sdlOverlayImageDescriptor;
87
88 TTF_Font* font;
89 SDL_Texture* fontSDLTexture;
90
91 SDL_Texture* imageSDLTexture;
92
93 vector<VkSemaphore> imageAvailableSemaphores;
94 vector<VkSemaphore> renderFinishedSemaphores;
95 vector<VkFence> inFlightFences;
96
97 size_t currentFrame;
98 size_t numPlanes = 0; // temp
99
100 bool framebufferResized;
101
102 bool initWindow(int width, int height, unsigned char guiFlags);
103 void initVulkan();
104 void mainLoop();
105 void renderUI();
106 void renderScene();
107 void cleanup();
108
109 void createVulkanInstance(const vector<const char*> &validationLayers);
110 void setupDebugMessenger();
111 void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
112 void createVulkanSurface();
113 void pickPhysicalDevice(const vector<const char*>& deviceExtensions);
114 bool isDeviceSuitable(VkPhysicalDevice physicalDevice, const vector<const char*>& deviceExtensions);
115 void createLogicalDevice(
116 const vector<const char*> validationLayers,
117 const vector<const char*>& deviceExtensions);
118 void createSwapChain();
119 void createImageViews();
120 void createRenderPass();
121 VkFormat findDepthFormat();
122 void createCommandPool();
123 void createImageResources();
124
125 void createTextureSampler();
126 void createFramebuffers();
127 void createUniformBuffers();
128 void createCommandBuffers();
129 void createSyncObjects();
130
131 void recreateSwapChain();
132 void updateUniformBuffer(uint32_t currentImage);
133
134 void cleanupSwapChain();
135
136 static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
137 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
138 VkDebugUtilsMessageTypeFlagsEXT messageType,
139 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
140 void* pUserData);
141};
142
143#endif // _VULKAN_GAME_H
Note: See TracBrowser for help on using the repository browser.