X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fvideo%2Ftexture.hpp;h=6e4c462fec9d84e14f40d7ebc5ae1ed370d4b8cf;hb=d427db3e7c37d524e540511dd8cfce6e985bf32b;hp=8322e3c7a13051cfe6c52dbba7e1697b32e8748c;hpb=efc61e9d05b077f13a76982590fb0bd6a9d8dc61;p=supertux.git diff --git a/src/video/texture.hpp b/src/video/texture.hpp index 8322e3c7a..6e4c462fe 100644 --- a/src/video/texture.hpp +++ b/src/video/texture.hpp @@ -1,7 +1,7 @@ // $Id$ // -// SuperTux - A Jump'n Run -// Copyright (C) 2004 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -16,32 +16,76 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #ifndef __TEXTURE_HPP__ #define __TEXTURE_HPP__ -#include -#include +#include + +#include +#include + +#include "texture_manager.hpp" + +/// bitset for drawing effects +enum DrawingEffect { + /** Don't apply anything */ + NO_EFFECT, + /** Draw the Surface upside down */ + VERTICAL_FLIP, + /** Draw the Surface from left to down */ + HORIZONTAL_FLIP, + NUM_EFFECTS +}; /** - * This class is a very simple wrapper around a texture handle + * This class is a wrapper around a texture handle. It stores the texture width + * and height and provides convenience functions for uploading SDL_Surfaces + * into the texture */ class Texture { +protected: + int refcount; + std::string filename; + public: - GLuint handle; - unsigned int width; - unsigned int height; - - Texture(unsigned int width, unsigned int height, GLenum glformat); - Texture(SDL_Surface* surface, GLenum glformat); - ~Texture(); - - void upload_texture(SDL_Surface* image, int src_x, int src_y, int dst_x, int dst_y, - int width, int height); + Texture() : refcount(0), filename() {} + virtual ~Texture() {} + + virtual unsigned int get_texture_width() const = 0; + virtual unsigned int get_texture_height() const = 0; + virtual unsigned int get_image_width() const = 0; + virtual unsigned int get_image_height() const = 0; + + std::string get_filename() const + { + return filename; + } + + void set_filename(std::string filename) + { + this->filename = filename; + } + + void ref() + { + refcount++; + } + + void unref() + { + assert(refcount > 0); + refcount--; + if(refcount == 0) + release(); + } + private: - void set_texture_params(); + void release() + { + texture_manager->release(this); + } }; - #endif -