Order of the Butterfly            
            
            
            
                             
             
                Posts: 171 from 2006/10/6            
            
                From: Spain            
    
            
                            
                
			
				I know that you need FTGL, but freetype2 library is available on aminet:
http://aminet.net/package/dev/gg/libfreetype2-morphos
You can use this library and draw a font charset to a OpenGL texture, it's relatively easy. I made a small tool that export a tft font to a png texture and a xml file with all chars parameters, later this files was used on the game i was developing for iPhone and MorphOS (but it was delayed because i need to make other projects, i need to pay my bills), anyway this is a small section of code from my tool, maybe it helps you.
Code:
		int error = FT_Init_FreeType(&library);
		
		if (error) {
			printf("Error: Can't initialize freetype library.n");
			return 0;
		}
		
		FT_Face face;
		
		error= FT_New_Face(library, font_name, 0, &face);
		
		if (error) {
			printf("Error: Can't create font face.n");
			return 0;
		}
		
		FT_Set_Pixel_Sizes(face, font_size, 0);
		
		int xf = 0, yf = font_size, max_size = 0;
		TiXmlDocument doc;
	
		TiXmlElement *font_element = new TiXmlElement("font");
		font_element->SetAttribute("name", font_name);
		font_element->SetAttribute("size", font_size);
		font_element->SetAttribute("texture", file_output);	
	
		for (int c = 32; c < 256; c++)
		{
	
			size_t char_index = FT_Get_Char_Index(face,c);
	
			error = FT_Load_Glyph(face, char_index, FT_LOAD_DEFAULT);
			if (error) 
				continue;
				
			error = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL);
			if (error)
				continue;
				
			if (xf+face->glyph->bitmap.width > output_image->width)
			{
				xf = 0;
				yf += max_size;
				if (yf + max_size > output_image->height)
				{
					printf("Error: Output texture is very small to put all characters in one texture.n");
					return 0;
				}
				max_size = 0;
			}
			
			TiXmlElement *element = new TiXmlElement("character");
		
			element->SetAttribute("code", c);
			element->SetAttribute("offsetx", xf);
			element->SetAttribute("offsety", yf-font_size);
			element->SetAttribute("width", face->glyph->bitmap.width);
			element->SetAttribute("height", font_size-face->glyph->bitmap_top+face->glyph->bitmap.rows);
			element->SetAttribute("advance", face->glyph->linearHoriAdvance>>16);
			element->SetAttribute("top", face->glyph->bitmap_top);
			font_element->LinkEndChild(element);
			
			if (max_size < font_size-face->glyph->bitmap_top+face->glyph->bitmap.rows) {
				max_size = font_size-face->glyph->bitmap_top+face->glyph->bitmap.rows;
			}
			
			for (int y = 0; y < face->glyph->bitmap.rows; y++)
			{
				for (int x = 0; x < face->glyph->bitmap.width; x++) 
				{
					int ptr = (xf+x+((output_image->height-yf-y+face->glyph->bitmap_top-1)*output_image->width))*4;
					output_image->data[ptr] 	= face->glyph->bitmap.buffer[(x + (y * face->glyph->bitmap.width))];
					output_image->data[ptr + 1] = face->glyph->bitmap.buffer[(x + (y * face->glyph->bitmap.width))];
					output_image->data[ptr + 2] = face->glyph->bitmap.buffer[(x + (y * face->glyph->bitmap.width))];
					output_image->data[ptr + 3] = face->glyph->bitmap.buffer[(x + (y * face->glyph->bitmap.width))];
				}
			}
			
			xf += face->glyph->bitmap.width+1;
		}
		doc.LinkEndChild(font_element);
		doc.SaveFile("font_def.xml");
	}
		
	save_png(file_output, output_image);
Balrog Software - 
AmigaSkool.netMac Mini - MorphOS 3.8 - G4 1.5Ghz - Ati 9200 64 Mb
Efika - MorphOS 3.6 - Ati 9200 64Mb - 80 Gb HD
Amiga 1200D - OS 3.9 - Blizzard 603e/240mh