3#define GLFW_INCLUDE_VULKAN
4#define GLM_FORCE_RADIANS
16#include <glm/gtc/matrix_transform.hpp>
24#include <unordered_map>
40#ifdef CHEESE_SHADER_DIR
73 uint32_t
addRectangle(glm::vec2 position,
float width,
float height, glm::vec3 color);
82 uint32_t
addTriangle(std::array<glm::vec2, 3> positions, glm::vec3 color);
124 const std::vector<glm::vec2>& texCoords);
257 VkInstance
instance,
const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
258 const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger);
262 const VkAllocationCallbacks* pAllocator);
264 static std::vector<char>
readFile(
const std::string& filename);
278 void _addRectangle(glm::vec2 position,
float width,
float height, glm::vec3 color,
281 void _addTriangle(std::array<glm::vec2, 3> positions, glm::vec3 color, uint32_t index);
290 std::vector<glm::vec2> texCoords);
322 void createImage(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling,
323 VkImageUsageFlags usage, VkMemoryPropertyFlags properties, VkImage& image,
324 VkDeviceMemory& imageMemory, uint32_t arrayLayers);
335 VkImageViewType viewType);
340 VkImageLayout newLayout, uint32_t layerCount);
343 uint32_t layerCount);
345 void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
346 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
362 void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize bufferSize);
385 const std::vector<VkSurfaceFormatKHR>& availableFormats);
388 const std::vector<VkPresentModeKHR>& availablePresentModes);
398 static VKAPI_ATTR VkBool32 VKAPI_CALL
400 VkDebugUtilsMessageTypeFlagsEXT messageType,
401 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
void* pUserData);
Class that implements graphic system.
Definition graphicCore.hpp:57
static std::vector< char > readFile(const std::string &filename)
std::vector< VkImage > swapChainImages
Definition graphicCore.hpp:213
void createUniformBuffers()
std::vector< VkBuffer > uniformBuffers
Definition graphicCore.hpp:239
VkExtent2D swapChainExtent
Definition graphicCore.hpp:215
std::vector< Vertex > vertices
Definition graphicCore.hpp:244
void createDescriptorPool()
void createImage(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags properties, VkImage &image, VkDeviceMemory &imageMemory, uint32_t arrayLayers)
void createDescriptorSets()
VkCommandPool commandPool
Definition graphicCore.hpp:222
VkBuffer vertexBuffer
Definition graphicCore.hpp:230
std::vector< VkImageView > swapChainImageViews
Definition graphicCore.hpp:216
void createCommandBuffers()
void stopGraphicThread()
Stopping graphics thread method.
VkShaderModule createShaderModule(const std::vector< char > &code)
VkSwapchainKHR swapChain
Definition graphicCore.hpp:212
static void framebufferSizeCallback(GLFWwindow *window, int width, int height)
void _setCamera(glm::vec2 position, float zoom)
void recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex)
VkRenderPass renderPass
Definition graphicCore.hpp:217
SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device)
VkFormat swapChainImageFormat
Definition graphicCore.hpp:214
GLFWwindow * window
Definition graphicCore.hpp:203
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize bufferSize)
std::vector< void * > uniformBuffersMapped
Definition graphicCore.hpp:241
size_t currentFrame
Definition graphicCore.hpp:228
void startGraphicThread()
Starting graphics thread method.
void createGraphicsPipeline()
VkQueue presentQueue
Definition graphicCore.hpp:211
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT &createInfo)
std::mutex verticesMutex
Definition graphicCore.hpp:199
std::vector< std::string > texturePaths
Definition graphicCore.hpp:253
VkDescriptorSetLayout descriptorSetLayout
Definition graphicCore.hpp:218
void setCamera(glm::vec2 position, float zoom)
Set camera method.
VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector< VkSurfaceFormatKHR > &availableFormats)
VkDeviceMemory vertexBufferMemory
Definition graphicCore.hpp:231
std::vector< VkExtensionProperties > instanceExtensions
Definition graphicCore.hpp:205
void createLogicalDevice()
std::mutex stopMutex
Definition graphicCore.hpp:200
VkPipelineLayout pipelineLayout
Definition graphicCore.hpp:219
void createTextureSampler()
VkCommandBuffer beginSingleTimeCommands()
VkDeviceMemory stagingIndexBufferMemory
Definition graphicCore.hpp:238
VkBuffer indexBuffer
Definition graphicCore.hpp:235
std::unordered_map< int, FigureDesc > figures
Definition graphicCore.hpp:246
std::vector< VkFence > inFlightFences
Definition graphicCore.hpp:226
void _setTexture(uint32_t figureIndex, TextureDescriptor textureDescriptor, std::vector< glm::vec2 > texCoords)
VkPipeline graphicsPipeline
Definition graphicCore.hpp:220
void createTextureImage()
QueueFamilyIndicies findQueueFamilies(VkPhysicalDevice device)
VkImageView createImageView(VkImage image, VkFormat format, uint32_t layerCount, VkImageViewType viewType)
bool isStopped
Definition graphicCore.hpp:247
std::vector< VkSemaphore > imageAvailableSemaphores
Definition graphicCore.hpp:224
VkInstance instance
Definition graphicCore.hpp:204
uint32_t verticesCount
Definition graphicCore.hpp:249
void setupDebugMessenger()
std::vector< TextureArray > textureArrays
Definition graphicCore.hpp:254
void _removeFigure(uint32_t index)
void _addTriangle(std::array< glm::vec2, 3 > positions, glm::vec3 color, uint32_t index)
std::vector< VkFramebuffer > swapChainFramebuffers
Definition graphicCore.hpp:221
void _setTranform(uint32_t index, glm::mat4 transform)
uint32_t addRectangle(glm::vec2 position, float width, float height, glm::vec3 color)
Add Rectangle method.
bool checkDeviceExtensionSupport(VkPhysicalDevice device)
std::vector< const char * > getRequiredExtensions()
void createFrameBuffers()
void endSingleTimeCommands(VkCommandBuffer commandBuffer)
void _addRectangle(glm::vec2 position, float width, float height, glm::vec3 color, uint32_t index)
static VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT *pDebugMessenger)
std::vector< VkDeviceMemory > uniformBuffersMemory
Definition graphicCore.hpp:240
GraphicCore(GLFWwindow *window)
Object constructor.
RenderQueue renderQueue
Definition graphicCore.hpp:251
bool isDeviceSuitable(VkPhysicalDevice device)
void pickPhysicalDevice()
Camera camera
Definition graphicCore.hpp:252
static void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks *pAllocator)
TextureDescriptor addTexture(const std::string &path)
Loading texture method.
bool verticesChanged
Definition graphicCore.hpp:232
uint32_t addTriangle(std::array< glm::vec2, 3 > positions, glm::vec3 color)
Add Triangle method.
void setTexture(uint32_t figureIndex, TextureDescriptor textureDescriptor, const std::vector< glm::vec2 > &texCoords)
Set Texture method.
void updateVertexBuffer()
uint32_t indicesToDraw
Definition graphicCore.hpp:248
VkPresentModeKHR chooseSwapPresentMode(const std::vector< VkPresentModeKHR > &availablePresentModes)
VkDeviceMemory indexBufferMemory
Definition graphicCore.hpp:236
void createVertexBuffer()
void updateUniformBuffer(uint32_t currentImage)
uint32_t nextFigureHex
Definition graphicCore.hpp:250
void removeFigure(uint32_t index)
Remove Figure method.
VkBuffer stagingVertexBuffer
Definition graphicCore.hpp:233
void createDescriptorSetLayout()
VkBuffer stagingIndexBuffer
Definition graphicCore.hpp:237
VkPhysicalDevice physicalDevice
Definition graphicCore.hpp:208
VkDeviceMemory stagingVertexBufferMemory
Definition graphicCore.hpp:234
bool checkValidationLayerSupport()
std::thread graphicThread
Definition graphicCore.hpp:201
std::vector< uint16_t > indices
Definition graphicCore.hpp:245
VkDebugUtilsMessengerEXT debugMessenger
Definition graphicCore.hpp:206
std::vector< VkCommandBuffer > commandBuffers
Definition graphicCore.hpp:223
bool checkExtensionsSupport(const uint32_t extCount, const char **extToCheck)
std::vector< VkFence > imagesInFlight
Definition graphicCore.hpp:227
std::vector< VkSemaphore > renderFinishedSemaphores
Definition graphicCore.hpp:225
VkSurfaceKHR surface
Definition graphicCore.hpp:207
void copyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height, uint32_t layerCount)
VkQueue graphicsQueue
Definition graphicCore.hpp:210
VkDevice device
Definition graphicCore.hpp:209
void createTextureImageView()
uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
void setTransform(uint32_t index, const glm::mat4 &transform)
Set transform matrix for figure.
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR &capabilities)
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData, void *pUserData)
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VkDeviceMemory &bufferMemory)
VkDescriptorPool descriptorPool
Definition graphicCore.hpp:242
void transitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t layerCount)
bool framebufferResized
Definition graphicCore.hpp:229
std::vector< VkDescriptorSet > descriptorSets
Definition graphicCore.hpp:243
Definition renderQueue.hpp:63
const uint32_t WIDTH
Definition graphicCore.hpp:30
KeyStatusEnum
Definition graphicCore.hpp:46
@ KEY_RELEASED
Definition graphicCore.hpp:46
@ KEY_PRESSED
Definition graphicCore.hpp:46
const char * SHADER_DIR
Definition graphicCore.hpp:43
const int MAX_FRAMES_IN_FLIGHT
Definition graphicCore.hpp:31
const std::vector< const char * > validationLayers
Definition graphicCore.hpp:36
const size_t MAX_INDICES
Definition graphicCore.hpp:33
const uint32_t MAX_IMAGE_ARRAYS
Definition graphicCore.hpp:34
const std::vector< const char * > deviceExtensions
Definition graphicCore.hpp:38
const bool enableValidationLayers
Definition graphicCore.hpp:51
const size_t MAX_VERTICES
Definition graphicCore.hpp:32
const uint32_t HEIGHT
Definition graphicCore.hpp:29
Definition graphicCore.hpp:174
float zoom
Definition graphicCore.hpp:176
glm::vec2 position
Definition graphicCore.hpp:175
Definition graphicCore.hpp:160
uint32_t textureHandler
Definition graphicCore.hpp:162
glm::mat4 model
Definition graphicCore.hpp:161
Definition graphicCore.hpp:142
std::optional< uint32_t > graphicFamily
Definition graphicCore.hpp:143
std::optional< uint32_t > presentFamily
Definition graphicCore.hpp:144
Definition graphicCore.hpp:149
std::vector< VkSurfaceFormatKHR > formats
Definition graphicCore.hpp:151
std::vector< VkPresentModeKHR > presentModes
Definition graphicCore.hpp:152
VkSurfaceCapabilitiesKHR capabilities
Definition graphicCore.hpp:150
Definition graphicCore.hpp:189
VkDeviceMemory imageMemory
Definition graphicCore.hpp:191
VkSampler sampler
Definition graphicCore.hpp:193
VkImageView imageView
Definition graphicCore.hpp:192
VkExtent2D extent
Definition graphicCore.hpp:195
std::vector< stbi_uc * > pixels
Definition graphicCore.hpp:196
VkImage image
Definition graphicCore.hpp:190
uint32_t layersCount
Definition graphicCore.hpp:194
Definition graphicCore.hpp:179
glm::vec2 pos
Definition graphicCore.hpp:180
glm::vec2 texCoord
Definition graphicCore.hpp:182
static std::array< VkVertexInputAttributeDescription, 3 > getAttributeDescriptions()
static VkVertexInputBindingDescription getBindingDescription()
glm::vec3 color
Definition graphicCore.hpp:181
Definition renderQueue.hpp:16