public void Add(byte[] ttf, float pixel_height, IEnumerable <FontBakerCharacterRange> ranges) { fixed(StbTrueType.stbtt_pack_context *pcPtr = &pc) { fixed(byte *ttfPtr = ttf) { foreach (var range in ranges) { if (range.Start > range.End) { continue; } var cd = new StbTrueType.stbtt_packedchar[range.End - range.Start + 1]; fixed(StbTrueType.stbtt_packedchar *chardataPtr = cd) { StbTrueType.stbtt_PackFontRange(pcPtr, ttfPtr, 0, pixel_height, range.Start, range.End - range.Start + 1, chardataPtr); } for (var i = 0; i < cd.Length; ++i) { result[(char)(i + range.Start)] = cd[i]; } } } } }
public Dictionary <char, StbTrueType.stbtt_packedchar> End() { fixed(StbTrueType.stbtt_pack_context *pcPtr = &pc) { StbTrueType.stbtt_PackEnd(pcPtr); } return(result); }
public void Begin(byte[] pixels, int pw, int ph) { if (_beginCalled) { throw new Exception("Call End() before calling Begin again"); } _beginCalled = true; result.Clear(); _handle = GCHandle.Alloc(pixels, GCHandleType.Pinned); fixed(StbTrueType.stbtt_pack_context *pcPtr = &pc) { StbTrueType.stbtt_PackBegin(pcPtr, (byte *)_handle.AddrOfPinnedObject().ToPointer(), pw, ph, pw, 1, null); } }