optimized TextRender

This commit is contained in:
hyzboy 2022-02-17 11:02:55 +08:00
parent 0f963fb74b
commit 1ab3e5241f
3 changed files with 38 additions and 27 deletions

View File

@ -1,7 +1,6 @@
#include<hgl/type/StringList.h> #include<hgl/type/StringList.h>
#include<hgl/graph/font/TextRender.h> #include<hgl/graph/font/TextRender.h>
#include"VulkanAppFramework.h" #include"VulkanAppFramework.h"
#include<hgl/math/Math.h>
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
@ -54,13 +53,19 @@ private:
{ {
UTF16String str; UTF16String str;
FontSource *fs=CreateFontSource(OS_TEXT("微软雅黑"),12);
text_render=CreateTextRender(device,fs,device_render_pass,ubo_camera_info);
if(!text_render)
return(false);
LoadStringFromTextFile(str,OS_TEXT("res/text/DaoDeBible.txt")); LoadStringFromTextFile(str,OS_TEXT("res/text/DaoDeBible.txt"));
text_render_obj=text_render->CreateRenderable(); text_render_obj=text_render->CreateRenderable(str);
if(!text_render_obj) if(!text_render_obj)
return(false); return(false);
render_instance=text_render->CreateRenderableInstance(text_render_obj,str); render_instance=text_render->CreateRenderableInstance(text_render_obj);
if(!render_instance) if(!render_instance)
return(false); return(false);
@ -77,12 +82,6 @@ public:
if(!InitUBO()) if(!InitUBO())
return(false); return(false);
FontSource *fs=CreateFontSource(OS_TEXT("微软雅黑"),12);
text_render=CreateTextRender(device,fs,device_render_pass,ubo_camera_info);
if(!text_render)
return(false);
if(!InitTextRenderable()) if(!InitTextRenderable())
return(false); return(false);

View File

@ -15,23 +15,23 @@ namespace hgl
class TextRender class TextRender
{ {
GPUDevice * device =nullptr; GPUDevice * device;
RenderResource * db =nullptr; RenderResource * db;
Material * material =nullptr; Material * material;
MaterialInstance * material_instance =nullptr; MaterialInstance * material_instance;
Sampler * sampler =nullptr; Sampler * sampler;
Pipeline * pipeline =nullptr; Pipeline * pipeline;
FontSource * font_source =nullptr; FontSource * font_source;
TileFont * tile_font =nullptr; TileFont * tile_font;
TextLayout * tl_engine =nullptr; TextLayout * tl_engine;
Color4f color; Color4f color;
GPUBuffer * ubo_color =nullptr; GPUBuffer * ubo_color;
private: private:
@ -51,8 +51,8 @@ namespace hgl
public: public:
TextRenderable *CreateRenderable(); TextRenderable *CreateRenderable(const UTF16String &str);
RenderableInstance *CreateRenderableInstance(TextRenderable *text_render_obj,const UTF16String &str); RenderableInstance *CreateRenderableInstance(TextRenderable *text_render_obj);
};//class TextRender };//class TextRender
/** /**

View File

@ -17,6 +17,13 @@ namespace hgl
db=new RenderResource(device); db=new RenderResource(device);
tl_engine=new TextLayout(); tl_engine=new TextLayout();
font_source=fs; font_source=fs;
material =nullptr;
material_instance =nullptr;
sampler =nullptr;
pipeline =nullptr;
tile_font =nullptr;
ubo_color =nullptr;
} }
TextRender::~TextRender() TextRender::~TextRender()
@ -131,16 +138,21 @@ namespace hgl
return(true); return(true);
} }
TextRenderable *TextRender::CreateRenderable() TextRenderable *TextRender::CreateRenderable(const UTF16String &str)
{ {
return db->CreateTextRenderable(material); TextRenderable *tr=db->CreateTextRenderable(material);
if(tl_engine->SimpleLayout(tr,tile_font,str)<=0)
{
delete tr;
return(nullptr);
}
return tr;
} }
RenderableInstance *TextRender::CreateRenderableInstance(TextRenderable *text_render_obj,const UTF16String &str) RenderableInstance *TextRender::CreateRenderableInstance(TextRenderable *text_render_obj)
{ {
if(tl_engine->SimpleLayout(text_render_obj,tile_font,str)<=0)
return(nullptr);
return db->CreateRenderableInstance(text_render_obj,material_instance,pipeline); return db->CreateRenderableInstance(text_render_obj,material_instance,pipeline);
} }