#pragma once #include "AppBase.h" class Application : public AppBase { public: void run(); 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(); bool isInited() { return inited; } 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; // 每个帧在飞行一个 std::vector imagesInFlight; // 跟踪每个图像的使用状态 int currentFrame = 0; int MAX_FRAMES_IN_FLIGHT = 2; bool inited = false; };