From a6f1657cac74b3894dfefbab90743f4e776dea26 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 7 Aug 2020 22:34:07 +0800 Subject: [PATCH] add TextRenderable --- inc/hgl/graph/font/TextRenderable.h | 14 ++++--- inc/hgl/graph/vulkan/VKRenderable.h | 2 + src/SceneGraph/font/TextRenderable.cpp | 58 ++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 src/SceneGraph/font/TextRenderable.cpp diff --git a/inc/hgl/graph/font/TextRenderable.h b/inc/hgl/graph/font/TextRenderable.h index 63a401f2..86738609 100644 --- a/inc/hgl/graph/font/TextRenderable.h +++ b/inc/hgl/graph/font/TextRenderable.h @@ -11,21 +11,23 @@ namespace hgl */ class TextRenderable:public vulkan::Renderable { - vulkan::Renderable * render_obj; + vulkan::Device *device; + + vulkan::Renderable *render_obj; uint32 max_count; ///<缓冲区最大容量 uint32 cur_count; ///<当前容量 - vulkan::VertexAttribBuffer *vertex_buffer; - vulkan::VertexAttribBuffer *tex_coord_buffer; + vulkan::VAB *vab_vertex; + vulkan::VAB *vab_tex_coord; public: - TextRenderable(); + TextRenderable(vulkan::Device *,int mc=1024); virtual ~TextRenderable(); + + void SetMaxCount(int); };//class TextRenderable:public vulkan::Renderable - - }//namespace graph }//namespace hgl #endif//HGL_GRAPH_TEXT_RENDERABLE_INCLUDE diff --git a/inc/hgl/graph/vulkan/VKRenderable.h b/inc/hgl/graph/vulkan/VKRenderable.h index 753b0fe1..e81457ec 100644 --- a/inc/hgl/graph/vulkan/VKRenderable.h +++ b/inc/hgl/graph/vulkan/VKRenderable.h @@ -61,6 +61,8 @@ public: public: + void SetDrawCount (const uint32_t dc){draw_count=dc;} ///<设置当前对象绘制需要多少个顶点 + const uint32_t GetDrawCount ()const ///<取得当前对象绘制需要多少个顶点 { if(indices_buffer) diff --git a/src/SceneGraph/font/TextRenderable.cpp b/src/SceneGraph/font/TextRenderable.cpp new file mode 100644 index 00000000..ee0350fc --- /dev/null +++ b/src/SceneGraph/font/TextRenderable.cpp @@ -0,0 +1,58 @@ +#include + +namespace hgl +{ + namespace graph + { + namespace + { + vulkan::Pipeline *text_pipeline=nullptr; + }//namespace + + TextRenderable::TextRenderable(Device *dev,int mc) + { + device=dev; + + render_obj=nullptr; + vab_vertex=nullptr; + vab_tex_coord=nullptr; + + max_count=mc; + cur_count=mc; + + SetMaxCount(mc); + } + + TextRenderable::~TextRenderable() + { + SAFE_CLEAR(vab_tex_coord); + SAFE_CLEAR(vab_vertex); + SAFE_CLEAR(render_obj); + } + + void TextRenderable::SetMaxCount(int mc) + { + if(mcCreateVAB(VAF_VEC4,max_count); + + render_obj->Set(VAN::Vertex,vab_vertex); + } + + if(vab_tex_coord) + { + delete vab_tex_coord; + + vab_tex_coord =device->CreateVAB(VAF_VEC4,max_count); + + render_obj->Set(VAN::TexCoord,vab_tex_coord); + } + } + }//namespace graph +}//namespace hgl