diff --git a/example/Vulkan/DrawText.cpp b/example/Vulkan/DrawText.cpp index 10bd2c3d..b6db78a5 100644 --- a/example/Vulkan/DrawText.cpp +++ b/example/Vulkan/DrawText.cpp @@ -1,7 +1,6 @@ #include #include #include"VulkanAppFramework.h" -#include 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); diff --git a/inc/hgl/graph/font/TextRender.h b/inc/hgl/graph/font/TextRender.h index e0830853..9b44ada4 100644 --- a/inc/hgl/graph/font/TextRender.h +++ b/inc/hgl/graph/font/TextRender.h @@ -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 /** diff --git a/src/SceneGraph/font/TextRender.cpp b/src/SceneGraph/font/TextRender.cpp index c514dd7c..2c714362 100644 --- a/src/SceneGraph/font/TextRender.cpp +++ b/src/SceneGraph/font/TextRender.cpp @@ -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); }