diff --git a/inc/hgl/gui/ThemeEngine.h b/inc/hgl/gui/ThemeEngine.h index f0d35d53..24b2afab 100644 --- a/inc/hgl/gui/ThemeEngine.h +++ b/inc/hgl/gui/ThemeEngine.h @@ -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(); diff --git a/inc/hgl/gui/ThemeForm.h b/inc/hgl/gui/ThemeForm.h index 7b2cd6ac..68ec7b2b 100644 --- a/inc/hgl/gui/ThemeForm.h +++ b/inc/hgl/gui/ThemeForm.h @@ -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 diff --git a/src/GUI/DefaultThemeEngine.cpp b/src/GUI/DefaultThemeEngine.cpp index bf9556ec..aa652159 100644 --- a/src/GUI/DefaultThemeEngine.cpp +++ b/src/GUI/DefaultThemeEngine.cpp @@ -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 diff --git a/src/GUI/DefaultThemeEngine.h b/src/GUI/DefaultThemeEngine.h index 81567599..d2042f83 100644 --- a/src/GUI/DefaultThemeEngine.h +++ b/src/GUI/DefaultThemeEngine.h @@ -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 diff --git a/src/GUI/ThemeEngine.cpp b/src/GUI/ThemeEngine.cpp index d5fb4c45..9130dae9 100644 --- a/src/GUI/ThemeEngine.cpp +++ b/src/GUI/ThemeEngine.cpp @@ -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 \ No newline at end of file diff --git a/src/GUI/ThemeForm.cpp b/src/GUI/ThemeForm.cpp index b8da9a08..74a35500 100644 --- a/src/GUI/ThemeForm.cpp +++ b/src/GUI/ThemeForm.cpp @@ -1,17 +1,21 @@ #include +#include 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