Example #1
0
void TextDraw( float x, float y, const char *text, int align, unsigned int col ) {
	if (!g_ftex) return;
	if (!text) return;
	
	if (align == TEXT_ALIGN_CENTER)
		x -= GetTextLength(g_cdata, text)/2;
	else if (align == TEXT_ALIGN_RIGHT)
		x -= GetTextLength(g_cdata, text);
	
	glColor4ub(col&0xff, (col>>8)&0xff, (col>>16)&0xff, (col>>24)&0xff);
	
	glEnable(GL_TEXTURE_2D);
	
	glBindTexture(GL_TEXTURE_2D, g_ftex);
	
	glBegin(GL_TRIANGLES);
	
	const float ox = x;
	
	while (*text)
	{
		int c = (unsigned char)*text;
		if (c == '\t')
		{
			unsigned int i;
			for (i = 0; i < 4; ++i)
			{
				if (x < g_tabStops[i]+ox)
				{
					x = g_tabStops[i]+ox;
					break;
				}
			}
		}
		else if (c >= 32 && c < 128)
		{			
			stbtt_aligned_quad q;

			GetBakedQuad(g_cdata, 512,512, c-32, &x,&y,&q);
			
			glTexCoord2f(q.s0, q.t0);
			glVertex2f(q.x0, q.y0);
			glTexCoord2f(q.s1, q.t1);
			glVertex2f(q.x1, q.y1);
			glTexCoord2f(q.s1, q.t0);
			glVertex2f(q.x1, q.y0);
			
			glTexCoord2f(q.s0, q.t0);
			glVertex2f(q.x0, q.y0);
			glTexCoord2f(q.s0, q.t1);
			glVertex2f(q.x0, q.y1);
			glTexCoord2f(q.s1, q.t1);
			glVertex2f(q.x1, q.y1);
		}
		++text;
	}
	
	glEnd();	
	glDisable(GL_TEXTURE_2D);
}
	void TTFFontAsset::GetGlyphData(int unicodeCodepoint, float* x, float* y, Rect& verts, Rect& texCoords) const
	{
        AlignedQuad q;
        GetBakedQuad(fontCData, textureWidth, textureHeight, unicodeCodepoint, x, y, &q);

        verts.topLeft.x = q.x0;
		verts.topLeft.y = q.y0;
        verts.bottomRight.x = q.x1;
		verts.bottomRight.y = q.y1;

        texCoords.topLeft.x = q.s0;
		texCoords.topLeft.y = q.t0;
        texCoords.bottomRight.x = q.s1;
		texCoords.bottomRight.y = q.t1;
    }