Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

/Users/blackie/Documents/myRepository/phobosengine-vc2005/phobosengine/phobosengine/FontRenderer.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include "FontRenderer.h"
00004 
00005 #include "Configuration.h"
00006 #include "CoreEngine.h"
00007 #include "Renderer.h"
00008 #include "Texture.h"
00009 #include "TextureDatabase.h"
00010 
00011 
00012 namespace pge {
00013 
00014         Vector2i convertToGLCoords(int x, int y) {
00015                 return Vector2i(x, CoreEngine::getInstance()->getResolutionHeight() - y);
00016         }
00017 
00018 
00019         //****************************************************************************
00020         //
00021         //
00022         //
00023         //****************************************************************************
00024         FontRenderer::FontRenderer(void) {
00025                 m_fontTexture = TextureDatabase::getInstance()->addTexture(DEFAULT_FONT_FILE, "defaultfont", false, true);
00026         }
00027 
00028 
00029         //****************************************************************************
00030         //
00031         //
00032         //
00033         //****************************************************************************
00034         FontRenderer::~FontRenderer(void) {
00035         }
00036 
00037 
00038         //****************************************************************************
00039         //
00040         //
00041         //
00042         //****************************************************************************
00043         FontRenderer* FontRenderer::getInstance(void) {
00044                 static FontRenderer instance;
00045                 return &instance;
00046         }
00047 
00048 
00049         //****************************************************************************
00050         //
00051         //
00052         //
00053         //****************************************************************************
00054         bool FontRenderer::init(void) {
00055                 if(m_fontTexture == NULL) {
00056                         return false;
00057                 }
00058                 return true;
00059         }
00060 
00061 
00062         //****************************************************************************
00063         //
00064         //
00065         //
00066         //****************************************************************************
00067         void FontRenderer::render(void) {
00068         }
00069 
00070 
00071         //****************************************************************************
00072         //
00073         //
00074         //
00075         //****************************************************************************
00076         void FontRenderer::timer(unsigned int delay) {
00077         }
00078 
00079 
00080         //****************************************************************************
00081         //
00082         //
00083         //
00084         //****************************************************************************
00085         void FontRenderer::renderString(std::string str, int size, Vector2i position) {
00086                 renderString(str, size, position.m_v[0], position.m_v[1]);
00087         }
00088 
00089 
00090         //****************************************************************************
00091         //
00092         //
00093         //
00094         //****************************************************************************
00095         void FontRenderer::renderString(std::string str, int size, int x, int y) {
00096                 unsigned int i;
00097 
00098                 for (i = 0; i < str.length(); i++) {
00099                         // CompactFactor reduces the space between the single characters,
00100                         // since
00101                         // this is mostly too much when using normal generated fontmaps.
00102                         renderChar(str[i], size, x + ((i * size) - i * (size / FONT_COMPACT_FACTOR)), y);
00103                 }
00104         }
00105 
00106 
00107         //****************************************************************************
00108         //
00109         //
00110         //
00111         //****************************************************************************
00112         void FontRenderer::renderChar(char c, int size, int x, int y) {
00113                 int ascii;
00114                 int du;
00115                 int dv;
00116                 float uv[4][2];
00117                 float d;
00118 
00119 
00120                 d = 1.0f / 16.0f;
00121                 // Calculate position by ASCII value
00122                 // Offset is the whitespace character (ASCII 32)
00123                 ascii = (int) c - 32;
00124                 du = ascii % 16;
00125                 dv = (ascii / 16);
00126 
00127                 // Calculate offset in texture.
00128                 uv[0][0] = du * d;
00129                 uv[0][1] = d + (dv * d);
00130                 uv[1][0] = /* du * d */uv[0][0];
00131                 uv[1][1] = dv * d;
00132                 uv[2][0] = d + (du * d);
00133                 uv[2][1] = /* dv * d */uv[1][1];
00134                 uv[3][0] = /* d + (du * d) */uv[2][0];
00135                 uv[3][1] = /* d + (dv * d) */uv[0][1];
00136 
00137                 renderer::setTextureAlphaBlendEnabled(true);
00138 
00139                 if(m_fontTexture != NULL) {
00140                         renderer::setTexture(m_fontTexture, GL_MODULATE);
00141                 }
00142 
00143                 // TODO: font color
00144                 renderer::color4f(1.0f, 1.0f, 1.0f, 1.0f);
00145 
00146                 glBegin(GL_QUADS);
00147                 renderer::vertex2i(convertToGLCoords(x, y), uv[1]);
00148                 renderer::vertex2i(convertToGLCoords(x + size, y), uv[2]);
00149                 renderer::vertex2i(convertToGLCoords(x + size, y + size), uv[3]);
00150                 renderer::vertex2i(convertToGLCoords(x, y + size), uv[0]);
00151                 glEnd();
00152 
00153                 renderer::setTextureAlphaBlendEnabled(false);
00154         }
00155 };

Generated on Mon Oct 16 12:08:10 2006 for Phobosengine by doxygen 1.3.4