#pragma once #include #include VK_NAMESPACE_BEGIN class TextureManager; class RenderTargetManager; class RenderPassManager; class GraphModule { RenderFramework *render_framework; public: RenderFramework * GetRenderFramework ()const{return render_framework;} ///<取得渲染框架 VulkanDevice * GetDevice (); ///<取得GPU设备 VkDevice GetVkDevice ()const; ///<取得VkDevice const VulkanPhyDevice * GetPhyDevice ()const; ///<取得物理设备 VulkanDevAttr *GetDevAttr ()const; ///<取得设备属性 VkPipelineCache GetPipelineCache ()const; ///<取得PipelineCache public: virtual void OnResize(const VkExtent2D &){}; ///<窗口大小改变 public: GraphModule(RenderFramework *rf){render_framework=rf;} virtual ~GraphModule()=default; virtual const size_t GetTypeHash()const noexcept=0; virtual const AnsiString &GetName()const=0; };//class GraphModule template class GraphModuleInherit:public BASE { AnsiString manager_name; public: const size_t GetTypeHash()const noexcept override { return typeid(T).hash_code(); } const AnsiString &GetName()const override { return manager_name; } public: GraphModuleInherit(RenderFramework *rf,const AnsiString &name):BASE(rf) { manager_name=name; } virtual ~GraphModuleInherit()=default; };//class GraphModuleInherit #define GRAPH_MODULE_CLASS(class_name) class class_name:public GraphModuleInherit #define GRAPH_MODULE_CONSTRUCT(class_name) class_name::class_name(RenderFramework *rf):GraphModuleInherit(rf,#class_name) VK_NAMESPACE_END