X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fmoof%2Ftexture.hh;fp=src%2Fmoof%2Ftexture.hh;h=0ea195227c5b7e6de5764c1127ca8e0dd07fad7a;hb=831f04d4bc19a390415ac0bbac4331c7a65509bc;hp=0000000000000000000000000000000000000000;hpb=299af4f2047e767e5d79501c26444473bda64c64;p=chaz%2Fyoink diff --git a/src/moof/texture.hh b/src/moof/texture.hh new file mode 100644 index 0000000..0ea1952 --- /dev/null +++ b/src/moof/texture.hh @@ -0,0 +1,110 @@ + +/*] 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; + + + static bool find_path(std::string& name); + + +private: + + class impl; + boost::shared_ptr impl_; +}; + + +} // namespace moof + +#endif // _MOOF_TEXTURE_HH_ +