]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Texture.hh
bugfix: resource file searching was broken
[chaz/yoink] / src / Moof / Texture.hh
index 2ab4710cf55202dfd986808b820812be5b5fe5cf..f3525500a39e349eaef2edf52f0551ea3435eb61 100644 (file)
@@ -1,30 +1,13 @@
 
-/*******************************************************************************
-
- Copyright (c) 2009, Charles McGarvey
- All rights reserved.
- Redistribution   and   use  in  source  and  binary  forms,  with  or  without
- modification, are permitted provided that the following conditions are met:
-   * Redistributions  of  source  code  must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-   * Redistributions  in binary form must reproduce the above copyright notice,
-     this  list of conditions and the following disclaimer in the documentation
-     and/or other materials provided with the distribution.
- THIS  SOFTWARE  IS  PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND  ANY  EXPRESS  OR  IMPLIED  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN  NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR  ANY  DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES  (INCLUDING,  BUT  NOT  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES;  LOSS  OF  USE,  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*******************************************************************************/
+/*]  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_
  * Image-loading and OpenGL texture loading.
  */
 
-#include <stdexcept>
+#include <string>
 
 #include <boost/shared_ptr.hpp>
 
+#include <Moof/Image.hh>
 #include <Moof/OpenGL.hh>
-#include <Moof/Resource.hh>
 
 
 namespace Mf {
 
 
-class Texture : public Resource
+class Texture;
+typedef boost::shared_ptr<Texture> TextureP;
+
+
+class Texture : public Image
 {
 public:
-       Texture(const std::string& name);
 
-       void bind();
-       GLuint getObject();
+       /**
+        * 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;
 
-       unsigned getWidth();
-       unsigned getHeight();
+       static void resetBind();
 
        void setMinFilter(GLuint filter);
        void setMagFilter(GLuint filter);
        void setWrapS(GLuint wrap);
        void setWrapT(GLuint wrap);
 
-       static std::string getPathToResource(const std::string& name);
 
-       struct Exception : std::runtime_error
-       {
-               explicit Exception(const std::string& what_arg) :
-                       std::runtime_error(what_arg) {}
-       };
+       /**
+        * 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 TextureImpl;
-       boost::shared_ptr<TextureImpl> impl_;
+
+       class Impl;
+       boost::shared_ptr<Impl> mImpl;
 };
 
 
@@ -79,5 +113,3 @@ private:
 
 #endif // _MOOF_TEXTURE_HH_
 
-/** vim: set ts=4 sw=4 tw=80: *************************************************/
-
This page took 0.023031 seconds and 4 git commands to generate.