/*] 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_IMAGE_HH_ #define _MOOF_IMAGE_HH_ /** * \file image.hh * Defines classes for loading and manipulating images. */ #include #include #include #include namespace moof { class image : public boost::noncopyable { public: static const int no_tile = -1; explicit image(const std::string& path); ~image(); int width() const { return width_; } int height() const { return height_; } int depth() const { return depth_; } int pitch() const { return pitch_; } int channels() const { return channels_; } std::string comment() const { return comment_; } const char* pixels() const { return pixels_; } void set_as_icon() const; /** * 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: 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); 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_; unsigned wrap_s_; unsigned wrap_t_; int tile_width_; int tile_height_; //mutable dispatcher::handle new_context_; }; typedef resource_handle image_handle; } // namespace moof #endif // _MOOF_IMAGE_HH_