This project is not actively maintained.
Font Stash
Font stash is light-weight online font texture atlas builder written in C. It uses
to render fonts on demand to a texture atlas.
The code is split in two parts, the font atlas and glyph quad generator
, and an example OpenGL backend (
.
Screenshot
Example
// Create GL stash for 512x512 texture, our coordinate system has zero at top-left.structFONScontext*fs=glfonsCreate(512, 512, FONS_ZERO_TOPLEFT); // Add font to stash.intfontNormal=fonsAddFont(fs, "sans", "DroidSerif-Regular.ttf"); // Render some textfloatdx=10, dy=10; unsigned intwhite=glfonsRGBA(255,255,255,255); unsigned intbrown=glfonsRGBA(192,128,0,128); fonsSetFont(fs, fontNormal); fonsSetSize(fs, 124.0f); fonsSetColor(fs, white); fonsDrawText(fs, dx,dy,"The big ", NULL); fonsSetSize(fs, 24.0f); fonsSetColor(fs, brown); fonsDrawText(fs, dx,dy,"brown fox", NULL);Using Font Stash in your project
In order to use fontstash in your own project, just copy fontstash.h, stb_truetype.h, and potentially glstash.h to your project. In one C/C++ define FONTSTASH_IMPLEMENTATION before including the library to expand the font stash implementation in that file.
#include<stdio.h>// malloc, free, fopen, fclose, ftell, fseek, fread#include<string.h>// memset#defineFONTSTASH_IMPLEMENTATION// Expands implementation#include"fontstash.h"#include<GLFW/glfw3.h>// Or any other GL header of your choice.#defineGLFONTSTASH_IMPLEMENTATION// Expands implementation#include"glfontstash.h"Creating new rendering backend
The default rendering backend uses OpenGL to render the glyphs. If you want to render the text using some other API, or want tighter integration with your code base you can write your own rendering backend. Take a look at the
for reference implementation.
The rendering interface FontStash assumes access to is defined in the FONSparams structure. The renderer initialization function is assumed to fill in the FONSparams structure and call fonsCreateInternal to create the FontStash context.
structFONSparams { ... void*userPtr; int (*renderCreate)(void*uptr, intwidth, intheight); int (*renderResize)(void*uptr, intwidth, intheight); void (*renderUpdate)(void*uptr, int*rect, constunsigned char*data); void (*renderDraw)(void*uptr, constfloat*verts, constfloat*tcoords, constunsigned int*colors, intnverts); void (*renderDelete)(void*uptr); };renderCreate is called to create renderer for specific API, this is where you should create a texture of given size. return 1 of success, or 0 on failure.
renderResize is called to resize the texture. Called when user explicitly expands or resets the atlas texture. return 1 of success, or 0 on failure.
renderUpdate is called to update texture data rect describes the region of the texture that has changed
data pointer to full texture data
renderDraw is called when the font triangles should be drawn verts pointer to vertex position data, 2 floats per vertex
tcoords pointer to texture coordinate data, 2 floats per vertex
colors pointer to color data, 1 uint per vertex (or 4 bytes)
nverts is the number of vertices to draw
renderDelete is called when the renderer should be deleted
userPtr is passed to all calls as first parameter
FontStash uses this API as follows:
fonsDrawText() { foreach (glyph in input string) { if (internal buffer full) { updateTexture() render() } add glyph to interal draw buffer } updateTexture() render() } The size of the internal buffer is defined using FONS_VERTEX_COUNT define. The default value is 1024, you can override it when you include fontstash.h and specify the implementation:
#defineFONS_VERTEX_COUNT 2048 #defineFONTSTASH_IMPLEMENTATION// Expands implementation#include"fontstash.h"Compiling
In order to compile the demo project, your will need to install
to compile.
FontStash example project uses
to build platform specific projects, now is good time to install it if you don't have it already. To build the example, navigate into the root folder in your favorite terminal, then:
OS X: premake4 xcode4
Windows: premake4 vs2010
Linux: premake4 gmake
See premake4 documentation for full list of supported build file types. The projects will be created in build folder. An example of building and running the example on OS X:
$ premake4 gmake $ cd build/ $ make $ ./exampleLicense
The library is licensed under
Links
Uses
for font rendering.