|
@@ -35,7 +35,8 @@ private: |
|
|
char *name; |
|
|
char *name; |
|
|
|
|
|
|
|
|
SDL_Surface *img; |
|
|
SDL_Surface *img; |
|
|
GLuint texture[1]; |
|
|
|
|
|
|
|
|
int width, height; |
|
|
|
|
|
GLuint texture; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
/* |
|
|
/* |
|
@@ -57,22 +58,10 @@ Font::Font(char const *path) |
|
|
SDL_Quit(); |
|
|
SDL_Quit(); |
|
|
exit(1); |
|
|
exit(1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
glGenTextures(1, data->texture); |
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
|
|
|
|
|
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, 4, data->img->w, data->img->h, 0, |
|
|
|
|
|
GL_RGBA, GL_UNSIGNED_BYTE, data->img->pixels); |
|
|
|
|
|
|
|
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
|
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Font::~Font() |
|
|
Font::~Font() |
|
|
{ |
|
|
{ |
|
|
glDeleteTextures(1, data->texture); |
|
|
|
|
|
SDL_FreeSurface(data->img); |
|
|
|
|
|
|
|
|
|
|
|
delete data; |
|
|
delete data; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -84,6 +73,29 @@ Entity::Group Font::GetGroup() |
|
|
void Font::TickDraw(float deltams) |
|
|
void Font::TickDraw(float deltams) |
|
|
{ |
|
|
{ |
|
|
Entity::TickDraw(deltams); |
|
|
Entity::TickDraw(deltams); |
|
|
|
|
|
|
|
|
|
|
|
if (data->img) |
|
|
|
|
|
{ |
|
|
|
|
|
data->width = data->img->w / 16; |
|
|
|
|
|
data->height = data->img->h / 16; |
|
|
|
|
|
|
|
|
|
|
|
glGenTextures(1, &data->texture); |
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture); |
|
|
|
|
|
|
|
|
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, 4, data->img->w, data->img->h, 0, |
|
|
|
|
|
GL_RGBA, GL_UNSIGNED_BYTE, data->img->pixels); |
|
|
|
|
|
|
|
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
|
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
|
|
|
|
|
|
|
|
|
|
|
SDL_FreeSurface(data->img); |
|
|
|
|
|
data->img = NULL; |
|
|
|
|
|
} |
|
|
|
|
|
else if (ref == 0) |
|
|
|
|
|
{ |
|
|
|
|
|
glDeleteTextures(1, &data->texture); |
|
|
|
|
|
destroy = 1; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
char const *Font::GetName() |
|
|
char const *Font::GetName() |
|
@@ -93,10 +105,10 @@ char const *Font::GetName() |
|
|
|
|
|
|
|
|
void Font::Print(int x, int y, char const *str) |
|
|
void Font::Print(int x, int y, char const *str) |
|
|
{ |
|
|
{ |
|
|
int w = data->img->w / 16; |
|
|
|
|
|
int h = data->img->h / 16; |
|
|
|
|
|
|
|
|
if (data->img) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture); |
|
|
glBegin(GL_QUADS); |
|
|
glBegin(GL_QUADS); |
|
|
while (*str) |
|
|
while (*str) |
|
|
{ |
|
|
{ |
|
@@ -109,14 +121,14 @@ void Font::Print(int x, int y, char const *str) |
|
|
glTexCoord2f(tx, ty); |
|
|
glTexCoord2f(tx, ty); |
|
|
glVertex2f(x, y); |
|
|
glVertex2f(x, y); |
|
|
glTexCoord2f(tx + .0625f, ty); |
|
|
glTexCoord2f(tx + .0625f, ty); |
|
|
glVertex2f(x + w, y); |
|
|
|
|
|
|
|
|
glVertex2f(x + data->width, y); |
|
|
glTexCoord2f(tx + .0625f, ty + .0625f); |
|
|
glTexCoord2f(tx + .0625f, ty + .0625f); |
|
|
glVertex2f(x + w, y + h); |
|
|
|
|
|
|
|
|
glVertex2f(x + data->width, y + data->height); |
|
|
glTexCoord2f(tx, ty + .0625f); |
|
|
glTexCoord2f(tx, ty + .0625f); |
|
|
glVertex2f(x, y + h); |
|
|
|
|
|
|
|
|
glVertex2f(x, y + data->height); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
x += w; |
|
|
|
|
|
|
|
|
x += data->width; |
|
|
} |
|
|
} |
|
|
glEnd(); |
|
|
glEnd(); |
|
|
} |
|
|
} |
|
@@ -135,6 +147,9 @@ void Font::PrintBold(int x, int y, char const *str) |
|
|
{ 0, 0, 1.0, 1.0, 1.0 }, |
|
|
{ 0, 0, 1.0, 1.0, 1.0 }, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (data->img) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT); |
|
|
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT); |
|
|
for (unsigned int i = 0; i < sizeof(tab) / sizeof(*tab); i++) |
|
|
for (unsigned int i = 0; i < sizeof(tab) / sizeof(*tab); i++) |
|
|
{ |
|
|
{ |
|
|