/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #ifndef _MOOF_TEXTURE_HH_ #define _MOOF_TEXTURE_HH_ /** * @file Texture.hh * Image-loading and OpenGL texture loading. */ #include #include #include #include namespace Mf { class Texture; typedef boost::shared_ptr TextureP; 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)); } explicit Texture(const std::string& name); void bind() const; GLuint getObject() const; static void resetBind(); 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 bool getPath(std::string& name); private: class Impl; boost::shared_ptr mImpl; }; } // namespace Mf #endif // _MOOF_TEXTURE_HH_