/// <summary> /// Render outlined characters. /// </summary> /// <param name="pen"></param> /// <param name="range"></param> public void Render(Pen pen, Vector2i range) { if (range.Y < range.X) { return; } ValidateRange(range); canvas.Begin(CanvasRenderFlags.SoftwarePositionTransform); try { for (int i = range.X; i <= range.Y; i++) { RenderGlyphInfo info = glyphs[i]; if (glyphs[i].RenderingData == null) { continue; } // We set transform. canvas.Transform = new LinearTransform( Matrix4x4f.CreateTranslate(info.LeftBottom.Vec3) * Matrix4x4f.CreateScale(new Vector3f(fontSize, fontSize, fontSize)) ); // We finally render. TriangleSoup2f soup = info.RenderingData.AcquireOutline(canvas.CanvasInfo.TesselationResolution, pen.ToOutlineTesselationOptions(canvas.CanvasInfo)); canvas.FillShape(pen.Fill, soup, info.AttachedMapper); } } finally { canvas.End(); } }