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

View File

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

View File

@ -20,23 +20,9 @@ namespace hgl
{
}
bool DefaultThemeEngine::Registry(Form *f)
{
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)
ThemeForm *DefaultThemeEngine::CreateForm(Form *f,RenderTarget *rt,RenderCommand *rc)
{
return(new DTForm(f,rt,rc));
}
}//namespace default_theme
}//namespace gui

View File

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

View File

@ -32,7 +32,9 @@ namespace hgl
const uint width=power_to_2(w);
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)
@ -47,8 +49,8 @@ namespace hgl
RenderTarget *rt=CreateRenderTarget(size.x,size.y,format);
if(!rt)return(false);
ThemeForm *tf=new ThemeForm(f,rt);
ThemeForm *tf=CreateForm(f,rt);
form_list.Add(f,tf);
@ -103,12 +105,24 @@ namespace hgl
tf->Resize(w,h);
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 hgl

View File

@ -1,17 +1,21 @@
#include<hgl/gui/ThemeForm.h>
#include<hgl/graph/VKCommandBuffer.h>
namespace hgl
{
namespace gui
{
ThemeForm::ThemeForm(Form *f,RenderTarget *rt)
ThemeForm::ThemeForm(Form *f,RenderTarget *rt,RenderCommand *rc)
{
form=f;
render_target=rt;
render_target=rt;
cmd_buf=rc;
}
ThemeForm::~ThemeForm()
{
delete cmd_buf;
delete render_target;
}
bool ThemeForm::SetRenderTarget(RenderTarget *rt)
@ -29,5 +33,25 @@ namespace hgl
{
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 hgl