ULRE/src/SceneGraph/font/TextPrimitive.cpp

55 lines
1.6 KiB
C++

#include<hgl/graph/font/TextPrimitive.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKMaterial.h>
#include<hgl/graph/VKVertexAttribBuffer.h>
namespace hgl
{
namespace graph
{
TextPrimitive::TextPrimitive(GPUDevice *dev,Material *m,uint mc):Primitive(mc)
{
device=dev;
mtl=m;
max_count=0;
vbo_position=nullptr;
vbo_tex_coord=nullptr;
}
TextPrimitive::~TextPrimitive()
{
SAFE_CLEAR(vbo_tex_coord);
SAFE_CLEAR(vbo_position);
}
void TextPrimitive::SetCharCount(const uint cc)
{
this->vertex_count=cc;
if(cc<=max_count)return;
max_count=power_to_2(cc);
{
if(vbo_position)
delete vbo_position;
vbo_position =device->CreateVBO(VF_V4I16,max_count);
Set(VAN::Position,vbo_position);
}
{
if(vbo_tex_coord)
delete vbo_tex_coord;
vbo_tex_coord =device->CreateVBO(VF_V4F,max_count);
Set(VAN::TexCoord,vbo_tex_coord);
}
}
bool TextPrimitive::WriteVertex (const int16 *fp){if(!fp)return(false);if(!vbo_position )return(false);return vbo_position ->Write(fp,vertex_count*4*sizeof(int16));}
bool TextPrimitive::WriteTexCoord (const float *fp){if(!fp)return(false);if(!vbo_tex_coord)return(false);return vbo_tex_coord ->Write(fp,vertex_count*4*sizeof(float));}
}//namespace graph
}//namespace hgl