]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Texture.hh
library class revamped as manager, goodbye tilemap
[chaz/yoink] / src / Moof / Texture.hh
index cdb6059ceff00d039a41a8b68f6bae45a543f84c..41add2bca92638f135dc1b58abea615cb32f3d72 100644 (file)
  * Image-loading and OpenGL texture loading.
  */
 
-#include <stdexcept>
-
 #include <boost/shared_ptr.hpp>
 
+#include <Moof/Image.hh>
 #include <Moof/OpenGL.hh>
-#include <Moof/Resource.hh>
 
 
 namespace Mf {
 
 
-class Texture : public Resource
+class Texture;
+typedef boost::shared_ptr<Texture> TextureP;
+
+
+class Texture : public Image
 {
 public:
-       Texture(const std::string& name);
+
+       /**
+        * Possible orientations for texture coordinates.
+        */
+
+       typedef unsigned TileIndex;
+       static const TileIndex NO_TILE = -1;
+
+       typedef enum
+       {
+               NORMAL =                        0,                      ///< Normal orientation.
+               FLIP =                          1,                      ///< Flip over a horizontal axis.
+               REVERSE =                       2,                      ///< Flip over a vertical axis.
+               FLIP_AND_REVERSE =      3                       ///< Flip over both.
+       } Orientation;
+
+
+       static TextureP alloc(const std::string& name)
+       {
+               return TextureP(new Texture(name));
+       }
+
+       explicit Texture(const std::string& name);
 
        void bind() const;
        GLuint getObject() const;
 
        static void resetBind();
 
-       unsigned getWidth() const;
-       unsigned getHeight() const;
-
        void setMinFilter(GLuint filter);
        void setMagFilter(GLuint filter);
        void setWrapS(GLuint wrap);
        void setWrapT(GLuint wrap);
 
-       static std::string getPath(const std::string& name);
 
-       struct Exception : std::runtime_error
-       {
-               explicit Exception(const std::string& what_arg) :
-                       std::runtime_error(what_arg) {}
-       };
+       /**
+        * Calculate texture coordinates for a tile at a certain index.  Tiles are
+        * indexed start with zero as the to-left tile and moving across, then down.
+        * @param index The tile index.
+        * @param coords An array of scalars where the texture coordinates will be
+        * stored after this call.  The first coordinate (u,v) will be in the first
+        * two places and so on until all four coordinates are stored, therefore
+        * requiring enough room for an array of eight scalars.  The winding of the
+        * coordinates is always counter-clockwise (the GL default).
+        * @return True if index is valid, false otherwise.
+        */
+
+       bool getTileCoords(TileIndex index, Scalar coords[8]) const;
+
+
+       /**
+        * This version let's you specify an orientation that will be reflected in
+        * the texture coordinates.  This allows you to easily map a texture
+        * backwards or upside-down.
+        * @param what The orientation; can be flip, reverse, or flip_and_reverse.
+        * @return True if index is valid, false otherwise.
+        */
+
+       bool getTileCoords(TileIndex index, Scalar coords[8], Orientation what) const;
+
+
+       static std::string getPath(const std::string& name);
 
 private:
+
        class Impl;
-       boost::shared_ptr<Impl> impl_;
+       boost::shared_ptr<Impl> mImpl;
 };
 
 
This page took 0.021824 seconds and 4 git commands to generate.