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
00100
00101
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
00122
00123 ascii = (int) c - 32;
00124 du = ascii % 16;
00125 dv = (ascii / 16);
00126
00127
00128 uv[0][0] = du * d;
00129 uv[0][1] = d + (dv * d);
00130 uv[1][0] = uv[0][0];
00131 uv[1][1] = dv * d;
00132 uv[2][0] = d + (du * d);
00133 uv[2][1] = uv[1][1];
00134 uv[3][0] = uv[2][0];
00135 uv[3][1] = uv[0][1];
00136
00137 renderer::setTextureAlphaBlendEnabled(true);
00138
00139 if(m_fontTexture != NULL) {
00140 renderer::setTexture(m_fontTexture, GL_MODULATE);
00141 }
00142
00143
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 };