FreeTypeGX
FreeTypeGX is a wrapper class for libFreeType which renders a compiled FreeType parsable font into a GX texture for Wii homebrew development.
FreeTypeGX is written in C++ and makes use of a selectable pre-buffered or buffer-on-demand methodology to allow fast and efficient printing of text to the EFB.
This library was developed in-full by Armin Tamzarian with the support of developers in #wiibrew on EFnet.
- Ensure that you have the libFreeType Wii library installed in your development environment with the library added to your Makefile where appropriate.
- Ensure that you have the Metaphrasis library installed in your development environment with the library added to your Makefile where appropriate.
- Extract the FreeTypeGX archive.
- Copy the contents of the src directory into your project's development path.
- Include the FreeTypeGX header file in your code using syntax such as the following:
- Ensure that you have the libFreeType Wii library installed in your development environment with the library added to your Makefile where appropriate.
- Ensure that you have the Metaphrasis library installed in your development environment with the library added to your Makefile where appropriate.
- Extract the FreeTypeGX archive.
- Copy the contents of the lib directory into your devKitPro/libogc directory.
- Include the FreeTypeGX header file in your code using syntax such as the following:
Before you begin using
FreeTypeGX in your project you must ensure that the desired font in compiled into your project. For this example I will assume you are building your project with a Makefile using devKitPro evironment and are attempting to include a font whose filename is rursus_compact_mono.ttf.
- Copy the font into a directory which will be processed by the project's Makefile. If you are unsure about where you should place your font just copy the it into your project's source directory.
- Modify the Makefile to convert the font into an object file:
%.ttf.o : %.ttf
@echo $(notdir $<)
$(bin2o)
- Include the font object's generated header file in your source code:
#include "rursus_compact_mono_ttf.h"
This header file defines the two variables that you will need for use within your project: extern const u8 rursus_compact_mono_ttf[]; A pointer to the font buffer within the compiled project.
extern const u32 rursus_compact_mono_ttf_size; The size of the font's buffer in bytes.
- Within the file you included the FreeTypeGX.h header create an instance object of the FreeTypeGX class: Alternately you can specify a texture format to which you would like to render the font characters. Note that the default value for this parameter is GX_TF_RGBA8. Furthermore, you can also specify a positional format as defined in your graphics subsystem initialization. Note that the default value for this parameter is GX_POS_XYZ.
Currently supported textures are:
- GX_TF_I4
- GX_TF_I8
- GX_TF_IA4
- GX_TF_IA8
- GX_TF_RGB565
- GX_TF_RGB5A3
- GX_TF_RGBA8
Currently supported position formats are:
- Using the allocated FreeTypeGX instance object call the loadFont function to load the font from the compiled buffer and specify the desired point size:
fontSystem->loadFont(rursus_compact_mono_ttf, rursus_compact_mono_ttf_size, 64);
Alternately you can specify a flag which will load and cache all available font glyphs immidiately. Note that on large font sets enabling this feature could take a significant amount of time. fontSystem->loadFont(rursus_compact_mono_ttf, rursus_compact_mono_ttf_size, 64, true);
- Using the allocated FreeTypeGX instance object call the drawText function to print a string at the specified screen X and Y coordinates to the current EFB: Alternately you can specify a GXColor object you would like to apply to the printed characters:
freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!"), (GXColor){0xff, 0xee, 0xaa, 0xff});
FreeTypeGX is distributed under the GNU Lesser General Public License.
If you have any suggestions, questions, or comments regarding this library feel free to e-mail me at tamzarian1989 [at] gmail [dawt] com.