Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

texture.h

Go to the documentation of this file.
00001 // texture.h
00002 //
00003 // Copyright (C) 2001-2003, Chris Laurel
00004 //
00005 // This program is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU General Public License
00007 // as published by the Free Software Foundation; either version 2
00008 // of the License, or (at your option) any later version.
00009 
00010 #ifndef _CELENGINE_TEXTURE_H_
00011 #define _CELENGINE_TEXTURE_H_
00012 
00013 #include <string>
00014 #include <celutil/basictypes.h>
00015 #include <celutil/color.h>
00016 #include <celengine/image.h>
00017 
00018 
00019 typedef void (*ProceduralTexEval)(float, float, float, unsigned char*);
00020 
00021 
00022 struct TextureTile
00023 {
00024     TextureTile(unsigned int _texID) :
00025         u(0.0f), v(0.0f), du(1.0f), dv(1.0f), texID(_texID) {};
00026     TextureTile(unsigned int _texID, float _u, float _v) :
00027         u(_u), v(_v), du(1.0f), dv(1.0f), texID(_texID) {};
00028     TextureTile(unsigned int _texID, float _u, float _v, float _du, float _dv) :
00029         u(_u), v(_v), du(_du), dv(_dv), texID(_texID) {};
00030 
00031     float u, v;
00032     float du, dv;
00033     unsigned int texID;
00034 };
00035 
00036 
00037 class TexelFunctionObject
00038 {
00039  public:
00040     TexelFunctionObject() {};
00041     virtual ~TexelFunctionObject() {};
00042     virtual void operator()(float u, float v, float w,
00043                             unsigned char* pixel) = 0;
00044 };
00045 
00046 
00047 class Texture
00048 {
00049  public:
00050     Texture(int w, int h, int d = 1);
00051     virtual ~Texture();
00052 
00053     virtual const TextureTile getTile(int lod, int u, int v) = 0;
00054     virtual void bind() = 0;
00055 
00056     virtual int getLODCount() const;
00057     virtual int getUTileCount(int lod) const;
00058     virtual int getVTileCount(int lod) const;
00059     virtual int getWTileCount(int lod) const;
00060 
00061     // Currently, these methods are only implemented by virtual textures; they
00062     // may be useful later when a more sophisticated texture management scheme
00063     // is implemented.
00064     virtual void beginUsage() {};
00065     virtual void endUsage() {};
00066 
00067     virtual void setBorderColor(Color);
00068 
00069     int getWidth() const;
00070     int getHeight() const;
00071     int getDepth() const;
00072 
00073     bool hasAlpha() const { return alpha; }
00074 
00075     enum AddressMode
00076     {
00077         Wrap        = 0,
00078         BorderClamp = 1,
00079         EdgeClamp   = 2,
00080     };
00081 
00082     enum MipMapMode
00083     {
00084         DefaultMipMaps = 0,
00085         NoMipMaps      = 1,
00086         AutoMipMaps    = 2,
00087     };
00088 
00089  protected:
00090     bool alpha;
00091 
00092  private:
00093     int width;
00094     int height;
00095     int depth;
00096 };
00097 
00098 
00099 class ImageTexture : public Texture
00100 {
00101  public:
00102     ImageTexture(Image& img, AddressMode, MipMapMode);
00103     ~ImageTexture();
00104 
00105     virtual const TextureTile getTile(int lod, int u, int v);
00106     virtual void bind();
00107     virtual void setBorderColor(Color);
00108 
00109     unsigned int getName() const;
00110 
00111  private:
00112     unsigned int glName;
00113 };
00114 
00115 
00116 class TiledTexture : public Texture
00117 {
00118  public:
00119     TiledTexture(Image& img, int _uSplit, int _vSplit, MipMapMode);
00120     ~TiledTexture();
00121 
00122     virtual const TextureTile getTile(int lod, int u, int v);
00123     virtual void bind();
00124     virtual void setBorderColor(Color);
00125 
00126     virtual int getUTileCount(int lod) const;
00127     virtual int getVTileCount(int lod) const;
00128 
00129  private:
00130     int uSplit;
00131     int vSplit;
00132     unsigned int* glNames;
00133 };
00134 
00135 
00136 class CubeMap : public Texture
00137 {
00138  public:
00139     CubeMap(Image* faces[]);
00140     ~CubeMap();
00141 
00142     virtual const TextureTile getTile(int lod, int u, int v);
00143     virtual void bind();
00144     virtual void setBorderColor(Color);
00145 
00146  private:
00147     unsigned int glName;
00148 };
00149 
00150 
00151 extern Texture* CreateProceduralTexture(int width, int height,
00152                                         int format,
00153                                         ProceduralTexEval func,
00154                                         Texture::AddressMode addressMode = Texture::EdgeClamp,
00155                                         Texture::MipMapMode mipMode = Texture::DefaultMipMaps);
00156 extern Texture* CreateProceduralTexture(int width, int height,
00157                                         int format,
00158                                         TexelFunctionObject& func,
00159                                         Texture::AddressMode addressMode = Texture::EdgeClamp,
00160                                         Texture::MipMapMode mipMode = Texture::DefaultMipMaps);
00161 extern Texture* CreateProceduralCubeMap(int size, int format,
00162                                         ProceduralTexEval func);
00163 
00164 extern Texture* LoadTextureFromFile(const std::string& filename,
00165                                     Texture::AddressMode addressMode = Texture::EdgeClamp,
00166                                     Texture::MipMapMode mipMode = Texture::DefaultMipMaps);
00167 
00168 extern Texture* LoadHeightMapFromFile(const std::string& filename,
00169                                       float height,
00170                                       Texture::AddressMode addressMode = Texture::EdgeClamp);
00171 
00172 
00173 #endif // _CELENGINE_TEXTURE_H_

Generated on Sat Jan 14 22:30:29 2006 for Celestia by  doxygen 1.4.1