X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FTexture.hh;h=41add2bca92638f135dc1b58abea615cb32f3d72;hp=4e311ea53a05f75689b0e7b2c31dfedf4b573135;hb=e973a129b5b83b628ba3f09e8c95682fc74080cd;hpb=4f9eb9259092994de9690cf12f11437c35a6791e diff --git a/src/Moof/Texture.hh b/src/Moof/Texture.hh index 4e311ea..41add2b 100644 --- a/src/Moof/Texture.hh +++ b/src/Moof/Texture.hh @@ -36,8 +36,8 @@ #include +#include #include -#include namespace Mf { @@ -47,10 +47,26 @@ class Texture; typedef boost::shared_ptr 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)); @@ -63,14 +79,38 @@ public: 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: