]> Dogcows Code - chaz/yoink/blobdiff - src/moof/sprite.cc
converted image management to resource handles
[chaz/yoink] / src / moof / sprite.cc
diff --git a/src/moof/sprite.cc b/src/moof/sprite.cc
new file mode 100644 (file)
index 0000000..7548ab0
--- /dev/null
@@ -0,0 +1,142 @@
+
+/*]  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.
+*
+**************************************************************************/
+
+#include <cstdio>              // FILE
+#include <cstring>             // strncmp
+#include <stdexcept>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/bind.hpp>
+
+#include "dispatcher.hh"
+#include "log.hh"
+#include "opengl.hh"
+#include "sprite.hh"
+
+
+namespace moof {
+
+
+sprite::sprite(const std::string& path, int tile)
+{
+       image_ = resource::load(path);
+       image_->tile_coordinates(tile, tile_);
+}
+
+sprite::sprite(const image_handle& image, int tile) :
+       image_(image)
+{
+       image_->tile_coordinates(tile, tile_);
+}
+
+sprite::sprite(const sprite& sprite, int tile)
+{
+       // FIXME broken
+       image_ = sprite.image_;
+}
+
+
+void sprite::image(const std::string& path)
+{
+       image_ = resource::load(path);
+       // FIXME what about tiles?
+}
+
+void sprite::tile(int tile)
+{
+       if (image_) image_->tile_coordinates(tile, tile_);
+}
+
+
+void sprite::bind() const
+{
+       if (image_) image_->bind();
+}
+
+void sprite::reset_binding()
+{
+       image::reset_binding();
+}
+
+
+void sprite::draw(const vector3 vertices[4]) const
+{
+       bind();
+
+       glVertexPointer(3, GL_SCALAR, 0, vertices[0].data());
+       glTexCoordPointer(2, GL_SCALAR, 0, tile_);
+
+       glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+}
+
+
+/*
+       void min_filter(GLuint filter)
+       {
+               bind();
+               mMinFilter = filter;
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mMinFilter);
+       }
+
+       void mag_filter(GLuint filter)
+       {
+               bind();
+               mMagFilter = filter;
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mMagFilter);
+       }
+
+       void wrap_s(GLuint wrap)
+       {
+               bind();
+               mWrapS = wrap;
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, mWrapS);
+       }
+
+       void wrap_t(GLuint wrap)
+       {
+               bind();
+               mWrapT = wrap;
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, mWrapT);
+       }
+
+
+bool sprite::tile_coordinates(int index, scalar coords[8],
+               orientation orientation) const
+{
+       if (tile_coordinates(index, coords))
+       {
+               if (orientation & flip)
+               {
+                       // this looks kinda weird, but it's just swapping in a way that
+                       // doesn't require an intermediate variable
+                       coords[1] = coords[5];
+                       coords[5] = coords[3];
+                       coords[3] = coords[7];
+                       coords[7] = coords[5];
+               }
+               if (orientation & reverse)
+               {
+                       coords[0] = coords[2];
+                       coords[2] = coords[6];
+                       coords[4] = coords[6];
+                       coords[6] = coords[0];
+               }
+
+               return true;
+       }
+
+       return false;
+}
+*/
+
+
+} // namespace moof
+
This page took 0.023844 seconds and 4 git commands to generate.