Skip to content
Snippets Groups Projects
font.cpp 1.80 KiB
#include <iostream>
#include <cstdint>
#include "GL/glu.h"
#include <cstring>

#include "fontimage.h"

GLuint fontOffset;
GLuint texName;

void makeRasterFont( void ) {
	glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
	glGenTextures( 1, &texName );
	glBindTexture( GL_TEXTURE_2D, texName );

	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 128, 48, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, fontimage );

	fontOffset = glGenLists( 128 );
	GLuint i, j, k, l;
	for ( i = 0, j = ' '; i < 16 * 6; i++, j++ ) {
		k = i % 16;
		l = i / 16;
		glNewList( fontOffset + j, GL_COMPILE );
		glBegin( GL_QUADS );
		glTexCoord2f( ( k * 8.0f ) / 128.0f, ( (5-l) * 8.0f ) / 48.0f ); glVertex2f( 0.0f, 8.0f );
		glTexCoord2f( ( k * 8.0f ) / 128.0f, ( (6-l) * 8.0f ) / 48.0f ); glVertex2f( 0.0f, 0.0f );
		glTexCoord2f( ( ( k + 1 ) * 8.0f ) / 128.0f, ( (6-l) * 8.0f ) / 48.0f ); glVertex2f( 8.0f, 0.0f );
		glTexCoord2f( ( ( k + 1 ) * 8.0f ) / 128.0f, ( (5-l) * 8.0f ) / 48.0f ); glVertex2f( 8.0f, 8.0f );
		glEnd();
		glTranslated( 8.0, 0.0, 0.0 );
		glEndList();
	}
}

void fontInit( void ) {
	glShadeModel( GL_FLAT );
	makeRasterFont();
}

void printString( const char *s ) {
	glPushAttrib( GL_LIST_BIT );
	glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
	glEnable( GL_TEXTURE_2D );
	glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
	glBindTexture( GL_TEXTURE_2D, texName );
	glListBase( fontOffset );

	glPushMatrix();
	glCallLists( strlen( s ), GL_UNSIGNED_BYTE, ( GLubyte * )s );
	glPopMatrix();

	glDisable( GL_TEXTURE_2D );
	glPopAttrib();
}