#ifndef RENDER_H #define RENDER_H #define VK_USE_PLATFORM_MACOS_MVK #include "vulkan/vulkan_core.h" #include "vk_mem_alloc.h" #define GLFW_INCLUDE_VULKAN #include #ifdef __APPLE__ #define GLFW_EXPOSE_NATIVE_COCOA #endif #include #define GLM_FORCE_RADIANS #define GLM_FORCE_DEPTH_ZERO_TO_ONE #include #include #include #include #include #include #include "pipeline.h" #include "command.h" extern const uint32_t MAX_FRAMES_IN_FLIGHT; typedef struct SwapchainDetailsStruct { VkSurfaceCapabilitiesKHR capabilities; VkSurfaceFormatKHR* formats; uint32_t formats_count; VkPresentModeKHR* present_modes; uint32_t present_modes_count; } SwapchainDetails; typedef struct RenderContextStruct { VkInstance instance; VkDebugUtilsMessengerEXT debug_messenger; VkPhysicalDevice physical_device; VkPhysicalDeviceMemoryProperties memories; VkSurfaceKHR surface; Queue graphics_queue; Queue present_queue; Queue transfer_queue; VkDevice device; VmaAllocator allocator; SwapchainDetails swapchain_details; VkSurfaceFormatKHR swapchain_format; VkPresentModeKHR swapchain_present_mode; VkExtent2D swapchain_extent; VkSwapchainKHR swapchain; uint32_t swapchain_image_count; VkImage* swapchain_images; VkImageView* swapchain_image_views; VkFramebuffer* swapchain_framebuffers; VkFormat depth_format; VkImageView depth_image_view; VkImage depth_image; VmaAllocation depth_image_memory; VkCommandPool extra_graphics_pool; VkCommandPool graphics_pool; VkCommandPool transfer_pool; VkRenderPass render_pass; VkCommandBuffer* swapchain_command_buffers; VkSemaphore* image_available_semaphores; VkSemaphore* render_finished_semaphores; VkFence* in_flight_fences; uint32_t current_frame; } RenderContext; GLFWwindow* init_window(); VkResult init_vulkan(GLFWwindow* window, RenderContext* context); VkResult draw_frame(RenderContext* context, UIContext* ui_context, UILayer* ui_layers, uint32_t ui_layer_count); #endif