// Font generated by stb_font_inl_generator.c (4/1 bpp) // // Following instructions show how to use the only included font, whatever it is, in // a generic way so you can replace it with any other font by changing the include. // To use multiple fonts, replace STB_SOMEFONT_* below with STB_FONT_consolas_8_usascii_*, // and separately install each font. Note that the CREATE function call has a // totally different name; it's just 'stb_font_consolas_8_usascii'. // /* // Example usage: static stb_fontchar fontdata[STB_SOMEFONT_NUM_CHARS]; static void init(void) { // optionally replace both STB_SOMEFONT_BITMAP_HEIGHT with STB_SOMEFONT_BITMAP_HEIGHT_POW2 static unsigned char fontpixels[STB_SOMEFONT_BITMAP_HEIGHT][STB_SOMEFONT_BITMAP_WIDTH]; STB_SOMEFONT_CREATE(fontdata, fontpixels, STB_SOMEFONT_BITMAP_HEIGHT); ... create texture ... // for best results rendering 1:1 pixels texels, use nearest-neighbor sampling // if allowed to scale up, use bilerp } // This function positions characters on integer coordinates, and assumes 1:1 texels to pixels // Appropriate if nearest-neighbor sampling is used static void draw_string_integer(int x, int y, char *str) // draw with top-left point x,y { ... use texture ... ... turn on alpha blending and gamma-correct alpha blending ... glBegin(GL_QUADS); while (*str) { int char_codepoint = *str++; stb_fontchar *cd = &fontdata[char_codepoint - STB_SOMEFONT_FIRST_CHAR]; glTexCoord2f(cd->s0, cd->t0); glVertex2i(x + cd->x0, y + cd->y0); glTexCoord2f(cd->s1, cd->t0); glVertex2i(x + cd->x1, y + cd->y0); glTexCoord2f(cd->s1, cd->t1); glVertex2i(x + cd->x1, y + cd->y1); glTexCoord2f(cd->s0, cd->t1); glVertex2i(x + cd->x0, y + cd->y1); // if bilerping, in D3D9 you'll need a half-pixel offset here for 1:1 to behave correct x += cd->advance_int; } glEnd(); } // This function positions characters on float coordinates, and doesn't require 1:1 texels to pixels // Appropriate if bilinear filtering is used static void draw_string_float(float x, float y, char *str) // draw with top-left point x,y { ... use texture ... ... turn on alpha blending and gamma-correct alpha blending ... glBegin(GL_QUADS); while (*str) { int char_codepoint = *str++; stb_fontchar *cd = &fontdata[char_codepoint - STB_SOMEFONT_FIRST_CHAR]; glTexCoord2f(cd->s0f, cd->t0f); glVertex2f(x + cd->x0f, y + cd->y0f); glTexCoord2f(cd->s1f, cd->t0f); glVertex2f(x + cd->x1f, y + cd->y0f); glTexCoord2f(cd->s1f, cd->t1f); glVertex2f(x + cd->x1f, y + cd->y1f); glTexCoord2f(cd->s0f, cd->t1f); glVertex2f(x + cd->x0f, y + cd->y1f); // if bilerping, in D3D9 you'll need a half-pixel offset here for 1:1 to behave correct x += cd->advance; } glEnd(); } */ #ifndef STB_FONTCHAR__TYPEDEF #define STB_FONTCHAR__TYPEDEF typedef struct { // coordinates if using integer positioning float s0,t0,s1,t1; signed short x0,y0,x1,y1; int advance_int; // coordinates if using floating positioning float s0f,t0f,s1f,t1f; float x0f,y0f,x1f,y1f; float advance; } stb_fontchar; #endif #define STB_FONT_consolas_8_usascii_BITMAP_WIDTH 128 #define STB_FONT_consolas_8_usascii_BITMAP_HEIGHT 34 #define STB_FONT_consolas_8_usascii_BITMAP_HEIGHT_POW2 64 #define STB_FONT_consolas_8_usascii_FIRST_CHAR 32 #define STB_FONT_consolas_8_usascii_NUM_CHARS 95 #define STB_FONT_consolas_8_usascii_LINE_SPACING 5 static unsigned int stb__consolas_8_usascii_pixels[]={ 0x202e0a86,0x3730541b,0x750aa810,0x2881001c,0x38111013,0x03304ce6, 0x08501a84,0x10404408,0x98b13884,0x884c24c4,0x925ec473,0x11215490, 0x1aa4497b,0xdc98dec4,0x5cc93592,0xc88e641c,0x4bc894c2,0x32e237b3, 0x42e77b12,0x12032714,0xb8ee4c53,0x32191bc9,0x2a589090,0x892193ce, 0x0e279953,0x065d4755,0x054c1991,0x45cc90e6,0x5ca60554,0x271485c0, 0x40e67505,0x2555991a,0x22424325,0x85cb120c,0x5c525538,0xa987ae2d, 0xcb8eb661,0x4388754b,0x3076e1ed,0x90badd65,0x543824e2,0x59991a80, 0x9092c323,0x219120c8,0x848d4624,0xbcc96665,0xb1a972b0,0x8d417026, 0x0b94c585,0x738ac2e9,0xa8298903,0x6cc77771,0x8b12122c,0x459b12c9, 0x22599339,0x25bb51cb,0x9950cc8b,0x5cef221b,0x4f366241,0x1b913cca, 0x664d7362,0x12a2c713,0x02e190b1,0x48484ec4,0x000000ae,0x00000070, 0x00000033,0x19044710,0x50b26350,0x65453017,0x00014970,0x00000000, 0x00000000,0x00000a20,0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x22280200,0x95040620,0x1d402679, 0x6644b991,0x40211114,0x40100820,0x88222228,0x85710101,0x04108880, 0x45207791,0x2f6122cb,0x40d52553,0x2e495449,0x6572e691,0x92caa190, 0x882e5854,0x298f6e61,0x2442cc98,0x36e27995,0x98b92972,0x53173226, 0x1a83705c,0x64cb32ab,0xb82f262b,0x3911b8b0,0x4d20cd87,0xc892370b, 0x26a61c44,0x92122a63,0x971c4b1a,0x725d6491,0x221da923,0x59b50323, 0x1ab8a4aa,0xad98b366,0x50b70e64,0x223cac8b,0x1c44838c,0x1db31326, 0x11e65490,0x5725cdc7,0x8b0b0b92,0xa8550aa4,0x42e0d491,0x1c42c905, 0x97790dec,0x44480bd8,0x2a625cc3,0x02ea482a,0x225c9c71,0x533662cc, 0x90cc2cb9,0x23502679,0x379106a4,0x12675ca0,0x5dcb1c87,0x2e22dc69, 0x3530e22e,0x2e2594c9,0xec88352e,0x0001a672,0x000001c0,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x81040000, 0x08888200,0x04208204,0x10888222,0x04020401,0x08485d26,0xc8200804, 0x3322931c,0x6644b322,0x12345dc2,0x5dcc7335,0x921716e5,0x46f6238b, 0x57771bd8,0x57952e44,0x2210af26,0x8b32248b,0x640f441c,0x22083b10, 0x2eb3755a,0x44bcb8b0,0x29825544,0x290b82f2,0x8710ccd9,0x42485c38, 0x85d226a5,0x1037b044,0x86b22b89,0x41dc40c8,0x337749b9,0x32b22432, 0x407aa243,0xcb8e2e24,0xd886726c,0x2e59b12c,0x6ed4b090,0x2ccb7932, 0x3906e0b5,0x43906aa6,0x26b33cc8,0x257b14cc,0xb8a42cc8,0x30b55120, 0x172e6d47,0x711eed52,0x8685c388,0x5242c6a5,0x215c0dc7,0x0377320c, 0x00000037,0x9e741724,0x9064489a,0x5c90b85c,0x33621c43,0x6443b972, 0x2259b53e,0x82b860cc,0x1a804cea,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0xa46a5990,0x85c048b9,0x9950c084,0x248f3225, 0x2e7b910a,0x885043cc,0xa8cdca20,0x5c2ee29c,0x00001bbb,0x50e61c40, 0x540cc923,0xb30e2e24,0x4954b2a2,0x3b8c8a91,0x477190c8,0x5dcc225a, 0x8c6b6912,0x0002663b,0x36e60000,0x96550e62,0x8a6e20db,0xb89d40bd, 0x1c52351d,0x86e265dc,0x32600774,0x0044c23c,0x00000000,0x2cc83931, 0x22e699d1,0x0b50c224,0x148d4503,0x4cb39507,0x00ee93ce,0x00000000, 0x05100000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000, }; static signed short stb__consolas_8_usascii_x[95]={ 0,1,1,0,0,0,0,1,1,1,0,0,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, }; static signed short stb__consolas_8_usascii_y[95]={ 5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,2, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,0,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,1,-1,1,-1,1,-1,1,-1,-1, -1,-1,-1,1,1,1,1,1,1,1,-1,1,1,1,1,1,1,-1,-2,-1,2, }; static unsigned short stb__consolas_8_usascii_w[95]={ 0,2,3,5,4,5,5,2,3,3,4,5,3,3, 2,4,5,4,4,4,5,4,4,4,4,4,2,3,4,4,4,3,5,5,4,4,5,4,4,4,4,4,4,5, 4,5,4,5,4,5,5,4,5,4,5,5,5,5,4,3,4,3,4,5,3,4,4,4,4,4,5,5,4,4, 4,5,4,5,4,5,4,4,5,4,4,4,5,5,5,5,4,4,2,4,5, }; static unsigned short stb__consolas_8_usascii_h[95]={ 0,7,3,6,7,7,7,3,8,8,4,5,4,2, 3,7,7,6,6,7,6,7,7,6,7,6,5,6,6,3,6,7,8,6,6,7,6,6,6,7,6,6,7,6, 6,6,6,7,6,8,6,7,6,7,6,6,6,6,6,8,7,8,4,1,3,5,7,5,7,5,6,6,6,6, 8,6,6,4,4,5,6,6,4,5,7,5,4,4,4,6,4,8,9,8,2, }; static unsigned short stb__consolas_8_usascii_s[95]={ 127,58,86,34,71,76,82,83,4,43,38, 1,34,96,71,97,1,56,81,12,91,66,88,18,102,66,107,71,97,78,86, 93,23,23,61,22,50,45,40,117,29,116,112,12,7,1,121,52,111,29,100, 107,88,122,77,71,65,59,54,35,17,39,23,100,74,110,61,7,7,115,37, 43,32,83,18,94,106,65,43,120,27,49,48,102,47,12,28,54,17,75,60, 13,1,8,90, }; static unsigned short stb__consolas_8_usascii_t[95]={ 1,1,26,19,1,1,1,26,1,1,26, 26,26,26,26,1,11,19,19,11,19,1,1,19,1,19,19,19,19,26,19, 1,1,19,19,11,19,19,19,1,19,11,1,19,19,19,11,1,11,1,11, 1,11,1,11,11,11,11,11,1,11,1,26,26,26,19,1,26,11,19,11, 11,11,11,1,11,11,26,26,19,11,11,26,19,1,26,26,26,26,19,26, 1,1,1,26, }; static unsigned short stb__consolas_8_usascii_a[95]={ 70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, 70,70,70,70,70,70,70, }; // Call this function with // font: NULL or array length // data: NULL or specified size // height: STB_FONT_consolas_8_usascii_BITMAP_HEIGHT or STB_FONT_consolas_8_usascii_BITMAP_HEIGHT_POW2 // return value: spacing between lines static void stb_font_consolas_8_usascii(stb_fontchar font[STB_FONT_consolas_8_usascii_NUM_CHARS], unsigned char data[STB_FONT_consolas_8_usascii_BITMAP_HEIGHT][STB_FONT_consolas_8_usascii_BITMAP_WIDTH], int height) { int i,j; if (data != 0) { unsigned int *bits = stb__consolas_8_usascii_pixels; unsigned int bitpack = *bits++, numbits = 32; for (i=0; i < STB_FONT_consolas_8_usascii_BITMAP_WIDTH*height; ++i) data[0][i] = 0; // zero entire bitmap for (j=1; j < STB_FONT_consolas_8_usascii_BITMAP_HEIGHT-1; ++j) { for (i=1; i < STB_FONT_consolas_8_usascii_BITMAP_WIDTH-1; ++i) { unsigned int value; if (numbits==0) bitpack = *bits++, numbits=32; value = bitpack & 1; bitpack >>= 1, --numbits; if (value) { if (numbits < 3) bitpack = *bits++, numbits = 32; data[j][i] = (bitpack & 7) * 0x20 + 0x1f; bitpack >>= 3, numbits -= 3; } else { data[j][i] = 0; } } } } // build font description if (font != 0) { float recip_width = 1.0f / STB_FONT_consolas_8_usascii_BITMAP_WIDTH; float recip_height = 1.0f / height; for (i=0; i < STB_FONT_consolas_8_usascii_NUM_CHARS; ++i) { // pad characters so they bilerp from empty space around each character font[i].s0 = (stb__consolas_8_usascii_s[i]) * recip_width; font[i].t0 = (stb__consolas_8_usascii_t[i]) * recip_height; font[i].s1 = (stb__consolas_8_usascii_s[i] + stb__consolas_8_usascii_w[i]) * recip_width; font[i].t1 = (stb__consolas_8_usascii_t[i] + stb__consolas_8_usascii_h[i]) * recip_height; font[i].x0 = stb__consolas_8_usascii_x[i]; font[i].y0 = stb__consolas_8_usascii_y[i]; font[i].x1 = stb__consolas_8_usascii_x[i] + stb__consolas_8_usascii_w[i]; font[i].y1 = stb__consolas_8_usascii_y[i] + stb__consolas_8_usascii_h[i]; font[i].advance_int = (stb__consolas_8_usascii_a[i]+8)>>4; font[i].s0f = (stb__consolas_8_usascii_s[i] - 0.5f) * recip_width; font[i].t0f = (stb__consolas_8_usascii_t[i] - 0.5f) * recip_height; font[i].s1f = (stb__consolas_8_usascii_s[i] + stb__consolas_8_usascii_w[i] + 0.5f) * recip_width; font[i].t1f = (stb__consolas_8_usascii_t[i] + stb__consolas_8_usascii_h[i] + 0.5f) * recip_height; font[i].x0f = stb__consolas_8_usascii_x[i] - 0.5f; font[i].y0f = stb__consolas_8_usascii_y[i] - 0.5f; font[i].x1f = stb__consolas_8_usascii_x[i] + stb__consolas_8_usascii_w[i] + 0.5f; font[i].y1f = stb__consolas_8_usascii_y[i] + stb__consolas_8_usascii_h[i] + 0.5f; font[i].advance = stb__consolas_8_usascii_a[i]/16.0f; } } } #ifndef STB_SOMEFONT_CREATE #define STB_SOMEFONT_CREATE stb_font_consolas_8_usascii #define STB_SOMEFONT_BITMAP_WIDTH STB_FONT_consolas_8_usascii_BITMAP_WIDTH #define STB_SOMEFONT_BITMAP_HEIGHT STB_FONT_consolas_8_usascii_BITMAP_HEIGHT #define STB_SOMEFONT_BITMAP_HEIGHT_POW2 STB_FONT_consolas_8_usascii_BITMAP_HEIGHT_POW2 #define STB_SOMEFONT_FIRST_CHAR STB_FONT_consolas_8_usascii_FIRST_CHAR #define STB_SOMEFONT_NUM_CHARS STB_FONT_consolas_8_usascii_NUM_CHARS #define STB_SOMEFONT_LINE_SPACING STB_FONT_consolas_8_usascii_LINE_SPACING #endif