X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fvideo%2Ftexture_manager.hpp;h=54520e2a234bd28f4790c409b49546ad60c829e0;hb=1f5ff04e5283398473b4ac033258b17af0ed08f0;hp=32280f4317b1006c196592400ccf1a9d3afabc9f;hpb=07ddaed2a657e4d2a3d038fed223fc5827159caf;p=supertux.git diff --git a/src/video/texture_manager.hpp b/src/video/texture_manager.hpp index 32280f431..54520e2a2 100644 --- a/src/video/texture_manager.hpp +++ b/src/video/texture_manager.hpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,66 +12,94 @@ // GNU General Public License for more details. // // 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. +// along with this program. If not, see . -#ifndef __IMAGE_TEXTURE_MANAGER_HPP__ -#define __IMAGE_TEXTURE_MANAGER_HPP__ +#ifndef HEADER_SUPERTUX_VIDEO_TEXTURE_MANAGER_HPP +#define HEADER_SUPERTUX_VIDEO_TEXTURE_MANAGER_HPP + +#include + +#include -#include -#include -#include #include +#include #include +#include +#include + +#include "util/currenton.hpp" +#include "video/glutil.hpp" +#include "video/texture_ptr.hpp" class Texture; -class ImageTexture; +class GLTexture; +class Rect; -class TextureManager +class TextureManager : public Currenton { public: TextureManager(); ~TextureManager(); - ImageTexture* get(const std::string& filename); - - void register_texture(Texture* texture); - void remove_texture(Texture* texture); + TexturePtr get(const std::string& filename); + TexturePtr get(const std::string& filename, const Rect& rect); + +#ifdef HAVE_OPENGL + void register_texture(GLTexture* texture); + void remove_texture(GLTexture* texture); void save_textures(); void reload_textures(); +#endif private: - friend class ImageTexture; - void release(ImageTexture* texture); - - typedef std::map ImageTextures; - ImageTextures image_textures; + friend class Texture; - ImageTexture* create_image_texture(const std::string& filename); + typedef std::map > ImageTextures; + ImageTextures m_image_textures; - typedef std::set Textures; - Textures textures; + typedef std::map Surfaces; + Surfaces m_surfaces; + +private: + void reap_cache_entry(const std::string& filename); + + TexturePtr create_image_texture(const std::string& filename, const Rect& rect); + + /** on failure a dummy texture is returned and no exception is thrown */ + TexturePtr create_image_texture(const std::string& filename); + + /** throw an exception on error */ + TexturePtr create_image_texture_raw(const std::string& filename); + TexturePtr create_image_texture_raw(const std::string& filename, const Rect& rect); + + TexturePtr create_dummy_texture(); + +#ifdef HAVE_OPENGL +private: + typedef std::set Textures; + Textures m_textures; struct SavedTexture { - Texture* texture; + GLTexture* texture; GLint width; GLint height; char* pixels; - GLint border; + GLint border; GLint min_filter; GLint mag_filter; GLint wrap_s; GLint wrap_t; }; - std::vector saved_textures; + std::vector m_saved_textures; - void save_texture(Texture* texture); +private: + void save_texture(GLTexture* texture); +#endif }; -extern TextureManager* texture_manager; - #endif +/* EOF */