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/graph/font/TextRender.h>
#include"VulkanAppFramework.h"
#include<hgl/math/Math.h>
using namespace hgl;
using namespace hgl::graph;
@ -54,13 +53,19 @@ private:
{
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"));
text_render_obj=text_render->CreateRenderable();
text_render_obj=text_render->CreateRenderable(str);
if(!text_render_obj)
return(false);
render_instance=text_render->CreateRenderableInstance(text_render_obj,str);
render_instance=text_render->CreateRenderableInstance(text_render_obj);
if(!render_instance)
return(false);
@ -77,12 +82,6 @@ public:
if(!InitUBO())
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())
return(false);

View File

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

View File

@ -17,6 +17,13 @@ namespace hgl
db=new RenderResource(device);
tl_engine=new TextLayout();
font_source=fs;
material =nullptr;
material_instance =nullptr;
sampler =nullptr;
pipeline =nullptr;
tile_font =nullptr;
ubo_color =nullptr;
}
TextRender::~TextRender()
@ -131,16 +138,21 @@ namespace hgl
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);
}