summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/gltexture.h3
-rw-r--r--lib/glfont.cc48
-rw-r--r--lib/gltexture.cc9
-rw-r--r--src/Makefile.am12
4 files changed, 59 insertions, 13 deletions
diff --git a/include/gltexture.h b/include/gltexture.h
index 7305eb5..1e4c3d2 100644
--- a/include/gltexture.h
+++ b/include/gltexture.h
@@ -16,11 +16,12 @@ namespace mogltk {
GLuint GetWidth();
GLuint GetHeight();
static void Unbind(void);
+ void Taint(void);
private:
GLuint width, height, tex;
bool texture_allocated;
SDL_Surface * surface;
- bool planar;
+ bool planar, tainted;
#ifdef TRACE_TEXTURES
static texture * header;
static texture * footer;
diff --git a/lib/glfont.cc b/lib/glfont.cc
index 833d18d..e58feaf 100644
--- a/lib/glfont.cc
+++ b/lib/glfont.cc
@@ -11,24 +11,55 @@ font file format
off|siz|description
---+---+-------------------------------
- 0 | 2 | Number of entries
+ 0 | 2 | Number of entries = nbentries
2 | 1 | Flags
3 | 1 | maxX (maximum width)
4 | 1 | maxY (maximum height)
5 | X | char entries
5+X| Y | char map
+X = (maxX * maxY + 1) * nbentries
+Y = nbentries * 4
+
+
Flags:
------
+=====
0000000R
R = RGBA (=1) or Alpha (=0)
-ABGR in 1232 format:
+RGBA in 1232 format:
ABBGGGRR
-variables comments
+
+Each entries:
+============
+
+off|siz|description
+---+---+-------------------------------
+ 0 | 1 | True size of the entry
+ 1 | Z | Datas
+
+Z = maxX * maxY
+
+
+Char map:
+========
+
+nbentries entries, each entry = 4 bytes = 2 uint16
+
+off|siz|description
+---+---+-------------------------------
+ 0 | 2 | Unicode (?)
+ 2 | 2 | Corresponding char entry
+
+I'm not sure about Unicode. I write this only to say it's an attempt to
+make the fonts "internationals". If the "unicode" is < 255, then it should
+match only one byte in the string. Otherwise, it should match two bytes.
+
+
+Variables comments
==================
nbcU = number of chars on X by texture
@@ -94,14 +125,11 @@ mogltk::font::font(const String & file) {
}
}
}
- curU += maxX;
- if (curU >= 256) {
+ if ((curU += maxX) >= 256) {
curU = 0;
- curV += maxY;
- if (curV >= 256) {
+ if ((curV += maxY) >= 256) {
curV = 0;
- curT++;
- curtex = (Uint8 *) fonttex[curT]->GetSurface()->pixels;
+ curtex = (Uint8 *) fonttex[++curT]->GetSurface()->pixels;
}
}
}
diff --git a/lib/gltexture.cc b/lib/gltexture.cc
index b96184f..2758c05 100644
--- a/lib/gltexture.cc
+++ b/lib/gltexture.cc
@@ -10,7 +10,7 @@ mogltk::texture * mogltk::texture::footer = 0;
#endif
mogltk::texture::texture(int w, int h, bool plane) throw (GeneralException) : width(w), height(h),
- texture_allocated(false), planar(plane) {
+ texture_allocated(false), planar(plane), tainted(true) {
if ((BITCOUNT(w) != 1) || (BITCOUNT(h) != 1))
throw GeneralException("Size of the texture not a power of 2!");
@@ -96,10 +96,11 @@ void mogltk::texture::Generate() {
}
texture_allocated = true;
+ tainted = false;
}
void mogltk::texture::Bind(bool expand) {
- if (!texture_allocated)
+ if ((!texture_allocated) || tainted)
Generate();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex);
@@ -142,3 +143,7 @@ GLuint mogltk::texture::GetHeight() {
void mogltk::texture::Unbind(void) {
glDisable(GL_TEXTURE_2D);
}
+
+void mogltk::texture::Taint(void) {
+ tainted = true;
+}
diff --git a/src/Makefile.am b/src/Makefile.am
index e69de29..59b7e19 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -0,0 +1,12 @@
+localedir = $(datadir)/locale
+DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
+AM_CPPFLAGS = -Wall -Wstrict-prototypes @SDL_CFLAGS@ @BALTISOT_CFLAGS@
+INCLUDES = -I.. -I../include -I$(includedir)
+
+noinst_PROGRAMS = test
+
+test_SOURCES = test.cc
+
+LDADD = ../lib/libmogltk.la -lefence
+
+test_LDADD = $(LDADD)