// VulkanTutorial.h: 标准系统包含文件的包含文件 // 或项目特定的包含文件。 #pragma once #define GLFW_INCLUDE_VULKAN #include #include #include #include #include #include #include #include #include #include #include #include VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,const VkAllocationCallbacks* pAllocator,VkDebugUtilsMessengerEXT* pDebugMessenger); void DestroyDebugUtilsMessengerEXT(VkInstance instance,VkDebugUtilsMessengerEXT debugMessenger,const VkAllocationCallbacks* pAllocator); class HelloTriangleApplication { public: HelloTriangleApplication(); ~HelloTriangleApplication(); void run(int Width, int Height) { GLFWwindow* window = initWindow(Width,Height); initVulkan(); mainLoop(window); cleanup(window); } private: GLFWwindow* window; VkInstance instance; VkDebugUtilsMessengerEXT debugMessenger; VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; VkDevice device; VkQueue graphicQueue; VkQueue presentQueue; VkSurfaceKHR surface; VkSwapchainKHR swapChain; std::vector swapChainImages; VkFormat swapChainImageFormat; VkExtent2D swapChainExtent; std::vector swapChainImageViews; VkPipelineLayout pipelineLayout; struct QueueFamilyIndices { std::optional graphicsFamily; std::optional presentFamily; bool isComplete() { return graphicsFamily.has_value() && presentFamily.has_value(); } }; struct SwapChainSupportDetails { VkSurfaceCapabilitiesKHR capabilities; std::vector formats; std::vector presentModes; }; GLFWwindow* initWindow(int Width, int Height); void createInstance(); void initVulkan(); void mainLoop(GLFWwindow* window); void cleanup(GLFWwindow* window); bool checkValidationLayerSupport(); std::vector getRequiredExtensions(); void showAvailableExtension(); static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData); void setupDebugMessenger(); void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo); void createSurface(); bool checkDeviceExtensionSupport(VkPhysicalDevice device); void pickPhysicalDevice(); bool isDeviceSuitable(VkPhysicalDevice device); QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device); void createLogicalDevice(); SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector& availableFormats); VkPresentModeKHR chooseSwapPresentMode(const std::vector& availablePresentModes); VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities); void createSwapChain(); void creatImageView(); void createGraphicPipeline(); static std::vector readFile(const std::string& filename); VkShaderModule createShaderModule(const std::vector code); }; HelloTriangleApplication::HelloTriangleApplication() { } HelloTriangleApplication::~HelloTriangleApplication() { }