#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace hgl; using namespace hgl::graph; class VulkanApplicationFramework { private: Window * win =nullptr; vulkan::Instance * inst =nullptr; protected: vulkan::Device * device =nullptr; vulkan::ShaderModuleManage *shader_manage =nullptr; public: virtual ~VulkanApplicationFramework() { SAFE_CLEAR(shader_manage); SAFE_CLEAR(win); //win中会删除device,所以必须放在instance前删除 SAFE_CLEAR(inst); } virtual bool Init(int w,int h) { #ifdef _DEBUG if(!vulkan::CheckStrideBytesByFormat()) return(false); #endif// InitNativeWindowSystem(); win=CreateRenderWindow(OS_TEXT("VulkanTest")); if(!win) return(false); if(!win->Create(w,h)) return(false); inst=vulkan::CreateInstance(U8_TEXT("VulkanTest")); if(!inst) return(false); device=win->CreateRenderDevice(inst); if(!device) return(false); shader_manage=device->CreateShaderModuleManage(); return(true); } void AcquireNextFrame() { device->AcquireNextImage(); } void Submit(const VkCommandBuffer cmd_buf) { device->SubmitDraw(&cmd_buf); device->Wait(); device->QueuePresent(); } virtual void Draw()=0; bool Run() { if(!win->Update())return(false); if(win->IsVisible()) { AcquireNextFrame(); Draw(); } return(true); } };//class VulkanApplicationFramework