/*] 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 moof { class texture; typedef boost::shared_ptr texture_ptr; class texture : public image { public: static const int no_tile = -1; /** * Possible orientations for texture coordinates. */ 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 texture_ptr alloc(const std::string& name) { return texture_ptr(new texture(name)); } explicit texture(const std::string& name); void bind() const; GLuint object() const; static void reset_binding(); void min_filter(GLuint filter); void mag_filter(GLuint filter); void wrap_s(GLuint wrap); void wrap_t(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 tile_coordinates(int 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 tile_coordinates(int index, scalar coords[8], orientation what) const; private: class impl; boost::shared_ptr impl_; }; } // namespace moof #endif // _MOOF_TEXTURE_HH_