public bool AqurieGlyph(int charCode, out Glyph glyph, int fontSize, int outlineSize, bool bold)
    {
        var glyphContext = new GlyphParam {
            charCode = charCode, fontSize = fontSize, outlineSize = outlineSize, bold = bold
        };

        if (!m_glyphs.TryGetValue(glyphContext, out glyph))
        {
            if (m_fontContext != IntPtr.Zero)
            {
                var data = FreeTypeFontApi.GetGlyph(m_fontContext, charCode, out glyph.ftGlyph, fontSize, outlineSize, bold);

                if (data != IntPtr.Zero)
                {
                    if (m_packer.Alloc(ref glyph))
                    {
                        m_packer.UpdateData(data, glyph.ftGlyph);
                        m_packer.Advance(glyph.ftGlyph);
                    }
                    else
                    {
                        glyph.ftGlyph.code = 0;
                    }
                }

                if (glyph.ftGlyph.code != 0)
                {
                    m_glyphs[glyphContext] = glyph;
                }
            }
        }

        return(glyph.ftGlyph.code != 0);
    }
        unsafe public void UpdateData(IntPtr data, FreeTypeFontApi.FreeTypeGlyph glyph)
        {
            for (int y = 0; y < glyph.height; y++)
            {
                byte *srcPtr = (byte *)data.ToPointer();
                fixed(byte *dstPtr = m_rawData)
                {
                    int srcIndex = y * glyph.width * glyph.bpp;
                    int dstIndex = ((m_y + y) * m_canvasSize + m_x) * glyph.bpp;

                    FreeTypeFontApi.UFT_MemoryCopy((IntPtr)(dstPtr + dstIndex), (IntPtr)(srcPtr + srcIndex), glyph.width * glyph.bpp);
                }
            }
            if (m_texureUpdated != null)
            {
                m_texureUpdated();
            }
        }
 public void Dispose()
 {
     FreeTypeFontApi.DeleteFontContext(m_fontContext);
     m_fontContext = IntPtr.Zero;
 }
 public FreeTypeFontAtlas(byte[] bytes)
 {
     m_fontContext = FreeTypeFontApi.CreateFontContext(bytes);
     Init();
 }
 public FreeTypeFontAtlas(string path)
 {
     m_fontContext = FreeTypeFontApi.CreateFontContext(path);
     Init();
 }