add ThemeEngine and DefaultThemeEngine

This commit is contained in:
hyzboy 2020-10-29 22:15:59 +08:00
parent e17c910b50
commit e5dd5720e6
6 changed files with 57 additions and 37 deletions

View File

@ -27,7 +27,7 @@ namespace hgl
protected: protected:
virtual bool ThemeRender(Form *)=0; virtual ThemeForm *CreateForm(Form *,RenderTarget *,RenderCommand *)=0;
public: public:
@ -40,7 +40,7 @@ namespace hgl
virtual bool Registry(Form *,const VkFormat format=DefaultRenderTargetFormat); virtual bool Registry(Form *,const VkFormat format=DefaultRenderTargetFormat);
virtual void Unregistry(Form *); virtual void Unregistry(Form *);
virtual bool Resize(Form *,const uint32_t,const uint32_t,const VkFormat format=DefaultRenderTargetFormat); virtual bool Resize(Form *,const uint32_t,const uint32_t,const VkFormat format=DefaultRenderTargetFormat);
virtual void Render(Form *); virtual bool Render(Form *);
};//class ThemeEngine };//class ThemeEngine
// ThemeEngine *CreateThemeEngine(); // ThemeEngine *CreateThemeEngine();

View File

@ -15,11 +15,13 @@ namespace hgl
protected: protected:
Form *form; Form *form;
RenderTarget *render_target; RenderTarget *render_target;
RenderCommand *cmd_buf;
public: public:
ThemeForm(Form *,RenderTarget *); ThemeForm(Form *,RenderTarget *,RenderCommand *);
virtual ~ThemeForm(); virtual ~ThemeForm();
RenderTarget * GetRenderTarget(){return render_target;} RenderTarget * GetRenderTarget(){return render_target;}
@ -27,7 +29,8 @@ namespace hgl
void Resize(uint w,uint h); void Resize(uint w,uint h);
bool BeginRender();
bool EndRender();
};//class ThemeForm };//class ThemeForm
}//namespace gui }//namespace gui
}//namespace hgl }//namespace hgl

View File

@ -20,23 +20,9 @@ namespace hgl
{ {
} }
bool DefaultThemeEngine::Registry(Form *f) ThemeForm *DefaultThemeEngine::CreateForm(Form *f,RenderTarget *rt,RenderCommand *rc)
{
if(!f)return(false);
if(form_list.KeyExist(f))return(false);
return(true);
}
void DefaultThemeEngine::Unregistry(Form *f)
{
if(!f)return;
if(!form_list.KeyExist(f))return;
}
void DefaultThemeEngine::Render(Form *f)
{ {
return(new DTForm(f,rt,rc));
} }
}//namespace default_theme }//namespace default_theme
}//namespace gui }//namespace gui

View File

@ -20,22 +20,15 @@ namespace hgl
*/ */
class DefaultThemeEngine:public ThemeEngine class DefaultThemeEngine:public ThemeEngine
{ {
//struct
//{
// Material * m;
// MaterialInstance * mi;
//}panel;
public: public:
DefaultThemeEngine(GPUDevice *dev):ThemeEngine(dev){} using ThemeEngine::ThemeEngine;
virtual ~DefaultThemeEngine() override; virtual ~DefaultThemeEngine() override;
bool Init() override; bool Init() override;
void Clear() override; void Clear() override;
bool ThemeRender(Form *) override; ThemeForm *CreateForm(Form *,RenderTarget *,RenderCommand *) override;
};//class DefaultThemeEngine:public ThemeEngine };//class DefaultThemeEngine:public ThemeEngine
}//namespace default_theme }//namespace default_theme
}//namespace gui }//namespace gui

View File

@ -32,7 +32,9 @@ namespace hgl
const uint width=power_to_2(w); const uint width=power_to_2(w);
const uint height=power_to_2(h); const uint height=power_to_2(h);
return device->CreateColorRenderTarget(width,height,format); FramebufferInfo fbi(format,w,h);
return device->CreateRenderTarget(&fbi);
} }
bool ThemeEngine::Registry(Form *f,const VkFormat format) bool ThemeEngine::Registry(Form *f,const VkFormat format)
@ -48,7 +50,7 @@ namespace hgl
if(!rt)return(false); if(!rt)return(false);
ThemeForm *tf=new ThemeForm(f,rt); ThemeForm *tf=CreateForm(f,rt);
form_list.Add(f,tf); form_list.Add(f,tf);
@ -104,11 +106,23 @@ namespace hgl
return(true); return(true);
} }
void ThemeEngine::Render(Form *f) bool ThemeEngine::Render(Form *f)
{ {
if(!f)return; if(!f)return(false);
const Vector2f &size=f->GetSize();
if(size.x==0&&size.y==0)return(false);
ThemeForm *tf;
if(!form_list.Get(f,tf))
return(false);
tf->BeginRender();
tf->EndRender();
} }
}//namespace gui }//namespace gui
}//namespace hgl }//namespace hgl

View File

@ -1,17 +1,21 @@
#include<hgl/gui/ThemeForm.h> #include<hgl/gui/ThemeForm.h>
#include<hgl/graph/VKCommandBuffer.h>
namespace hgl namespace hgl
{ {
namespace gui namespace gui
{ {
ThemeForm::ThemeForm(Form *f,RenderTarget *rt) ThemeForm::ThemeForm(Form *f,RenderTarget *rt,RenderCommand *rc)
{ {
form=f; form=f;
render_target=rt; render_target=rt;
cmd_buf=rc;
} }
ThemeForm::~ThemeForm() ThemeForm::~ThemeForm()
{ {
delete cmd_buf;
delete render_target;
} }
bool ThemeForm::SetRenderTarget(RenderTarget *rt) bool ThemeForm::SetRenderTarget(RenderTarget *rt)
@ -29,5 +33,25 @@ namespace hgl
{ {
form->OnResize(w,h); form->OnResize(w,h);
} }
bool ThemeForm::BeginRender()
{
if(!cmd_buf->Begin())return(false);
if(!cmd_buf->BindFramebuffer(render_target->GetRenderPass(),render_target->GetFramebuffer()))return(false);
cmd_buf->SetClearColor(0,0,0,0,1.0f);
return(true);
}
bool ThemeForm::EndRender()
{
if(!cmd_buf->End())return(false);
if(!render_target->Submit(cmd_buf))return(false);
if(!render_target->WaitQueue())return(false);
return(true);
}
}//namespace gui }//namespace gui
}//namespace hgl }//namespace hgl