source: opengl-game/vulkan-game.hpp@ 87c8f1a

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

In vaulkangame, define vertex buffer and index buffer data and transfer it to the gpu

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