#pragma once #include "AppBase.h" class Application : public AppBase { public: void run(); protected: void initVulkan(); void initWindow(); void createSurface(); void mainLoop(); void cleanup(); void createImageViews(); void createFramebuffers(); void createCommandPool(); void createCommandBuffer(); void createLogicalDevice(); void createSwapChain(); void createPipelineLayout(); void createGraphicsPipeline(); void createRenderPass(); void recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex); void createSyncObjects(); void drawFrame(); private: VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; // 物理设备 VkDevice device; // 逻辑设备 VkQueue graphicsQueue; // 图形队列 VkSurfaceKHR surface; // 窗口表面 VkSwapchainKHR swapChain; // 交换链 std::vector swapChainImages; // 交换链图像 VkFormat swapChainImageFormat; // 交换链图像格式 VkExtent2D swapChainExtent; // 交换链图像分辨率 std::vector swapChainImageViews; // 交换链图像视图 VkRenderPass renderPass; // 渲染流程 VkPipelineLayout pipelineLayout; // 管线布局 VkPipeline graphicsPipeline; // 图形管线 std::vector swapChainFramebuffers; // 帧缓冲区 VkQueue presentQueue; // 呈现队列 VkCommandPool commandPool; // 命令池 std::vector commandBuffers; // 命令缓冲区 std::vector imageAvailableSemaphores; // 图像可用信号量 std::vector renderFinishedSemaphores; // 渲染完成信号量 std::vector inFlightFences; // 同步栅栏 int currentFrame = 0; };