// ============================================================== // This file is part of Glest Shared Library (www.glest.org) // // Copyright (C) 2001-2008 MartiƱo Figueroa // // You can redistribute this code 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 // ============================================================== #ifndef _SHARED_GRAPHICS_TEXTURE_H_ #define _SHARED_GRAPHICS_TEXTURE_H_ #include "data_types.h" #include "pixmap.h" #include #include "leak_dumper.h" using std::string; using Shared::Platform::uint8; struct SDL_Surface; namespace Shared{ namespace Graphics{ class TextureParams; // ===================================================== // class Texture // ===================================================== class Texture { public: static const int defaultSize; static const int defaultComponents; static bool useTextureCompression; enum WrapMode{ wmRepeat, wmClamp, wmClampToEdge }; enum Filter{ fBilinear, fTrilinear }; enum Format{ fAuto, fAlpha, fLuminance, fRgb, fRgba }; protected: string path; bool mipmap; WrapMode wrapMode; bool pixmapInit; Format format; bool inited; bool forceCompressionDisabled; int textureSystemId; public: Texture(); virtual ~Texture(){}; bool getMipmap() const {return mipmap;} WrapMode getWrapMode() const {return wrapMode;} bool getPixmapInit() const {return pixmapInit;} Format getFormat() const {return format;} bool getInited() const {return inited;} int getTextureSystemId() const { return textureSystemId; } void setTextureSystemId(int id) { textureSystemId = id; } void setMipmap(bool mipmap) {this->mipmap= mipmap;} void setWrapMode(WrapMode wrapMode) {this->wrapMode= wrapMode;} void setPixmapInit(bool pixmapInit) {this->pixmapInit= pixmapInit;} void setFormat(Format format) {this->format= format;} virtual void init(Filter filter= fBilinear, int maxAnisotropy= 1)=0; virtual void end(bool deletePixelBuffer=true)=0; virtual string getPath() const = 0; virtual void deletePixels() = 0; virtual std::size_t getPixelByteCount() const = 0; virtual void reseInitState() { inited = false; } virtual void setForceCompressionDisabled(bool value) { forceCompressionDisabled = value;} virtual bool getForceCompressionDisabled() const {return forceCompressionDisabled;} virtual uint32 getCRC() = 0; }; // ===================================================== // class Texture1D // ===================================================== class Texture1D: public Texture { protected: Pixmap1D pixmap; public: void load(const string &path); Pixmap1D *getPixmap() {return &pixmap;} const Pixmap1D *getPixmap() const {return &pixmap;} virtual string getPath() const; virtual void deletePixels(); virtual std::size_t getPixelByteCount() const {return pixmap.getPixelByteCount();} virtual int getTextureWidth() const {return pixmap.getW();} virtual int getTextureHeight() const {return -1;} virtual uint32 getCRC() { return pixmap.getCRC()->getSum(); } }; // ===================================================== // class Texture2D // ===================================================== class Texture2D: public Texture { protected: Pixmap2D pixmap; public: void load(const string &path); Pixmap2D *getPixmap() {return &pixmap;} const Pixmap2D *getPixmapConst() const {return &pixmap;} virtual string getPath() const; virtual void deletePixels(); virtual std::size_t getPixelByteCount() const {return pixmap.getPixelByteCount();} virtual int getTextureWidth() const {return pixmap.getW();} virtual int getTextureHeight() const {return pixmap.getH();} virtual uint32 getCRC() { return pixmap.getCRC()->getSum(); } std::pair CreateSDLSurface(bool newPixelData) const; }; // ===================================================== // class Texture3D // ===================================================== class Texture3D: public Texture { protected: Pixmap3D pixmap; public: void loadSlice(const string &path, int slice); Pixmap3D *getPixmap() {return &pixmap;} const Pixmap3D *getPixmap() const {return &pixmap;} virtual string getPath() const; virtual void deletePixels(); virtual std::size_t getPixelByteCount() const {return pixmap.getPixelByteCount();} virtual int getTextureWidth() const {return pixmap.getW();} virtual int getTextureHeight() const {return pixmap.getH();} virtual uint32 getCRC() { return pixmap.getCRC()->getSum(); } }; // ===================================================== // class TextureCube // ===================================================== class TextureCube: public Texture{ protected: PixmapCube pixmap; public: void loadFace(const string &path, int face); PixmapCube *getPixmap() {return &pixmap;} const PixmapCube *getPixmap() const {return &pixmap;} virtual string getPath() const; virtual void deletePixels(); virtual std::size_t getPixelByteCount() const {return pixmap.getPixelByteCount();} virtual int getTextureWidth() const {return -1;} virtual int getTextureHeight() const {return -1;} virtual uint32 getCRC() { return pixmap.getCRC()->getSum(); } }; }}//end namespace #endif