public void DrawText(string text, GLFont font, float startX, float startY, GLBrush brush, float width = 1000) { if (string.IsNullOrEmpty(text)) { return; } GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, font.Texture); GL.Color4(brush.Color0.R, brush.Color0.G, brush.Color0.B, (byte)255); GL.Begin(BeginMode.Quads); int alignmentOffsetX = 0; if (font.Alignment != 0) { font.MeasureString(text, out int minX, out int maxX); if (font.Alignment == 1) { alignmentOffsetX -= minX; alignmentOffsetX += ((int)width - maxX - minX) / 2; } else { alignmentOffsetX -= minX; alignmentOffsetX += ((int)width - maxX - minX); } } int x = (int)(startX + alignmentOffsetX); int y = (int)(startY + font.OffsetY); for (int i = 0; i < text.Length; i++) { var c0 = text[i]; var info = font.GetCharInfo(c0); int x0 = x + info.xoffset; int y0 = y + info.yoffset; int x1 = x0 + info.width; int y1 = y0 + info.height; GL.TexCoord2(info.u0, info.v0); GL.Vertex2(x0, y0); GL.TexCoord2(info.u1, info.v0); GL.Vertex2(x1, y0); GL.TexCoord2(info.u1, info.v1); GL.Vertex2(x1, y1); GL.TexCoord2(info.u0, info.v1); GL.Vertex2(x0, y1); x += info.xadvance; if (i != text.Length - 1) { char c1 = text[i + 1]; x += font.GetKerning(c0, c1); } } GL.End(); GL.Disable(EnableCap.Texture2D); }
public float MeasureString(string text, GLFont font) { font.MeasureString(text, out int minX, out int maxX); return(maxX - minX); }