From be0486797260377246c1ea1229cca27c19c64ad2 Mon Sep 17 00:00:00 2001 From: pixel Date: Wed, 26 Mar 2003 17:19:23 +0000 Subject: bleh --- lib/gltexture.cc | 214 +++++-------------------------------------------------- 1 file changed, 17 insertions(+), 197 deletions(-) (limited to 'lib/gltexture.cc') 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; -} -- cgit v1.2.3