text: #ifndef APPLICATION_UTILS
  #define APPLICATION_UTILS
  #define GLFW_INCLUDE_VULKAN
  #include <GLFW/glfw3.h>
  #include <vector>
  #include <string>
  
  VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR> availableFormats);
  
  VkPresentModeKHR chooseSwapSurfacePresentMode(const std::vector<VkPresentModeKHR> &availablePresentModes);
  
  VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR &capabilities, GLFWwindow *window);
  
  bool checkDeviceExtentionSupport(VkPhysicalDevice device);
  
  bool checkValidationLayerSupport();
  
  std::vector<char> readFile(const std::string &filename);
  
  std::vector<const char *> getRequiredExtensions();
  
  VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
                                        const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
                                        const VkAllocationCallbacks *pAllocator,
                                        VkDebugUtilsMessengerEXT *pDebugMessenger);
  
  void DestroyDebugUtilsMessengerEXT(VkInstance instance,
                                     VkDebugUtilsMessengerEXT debugMessenger,
                                     const VkAllocationCallbacks *pAllocator);
  
  void framebufferResizeCallback(GLFWwindow *window, int width, int height);
  
  #endif