#include "detail/graphics.h"

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

namespace deerith {
	graphics::GraphicsConfig graphics::graphics_config;
	GLFWwindow* graphics::window;

	VkInstance graphics::instance;
	const std::vector<const char*> graphics::validation_layers = {"VK_LAYER_KHRONOS_validation"};
	const std::vector<const char*> graphics::device_extensions = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
	VkPhysicalDevice graphics::physical_device = VK_NULL_HANDLE;
	graphics::QueueFamilyIndices graphics::queue_family_indices;
	graphics::SwapChainSupportDetails graphics::swap_chain_support_details;
	VkDevice graphics::device;
	VkQueue graphics::graphics_queue;
	VkQueue graphics::pressent_queue;
	VkSurfaceKHR graphics::surface;
	VkSwapchainKHR graphics::swap_chain;
	std::vector<VkImage> graphics::swap_chain_images;
	VkFormat graphics::swap_chain_image_format;
	VkExtent2D graphics::swap_chain_extent;
	std::vector<VkImageView> graphics::swap_chain_image_views;
	VkPipelineLayout graphics::pipeline_layout;
	VkRenderPass graphics::render_pass;
	VkPipeline graphics::graphics_pipeline;
	std::vector<VkFramebuffer> graphics::swap_chain_frame_buffers;
	VkCommandPool graphics::command_pool;
	VkCommandBuffer graphics::command_buffer;
	VkSemaphore graphics::image_available_semaphore;
	VkSemaphore graphics::render_finished_semaphore;
	VkFence graphics::in_flight_fence;
} // namespace deerith