+typedef struct ft2_settings_s
+{
+ float scale, voffset;
+ // cvar parameters (only read on loadfont command)
+ int antialias, hinting;
+ float outline, blur, shadowx, shadowy, shadowz;
+} ft2_settings_t;
+
+#define MAX_FONT_SIZES 8
+#define MAX_FONT_FALLBACKS 3
+typedef struct dp_font_s
+{
+ rtexture_t *tex;
+ float width_of[256]; // width_of[0] == max width of any char; 1.0f is base width (1/16 of texture width); therefore, all widths have to be <= 1 (does not include scale)
+ float maxwidth; // precalculated max width of the font (includes scale)
+ char texpath[MAX_QPATH];
+ char title[MAX_QPATH];
+
+ int req_face; // requested face index, usually 0
+ float req_sizes[MAX_FONT_SIZES]; // sizes to render the font with, 0 still defaults to 16 (backward compatibility when loadfont doesn't get a size parameter) and -1 = disabled
+ char fallbacks[MAX_FONT_FALLBACKS][MAX_QPATH];
+ int fallback_faces[MAX_FONT_FALLBACKS];
+ struct ft2_font_s *ft2;
+
+ ft2_settings_t settings;
+}
+dp_font_t;
+
+typedef struct dp_fonts_s
+{
+ dp_font_t *f;
+ int maxsize;
+}
+dp_fonts_t;
+extern dp_fonts_t dp_fonts;
+
+#define MAX_FONTS 16 // fonts at the start
+#define FONTS_EXPAND 8 // fonts grow when no free slots
+#define FONT_DEFAULT (&dp_fonts.f[0]) // should be fixed width
+#define FONT_CONSOLE (&dp_fonts.f[1]) // REALLY should be fixed width (ls!)
+#define FONT_SBAR (&dp_fonts.f[2]) // must be fixed width
+#define FONT_NOTIFY (&dp_fonts.f[3]) // free
+#define FONT_CHAT (&dp_fonts.f[4]) // free
+#define FONT_CENTERPRINT (&dp_fonts.f[5]) // free
+#define FONT_INFOBAR (&dp_fonts.f[6]) // free
+#define FONT_MENU (&dp_fonts.f[7]) // should be fixed width
+#define FONT_USER(i) (&dp_fonts.f[8+i]) // userdefined fonts
+#define MAX_USERFONTS (dp_fonts.maxsize - 8)
+