]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Texture.hh
library class revamped as manager, goodbye tilemap
[chaz/yoink] / src / Moof / Texture.hh
index 4e311ea53a05f75689b0e7b2c31dfedf4b573135..41add2bca92638f135dc1b58abea615cb32f3d72 100644 (file)
@@ -36,8 +36,8 @@
 
 #include <boost/shared_ptr.hpp>
 
 
 #include <boost/shared_ptr.hpp>
 
+#include <Moof/Image.hh>
 #include <Moof/OpenGL.hh>
 #include <Moof/OpenGL.hh>
-#include <Moof/Resource.hh>
 
 
 namespace Mf {
 
 
 namespace Mf {
@@ -47,10 +47,26 @@ class Texture;
 typedef boost::shared_ptr<Texture> TextureP;
 
 
 typedef boost::shared_ptr<Texture> TextureP;
 
 
-class Texture : public Resource
+class Texture : public Image
 {
 public:
 
 {
 public:
 
+       /**
+        * 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));
        static TextureP alloc(const std::string& name)
        {
                return TextureP(new Texture(name));
@@ -63,14 +79,38 @@ public:
 
        static void resetBind();
 
 
        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);
 
        void setMinFilter(GLuint filter);
        void setMagFilter(GLuint filter);
        void setWrapS(GLuint wrap);
        void setWrapT(GLuint wrap);
 
+
+       /**
+        * 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:
        static std::string getPath(const std::string& name);
 
 private:
This page took 0.019159 seconds and 4 git commands to generate.