#pragma once #include #include #include #include #include #include //#include namespace hgl { /** * 工作对象

*/ class WorkObject:public TickObject { graph::RenderFramework *render_framework=nullptr; graph::IRenderTarget *cur_render_target=nullptr; bool destroy_flag=false; bool renderable=true; bool render_dirty=true; protected: graph::RenderResource *db=nullptr; //暂时的,未来会被更好的机制替代 public: graph::RenderFramework * GetRenderFramework (){return render_framework;} graph::GPUDevice * GetDevice (){return render_framework->GetDevice();} graph::GPUDeviceAttribute * GetDeviceAttribute (){return render_framework->GetDeviceAttribute();} public: const bool IsDestroy()const{return destroy_flag;} const bool IsRenderable()const{return renderable;} const bool IsRenderDirty()const{return render_dirty;} void MarkDestory(){destroy_flag=true;} void SetRenderable(bool r){renderable=r;} void MarkRenderDirty(){render_dirty=true;} public: WorkObject()=default; virtual ~WorkObject()=default; virtual void Join(graph::RenderFramework *rf,graph::IRenderTarget *rt) { if(!rf)return; if(render_framework==rf)return; render_framework=rf; cur_render_target=rt; db=rf->GetRenderResource(); } virtual void Render(double delta_time,graph::RenderCmdBuffer *cmd)=0; virtual void Render(double delta_time) { if(!cur_render_target) { //std::cerr<<"WorkObject::Render,cur_render_target=nullptr"<BeginRender(); if(!cmd) { //std::cerr<<"WorkObject::Render,cur_render_target->BeginRender()=nullptr"<EndRender(); cur_render_target->Submit(); render_dirty=false; } //std::cout<<"WorkObject::Render End"<