From 394bd4bc8d87f70948259ca5b1fde0dc5d669a28 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Fri, 13 May 2022 10:57:05 +0800 Subject: [PATCH] Improved TextRender supports character limit customization. --- example/Vulkan/DrawText.cpp | 8 +++++--- inc/hgl/graph/font/TextRender.h | 11 ++++++----- src/SceneGraph/font/TextRender.cpp | 12 ++++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/example/Vulkan/DrawText.cpp b/example/Vulkan/DrawText.cpp index 6a045d0e..73a313b0 100644 --- a/example/Vulkan/DrawText.cpp +++ b/example/Vulkan/DrawText.cpp @@ -29,15 +29,17 @@ private: bool InitTextRenderable() { 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); diff --git a/inc/hgl/graph/font/TextRender.h b/inc/hgl/graph/font/TextRender.h index 691efb91..a719aff7 100644 --- a/inc/hgl/graph/font/TextRender.h +++ b/inc/hgl/graph/font/TextRender.h @@ -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 diff --git a/src/SceneGraph/font/TextRender.cpp b/src/SceneGraph/font/TextRender.cpp index 0b7c0c10..1fcebf81 100644 --- a/src/SceneGraph/font/TextRender.cpp +++ b/src/SceneGraph/font/TextRender.cpp @@ -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);