diff --git a/example/Vulkan/DrawText.cpp b/example/Vulkan/DrawText.cpp index b6db78a5..c2941b52 100644 --- a/example/Vulkan/DrawText.cpp +++ b/example/Vulkan/DrawText.cpp @@ -53,7 +53,7 @@ private: { UTF16String str; - FontSource *fs=CreateFontSource(OS_TEXT("微软雅黑"),12); + FontSource *fs=AcquireFontSource(OS_TEXT("微软雅黑"),12); text_render=CreateTextRender(device,fs,device_render_pass,ubo_camera_info); if(!text_render) diff --git a/inc/hgl/graph/font/TextRender.h b/inc/hgl/graph/font/TextRender.h index 9b44ada4..521dec16 100644 --- a/inc/hgl/graph/font/TextRender.h +++ b/inc/hgl/graph/font/TextRender.h @@ -51,7 +51,11 @@ namespace hgl public: + TextRenderable *CreateRenderable(); TextRenderable *CreateRenderable(const UTF16String &str); + + bool Layout(TextRenderable *tr,const UTF16String &str); + RenderableInstance *CreateRenderableInstance(TextRenderable *text_render_obj); };//class TextRender @@ -68,7 +72,7 @@ namespace hgl * @param name 字体名称 * @param size 字体象素高度 */ - FontSource *CreateFontSource(const os_char *name,const uint32_t size); + FontSource *AcquireFontSource(const os_char *name,const uint32_t size); /** * 创建一个文本渲染器. diff --git a/src/SceneGraph/font/TextRender.cpp b/src/SceneGraph/font/TextRender.cpp index 2c714362..017dd512 100644 --- a/src/SceneGraph/font/TextRender.cpp +++ b/src/SceneGraph/font/TextRender.cpp @@ -138,19 +138,32 @@ namespace hgl return(true); } + TextRenderable *TextRender::CreateRenderable(const UTF16String &str) + { + return db->CreateTextRenderable(material); + } + TextRenderable *TextRender::CreateRenderable(const UTF16String &str) { TextRenderable *tr=db->CreateTextRenderable(material); if(tl_engine->SimpleLayout(tr,tile_font,str)<=0) - { - delete tr; - return(nullptr); - } + return(tr); return tr; } + bool TextRender::Layout(TextRenderable *tr,const UTF16String &str) + { + if(!tr) + return(false); + + if(tl_engine->SimpleLayout(tr,tile_font,str)<=0) + return(false); + + return true; + } + RenderableInstance *TextRender::CreateRenderableInstance(TextRenderable *text_render_obj) { return db->CreateRenderableInstance(text_render_obj,material_instance,pipeline); @@ -171,7 +184,7 @@ namespace hgl return font_source; } - FontSource *CreateFontSource(const os_char *name,const uint32_t size) + FontSource *AcquireFontSource(const os_char *name,const uint32_t size) { Font fnt(name,0,size);