X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fimage.hh;h=62f8699abb029503b1e87b2db97c56d96bc1d356;hp=97572708379ba76210422f5adc708c8c8175b65e;hb=574af38ed616d1adfa5e6ce35f67cda1f707f89d;hpb=831f04d4bc19a390415ac0bbac4331c7a65509bc diff --git a/src/moof/image.hh b/src/moof/image.hh index 9757270..62f8699 100644 --- a/src/moof/image.hh +++ b/src/moof/image.hh @@ -1,13 +1,11 @@ -/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +/*] Copyright (c) 2009-2011, 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_IMAGE_HH_ #define _MOOF_IMAGE_HH_ @@ -17,58 +15,113 @@ * Defines classes for loading and manipulating images. */ -#include +#include -#include +#include +#include #include namespace moof { -class image; -typedef boost::shared_ptr image_ptr; - -class image : public resource +class image : public boost::noncopyable { public: - static image_ptr alloc(const std::string& name) + static const int no_tile = -1; + + explicit image(const std::string& path); + ~image(); + + int width() const { - return image_ptr(new image(name)); + return width_; } - explicit image(const std::string& name); - - bool is_valid() const; + int height() const + { + return height_; + } - int width() const; - int height() const; + int depth() const + { + return depth_; + } - unsigned depth() const; - unsigned pitch() const; - GLuint mode() const; + int pitch() const + { + return pitch_; + } - std::string comment() const; + int channels() const + { + return channels_; + } - const char* pixels() const; - char* pixels(); + std::string comment() const + { + return comment_; + } - void flip(); + const char* pixels() const + { + return pixels_; + } void set_as_icon() const; - static bool find_path(std::string& name); - + /** + * Calculate texture coordinates for a tile at a certain index. Tiles + * are indexed start with zero as the top-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; + + void bind() const; + static void reset_binding(); private: - static FILE* open_file(std::string& name); + void upload_to_gl() const; + void unload_from_gl() const; + void context_recreated(); + void set_properties() const; + void set_texture_info(const std::string& info); - class impl; - boost::shared_ptr impl_; + char* pixels_; + + mutable unsigned object_; + static unsigned global_object_; + + int width_; + int height_; + int depth_; + int pitch_; + int channels_; + + std::string comment_; + + unsigned min_filter_; + unsigned mag_filter_; + int tile_s_; + int tile_t_; + unsigned wrap_s_; + unsigned wrap_t_; + + //mutable dispatcher::handle new_context_; }; +typedef resource_handle image_handle; + } // namespace moof