Improved TextRender supports character limit customization.

This commit is contained in:
2022-05-13 10:57:05 +08:00
parent b0f4adde3c
commit 394bd4bc8d
3 changed files with 17 additions and 14 deletions

View File

@@ -30,14 +30,16 @@ private:
{
UTF16String str;
LoadStringFromTextFile(str,OS_TEXT("res/text/DaoDeBible.txt"));
if(str.IsEmpty())return(false);
FontSource *fs=AcquireFontSource(OS_TEXT("微软雅黑"),12);
text_render=CreateTextRender(device,fs,device_render_pass,ubo_camera_info);
text_render=CreateTextRender(device,fs,device_render_pass,ubo_camera_info,str.Length());
if(!text_render)
return(false);
LoadStringFromTextFile(str,OS_TEXT("res/text/DaoDeBible.txt"));
text_render_obj=text_render->CreateRenderable(str);
if(!text_render_obj)
return(false);

View File

@@ -37,10 +37,10 @@ namespace hgl
private:
friend TextRender *CreateTextRender(GPUDevice *,FontSource *,RenderPass *,GPUBuffer *);
friend TextRender *CreateTextRender(GPUDevice *,FontSource *,RenderPass *,GPUBuffer *,int limit=-1);
TextRender(GPUDevice *dev,FontSource *);
bool InitTileFont();
bool InitTileFont(int limit);
bool InitTextLayoutEngine();
bool InitUBO();
bool InitMaterial(RenderPass *,GPUBuffer *);
@@ -49,7 +49,7 @@ namespace hgl
~TextRender();
bool Init(RenderPass *rp,GPUBuffer *ubo_camera_info);
bool Init(RenderPass *rp,GPUBuffer *ubo_camera_info,int limit);
public:
@@ -79,9 +79,10 @@ namespace hgl
FontSource *AcquireFontSource(const os_char *name,const uint32_t size);
/**
* 创建一个文本渲染器.
* 创建一个文本渲染器
* @param limit 节数限制(-1表示自动)
*/
TextRender *CreateTextRender(GPUDevice *,FontSource *,RenderPass *,GPUBuffer *);
TextRender *CreateTextRender(GPUDevice *,FontSource *,RenderPass *,GPUBuffer *,int limit);
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_TEXT_RENDER_INCLUDE

View File

@@ -40,9 +40,9 @@ namespace hgl
SAFE_CLEAR(db);
}
bool TextRender::InitTileFont()
bool TextRender::InitTileFont(int limit)
{
tile_font=device->CreateTileFont(font_source);
tile_font=device->CreateTileFont(font_source,limit);
return(true);
}
@@ -128,9 +128,9 @@ namespace hgl
return(true);
}
bool TextRender::Init(RenderPass *rp,GPUBuffer *ubo_camera_info)
bool TextRender::Init(RenderPass *rp,GPUBuffer *ubo_camera_info,int limit)
{
if(!InitTileFont())
if(!InitTileFont(limit))
return(false);
if(!InitTextLayoutEngine())
@@ -213,14 +213,14 @@ namespace hgl
return AcquireFontSource(fnt);
}
TextRender *CreateTextRender(GPUDevice *dev,FontSource *fs,RenderPass *rp,GPUBuffer *ubo_camera_info)
TextRender *CreateTextRender(GPUDevice *dev,FontSource *fs,RenderPass *rp,GPUBuffer *ubo_camera_info,int limit)
{
if(!dev||!rp||!ubo_camera_info)
return(nullptr);
TextRender *text_render=new TextRender(dev,fs);
if(!text_render->Init(rp,ubo_camera_info))
if(!text_render->Init(rp,ubo_camera_info,limit))
{
delete text_render;
return(nullptr);