#pragma once #include #include #include #include #include #include VK_NAMESPACE_BEGIN class GPUDevice; class TileData; class TileFont; class FontSource; class VulkanInstance; class RenderPassManager; class TextureManager; class SwapchainModule; /** * 渲染框架 */ class RenderFramework:public io::WindowEvent { protected: Window * win =nullptr; VulkanInstance * inst =nullptr; GPUDevice * device =nullptr; protected: GraphModulesMap graph_module_map; List per_frame_module_list; List render_module_list; protected: SwapchainModule * swapchain_module =nullptr; protected: RenderPassManager * render_pass_manager =nullptr; TextureManager * texture_manager =nullptr; protected: ViewportInfo viewport_info; private: double last_time =0; double cur_time =0; int64 frame_count =0; public: const int64 GetFrameCount ()const noexcept{return frame_count;} ///<取得当前帧数 void RestartFrameCount ()noexcept{frame_count=0;} ///<重新开始统计帧数 public: //module template T * GetModule(){return graph_module_map.Get();} ///<获取指定类型的模块 GraphModule * GetModule(const AIDName &name,bool create=false); ///<获取指定名称的模块 //template T *AddModule() //{ // T *tm=new T(graph_module_manager); // module_list.Add(tm); // if(tm->IsPerFrame()) // per_frame_module_list.Add(tm); // if(tm->IsRender()) // render_module_list.Add(tm); // return tm; //} GPUDevice * GetDevice () {return device;} VkDevice GetVkDevice ()const {return device->GetDevice();} const GPUPhysicalDevice * GetPhysicalDevice ()const {return device->GetPhysicalDevice();} ///<取得物理设备 GPUDeviceAttribute *GetDeviceAttribute () {return device->GetDeviceAttribute();} ///<取得设备属性 SwapchainModule * GetSwapchain () {return swapchain_module;} ///<取得Swapchain模块 public: //manager RenderPassManager * GetRenderPassManager(){return render_pass_manager;} ///<取得渲染通道管理器 TextureManager * GetTextureManager (){return texture_manager;} ///<取得纹理管理器 public: //event virtual void OnResize(uint,uint)override; virtual void OnActive(bool)override; virtual void OnClose ()override; public: NO_COPY_NO_MOVE(RenderFramework) private: RenderFramework(); friend RenderFramework *CreateRenderFramework(); public: virtual ~RenderFramework(); virtual bool Init(uint w,uint h,const OSString &app_name); ///<初始化 virtual void StartTime(); /** * @pragma delta_time 本帧时间间隔 */ virtual void Update(const double delta_time){} virtual void BeginFrame(); ///<开始当前帧 virtual void EndFrame(); ///<当前帧结束 virtual void MainLoop(); ///<主循环 virtual void Run(); public: //TileData TileData *CreateTileData(const VkFormat video_format,const uint width,const uint height,const uint count); ///<创建一个Tile数据集 TileFont *CreateTileFont(FontSource *fs,int limit_count=-1); ///<创建一个Tile字体 };//class RenderFramework RenderFramework *CreateRenderFramework(); VK_NAMESPACE_END