#ifndef PKE_WINDOW_HPP #define PKE_WINDOW_HPP #include "asset-manager.hpp" #include "backends/imgui_impl_glfw.h" #include "backends/imgui_impl_vulkan.h" #include "event.hpp" #include "imgui.h" #include "memory.hpp" #include "ecs.hpp" #include "glm/mat4x4.hpp" #include #include #include #include #include #include // TODO replace me with something more elegant const unsigned int MAX_FRAMES_IN_FLIGHT = 3; extern bool shouldRecreateSwapchain; extern GLFWwindow *window; extern GLFWmonitor *monitor; extern GLFWvidmode vidMode; extern VkInstance vkInstance; extern VkPhysicalDevice vkPhysicalDevice; extern VkPhysicalDeviceProperties vkPhysicalDeviceProperties; extern VkSurfaceKHR vkSurfaceKHR; extern VkFormat depthFormat; extern VkDevice vkDevice; extern VkAllocationCallbacks *vkAllocator; extern VkQueue graphicsQueue; extern VkCommandPool graphicsCommandPool; extern VkCommandBuffer graphicsCommandBuffer; extern VkQueue transferQueue; extern VkCommandPool transferCommandPool; extern VkCommandBuffer transferCommandBuffer; extern unsigned int graphicsFamilyIndex; extern unsigned int presentFamilyIndex; extern unsigned int transferFamilyIndex; extern VkRenderPass presentRenderPass; extern VkRenderPass renderRenderPass; extern VkSampleCountFlagBits renderSampleCount; struct PKEWindowProperties { unsigned int width = 1280; unsigned int height = 720; }; struct UniformBufferObject { glm::mat4 model; glm::mat4 view; glm::mat4 proj; }; extern UniformBufferObject UBO; extern VkBuffer UniformBuffers[MAX_FRAMES_IN_FLIGHT]; extern VkExtent2D Extent; struct DebugHitbox { VkImage vkImage = VK_NULL_HANDLE; VkImageView vkImageView = VK_NULL_HANDLE; VkDeviceMemory textureMemory = VK_NULL_HANDLE; VkDeviceMemory vertBufferMemory = VK_NULL_HANDLE; VkBuffer vertexBuffer; VkBuffer normalsBuffer; VkBuffer uvBuffer; VkBuffer indexBuffer; VkBuffer instanceBuffer = VK_NULL_HANDLE; uint32_t indexCount = 0; uint32_t instanceCount = 1; uint32_t instanceStartingIndex = 0; VkDescriptorPool vkDescriptorPool; VkDescriptorSet *vkDescriptorSets = nullptr; }; extern DebugHitbox pkeDebugHitbox; struct ImplementedPipelines { VkDescriptorSetLayout vkDescriptorSetLayout_Texture = VK_NULL_HANDLE; VkPipelineLayout vkPipelineLayout_Texture = VK_NULL_HANDLE; VkSampler vkSampler_Texture = VK_NULL_HANDLE; union { VkPipeline arr[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; struct { VkPipeline Texture; VkPipeline TextureWireframe; }; } pipelines; }; extern ImplementedPipelines pkePipelines; void CreateWindow(PKEWindowProperties *wp); void DestroyWindow(); VkShaderModule UploadShader(AssetHandle handle); void Render(); unsigned int FindMemoryTypeIndex(uint32_t typeFilter, VkMemoryPropertyFlags memPropertyFlags); void BeginTransferBuffer(VkDeviceSize requestedMemorySize, VkBuffer &buffer, VkDeviceMemory &deviceMemory, void *&deviceData); void EndTransferBuffer(VkBuffer &buffer, VkDeviceMemory &deviceMemory); #endif /* PKE_WINDOW_HPP */