#include <boost/shared_ptr.hpp>
+#include <Moof/Image.hh>
#include <Moof/OpenGL.hh>
-#include <Moof/Resource.hh>
namespace Mf {
typedef boost::shared_ptr<Texture> TextureP;
-class Texture : public Resource
+class Texture : public Image
{
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 void resetBind();
- unsigned getWidth() const;
- unsigned getHeight() const;
-
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: