summaryrefslogtreecommitdiff
path: root/lib/gltexture.cc
diff options
context:
space:
mode:
authorpixel <pixel>2003-03-26 17:19:23 +0000
committerpixel <pixel>2003-03-26 17:19:23 +0000
commitbe0486797260377246c1ea1229cca27c19c64ad2 (patch)
tree2d6f03e0e8cad191250239b69205c727c5551323 /lib/gltexture.cc
parentc00cd54ca5ed959cbccff7aa7261fb5025d1832c (diff)
bleh
Diffstat (limited to 'lib/gltexture.cc')
-rw-r--r--lib/gltexture.cc214
1 files changed, 17 insertions, 197 deletions
diff --git a/lib/gltexture.cc b/lib/gltexture.cc
index c0a940f..ff79112 100644
--- a/lib/gltexture.cc
+++ b/lib/gltexture.cc
@@ -8,163 +8,31 @@
#include "config.h"
#endif
#include "gettext.h"
-#ifndef _
-#define _(x) x
-#endif
-
-#define DEBUG 1
-
-#ifdef TRACE_TEXTURES
-mogltk::texture * mogltk::texture::header = 0;
-mogltk::texture * mogltk::texture::footer = 0;
-#endif
-mogltk::texture * mogltk::texture::active = 0;
+mogltk::gltexture * mogltk::gltexture::active = 0;
-mogltk::texture::texture(int w, int h, bool plane) throw (GeneralException) : width(w), height(h),
- texture_allocated(false), planar(plane), tainted(true) {
- if ((!ISPOT(w)) || (!ISPOT(h)))
- throw GeneralException(_("Size of the texture not a power of 2!"));
-
- if (!(surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- 0xff000000,
- 0x00ff0000,
- 0x0000ff00,
- 0x000000ff
-#else
- 0x000000ff,
- 0x0000ff00,
- 0x00ff0000,
- 0xff000000
-#endif
- ))) {
- throw GeneralException(_("Can't create RGB Surface"));
- }
-
-#ifdef TRACE_TEXTURES
- next = 0;
- prev = footer;
- footer = this;
- if (!header) {
- header = this;
- }
- if (prev) {
- prev->next = this;
- }
-#endif
+mogltk::gltexture::gltexture(int w, int h, bool plane) throw (GeneralException) :
+ texture(w, h), texture_allocated(false), planar(plane), tainted(true) {
}
-mogltk::texture::texture(Handle * h, bool plane) throw (GeneralException) :
- texture_allocated(false), planar(plane), tainted(true) {
-
- SDL_Surface * temp;
-
- temp = LoadNTEX(h);
- width = temp->w;
- height = temp->h;
-
-#ifdef DEBUG
- printm(M_INFO, "Creating texture from file: size %ix%i\n", height, width);
-#endif
-
- if ((!ISPOT(width)) || (!ISPOT(height))) {
- SDL_FreeSurface(temp);
- throw GeneralException(_("Size of the texture not a power of 2!"));
- }
-
- SDL_PixelFormat f;
-
- f.palette = 0;
- f.BitsPerPixel = 32;
- f.BytesPerPixel = 4;
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- f.Amask = 0x000000ff;
- f.Bmask = 0x0000ff00;
- f.Gmask = 0x00ff0000;
- f.Rmask = 0xff000000;
- f.Ashift = 0;
- f.Bshift = 8;
- f.Gshift = 16;
- f.Rshift = 24;
-#else
- f.Rmask = 0x000000ff;
- f.Gmask = 0x0000ff00;
- f.Bmask = 0x00ff0000;
- f.Amask = 0xff000000;
- f.Rshift = 0;
- f.Gshift = 8;
- f.Bshift = 16;
- f.Ashift = 24;
-#endif
- f.Rloss = 0;
- f.Gloss = 0;
- f.Bloss = 0;
- f.Aloss = 0;
-
- if (!(surface = SDL_ConvertSurface(temp, &f, 0))) {
- throw GeneralException("Could not convert texture to OpenGL format");
- }
-
- SDL_FreeSurface(temp);
-
-#ifdef TRACE_TEXTURES
- next = 0;
- prev = footer;
- footer = this;
- if (!header) {
- header = this;
- }
- if (prev) {
- prev->next = this;
- }
-#endif
+mogltk::gltexture::gltexture(Handle * h, bool plane) throw (GeneralException) :
+ texture(h), texture_allocated(false), planar(plane), tainted(true) {
}
-mogltk::texture::~texture() {
- if (surface) {
- SDL_FreeSurface(surface);
- }
-
+mogltk::gltexture::~gltexture() {
if (texture_allocated) {
glDeleteTextures(1, &tex);
}
-
-#ifdef TRACE_TEXTURES
- if (prev) {
- prev->next = next;
- }
-
- if (next) {
- next->prev = prev;
- }
-
- if (this == footer) {
- footer = prev;
- }
-
- if (this == header) {
- header = next;
- }
-#endif
-}
-
-Uint32 * mogltk::texture::GetPixels() {
- return (Uint32 *) surface->pixels;
}
-SDL_Surface * mogltk::texture::GetSurface() {
- return surface;
-}
-
-void mogltk::texture::Generate() {
+void mogltk::gltexture::Generate() {
if (texture_allocated) {
glDeleteTextures(1, &tex);
}
glGenTextures(1, &tex);
#ifdef DEBUG
- printm(M_INFO, _("Generated texture index: %i\n"), tex);
+ printm(M_INFO, _("Generated gltexture index: %i\n"), tex);
#endif
glBindTexture(GL_TEXTURE_2D, tex);
@@ -172,7 +40,7 @@ void mogltk::texture::Generate() {
#if 0
if (planar) {
#ifdef DEBUG
- printm(M_INFO, _("Generating planar texture: %i\n"), tex);
+ printm(M_INFO, _("Generating planar gltexture: %i\n"), tex);
#endif
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -180,13 +48,13 @@ void mogltk::texture::Generate() {
} else {
#endif
#ifdef DEBUG
- printm(M_INFO, _("Generating 3D texture: %i\n"), tex);
+ printm(M_INFO, _("Generating 3D gltexture: %i\n"), tex);
#endif
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
+ gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, GetWidth(), GetHeight(), GL_RGBA, GL_UNSIGNED_BYTE, GetPixels());
// glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
#if 0
}
@@ -196,20 +64,20 @@ void mogltk::texture::Generate() {
tainted = false;
}
-void mogltk::texture::Bind(bool expand) {
+void mogltk::gltexture::Bind(bool expand) {
if ((!texture_allocated) || tainted)
Generate();
glEnable(GL_TEXTURE_2D);
if (active == this)
return;
#ifdef DEBUG
- printm(M_INFO, _("Binding texture index %i.\n"), tex);
+ printm(M_INFO, _("Binding gltexture index %i.\n"), tex);
#endif
glBindTexture(GL_TEXTURE_2D, tex);
if (expand) {
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
- glScaled(1 / (double) width, 1 / (double) height, 1);
+ glScaled(1 / (double) GetWidth(), 1 / (double) GetHeight(), 1);
glMatrixMode(GL_MODELVIEW);
}
@@ -236,65 +104,17 @@ void mogltk::texture::Bind(bool expand) {
#endif
}
-GLuint mogltk::texture::GetWidth() {
- return width;
-}
-
-GLuint mogltk::texture::GetHeight() {
- return height;
-}
-
-void mogltk::texture::Unbind(void) {
+void mogltk::gltexture::Unbind(void) {
if (active) {
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
active = 0;
#ifdef DEBUG
- printm(M_INFO, _("Unbinding texture.\n"));
+ printm(M_INFO, _("Unbinding gltexture.\n"));
#endif
}
}
-void mogltk::texture::Taint(void) {
+void mogltk::gltexture::Taint(void) {
tainted = true;
}
-
-#ifdef WORDS_BIGENDIAN
-#define NTEX_SIGNATURE 0x4e544558
-#else
-#define NTEX_SIGNATURE 0x5845544e
-#endif
-
-SDL_Surface * mogltk::texture::LoadNTEX(Handle * h) throw (GeneralException) {
- SDL_Surface * r;
- char buffer[4];
- Uint16 height, width;
-
- h->read(buffer, 4);
- buffer[4] = 0;
- if (*((Uint32 *) buffer) != NTEX_SIGNATURE)
- throw GeneralException("Texture file " + h->GetName() + " corrupted");
-
- height = h->readU16();
- width = h->readU16();
-
- if (!(r = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- 0xff000000,
- 0x00ff0000,
- 0x0000ff00,
- 0x000000ff
-#else
- 0x000000ff,
- 0x0000ff00,
- 0x00ff0000,
- 0xff000000
-#endif
- ))) {
- throw GeneralException(_("Can't create RGB Surface for LoadNTEX"));
- }
-
- h->read(r->pixels, height * width * 4);
-
- return r;
-}