花了半个月填了下毕设开的坑『基于Vulkan的2D游戏引擎的设计与实现』,最终实现了一个简单的2D小引擎,算是体验了Vulkan的开发流程。
主循环非常常规,三段式:
void GameEngine::Run()
{
while (!glfwWindowShouldClose(this->window))
{
glfwPollEvents();
this->ProcessInput();
this->UpdateLogic();
this->DrawFrame();
}
glfwDestroyWindow(this->window);
glfwTerminate();
}
用到了5个单例Manager,VulkanRenderer、InputManager、AudioManager、GUIManager和TimerManager。
Vulkan初始化过程如下:
void InitVulkan()
{
createInstance(); // 创建VkApplication && VkInstance
setUpDebugCallback(); // 设置Vulkan Debug回调信息
createSurface(); // 创建窗口相关的VkSurface
pickPhysicalDevice(); // 选择计算机物理显卡,创建VkPhysicsDevice
createLogicalDevice(); // 创建逻辑设备VkDevice
createSwapChain(); // 创建交换链SwapChain并获取Images
createImageViews(); // 为每一个SwapChain Images创建ImageView
createRenderPass(); // 创建RenderPass,配置颜色和深度的信息
creatDescriptorSetLayout(); // 创建描述符信息,为Shader的属性提供信息
createGriphicsPipeline(); // 创建渲染管线,一旦创建几乎不能动态更改
createCommandPool(); // 创建命令池
createDepthResources(); // 创建深度纹理,用于DepthTest
createFragmentBuffer(); // 创建帧缓冲,Vulkan默认采用三重缓冲
createTextureSampler(); // 创建可以重复使用的TextureSampler
createIndexBuffer(); // 创建可以重复使用的IBO
create