diff options
Diffstat (limited to 'src/engine/client/text.cpp')
| -rw-r--r-- | src/engine/client/text.cpp | 58 |
1 files changed, 26 insertions, 32 deletions
diff --git a/src/engine/client/text.cpp b/src/engine/client/text.cpp index 4a3a2eb3..af06fc11 100644 --- a/src/engine/client/text.cpp +++ b/src/engine/client/text.cpp @@ -9,21 +9,11 @@ #include <windows.h> #endif -#ifdef CONF_PLATFORM_MACOSX - #include <OpenGL/gl.h> - #include <OpenGL/glu.h> -#else - #include <GL/gl.h> - #include <GL/glu.h> -#endif - // ft2 texture #include <ft2build.h> #include FT_FREETYPE_H // TODO: Refactor: clean this up - - enum { MAX_CHARACTERS = 64, @@ -54,7 +44,7 @@ struct CFontSizeData int m_FontSize; FT_Face *m_pFace; - GLuint m_aTextures[2]; + int m_aTextures[2]; int m_TextureWidth; int m_TextureHeight; @@ -107,7 +97,7 @@ class CTextRender : public IEngineTextRender float m_TextOutlineB; float m_TextOutlineA; - int m_FontTextureFormat; + //int m_FontTextureFormat; CFont *m_pDefaultFont; @@ -158,26 +148,25 @@ class CTextRender : public IEngineTextRender void *pMem = mem_alloc(Width*Height, 1); mem_zero(pMem, Width*Height); - if(pSizeData->m_aTextures[0] == 0) - glGenTextures(2, pSizeData->m_aTextures); - else - FontMemoryUsage -= pSizeData->m_TextureWidth*pSizeData->m_TextureHeight*2; + for(int i = 0; i < 2; i++) + { + if(pSizeData->m_aTextures[i] != 0) + { + Graphics()->UnloadTexture(pSizeData->m_aTextures[i]); + FontMemoryUsage -= pSizeData->m_TextureWidth*pSizeData->m_TextureHeight; + pSizeData->m_aTextures[i] = 0; + } + + pSizeData->m_aTextures[i] = Graphics()->LoadTextureRaw(Width, Height, CImageInfo::FORMAT_ALPHA, pMem, CImageInfo::FORMAT_ALPHA, IGraphics::TEXLOAD_NOMIPMAPS); + FontMemoryUsage += Width*Height; + } pSizeData->m_NumXChars = Xchars; pSizeData->m_NumYChars = Ychars; pSizeData->m_TextureWidth = Width; pSizeData->m_TextureHeight = Height; pSizeData->m_CurrentCharacter = 0; - - for(int i = 0; i < 2; i++) - { - glBindTexture(GL_TEXTURE_2D, pSizeData->m_aTextures[i]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, m_FontTextureFormat, Width, Height, 0, m_FontTextureFormat, GL_UNSIGNED_BYTE, pMem); - FontMemoryUsage += Width*Height; - } - + dbg_msg("", "pFont memory usage: %d", FontMemoryUsage); mem_free(pMem); @@ -254,11 +243,16 @@ class CTextRender : public IEngineTextRender int x = (SlotID%pSizeData->m_NumXChars) * (pSizeData->m_TextureWidth/pSizeData->m_NumXChars); int y = (SlotID/pSizeData->m_NumXChars) * (pSizeData->m_TextureHeight/pSizeData->m_NumYChars); + Graphics()->LoadTextureRawSub(pSizeData->m_aTextures[Texnum], x, y, + pSizeData->m_TextureWidth/pSizeData->m_NumXChars, + pSizeData->m_TextureHeight/pSizeData->m_NumYChars, + CImageInfo::FORMAT_ALPHA, pData); + /* glBindTexture(GL_TEXTURE_2D, pSizeData->m_aTextures[Texnum]); glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, pSizeData->m_TextureWidth/pSizeData->m_NumXChars, pSizeData->m_TextureHeight/pSizeData->m_NumYChars, - m_FontTextureFormat, GL_UNSIGNED_BYTE, pData); + m_FontTextureFormat, GL_UNSIGNED_BYTE, pData);*/ } // 32k of data used for rendering glyphs @@ -285,7 +279,8 @@ class CTextRender : public IEngineTextRender Oldest = i; } - if(time_get()-pSizeData->m_aCharacters[Oldest].m_TouchTime < time_freq()) + if(time_get()-pSizeData->m_aCharacters[Oldest].m_TouchTime < time_freq() && + (pSizeData->m_NumXChars < MAX_CHARACTERS || pSizeData->m_NumYChars < MAX_CHARACTERS)) { IncreaseTextureSize(pSizeData); return GetSlot(pSizeData); @@ -455,7 +450,7 @@ public: m_pDefaultFont = 0; // GL_LUMINANCE can be good for debugging - m_FontTextureFormat = GL_ALPHA; + //m_FontTextureFormat = GL_ALPHA; } virtual void Init() @@ -620,11 +615,10 @@ public: if(pCursor->m_Flags&TEXTFLAG_RENDER) { // TODO: Make this better - glEnable(GL_TEXTURE_2D); if (i == 0) - glBindTexture(GL_TEXTURE_2D, pSizeData->m_aTextures[1]); + Graphics()->TextureSet(pSizeData->m_aTextures[1]); else - glBindTexture(GL_TEXTURE_2D, pSizeData->m_aTextures[0]); + Graphics()->TextureSet(pSizeData->m_aTextures[0]); Graphics()->QuadsBegin(); if (i == 0) |