/*] Copyright (c) 2009-2011, Charles McGarvey [***************************** **] All rights reserved. * * 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_ #include #include #include #include /** * \file image.hh * Defines classes for loading and manipulating images. */ 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_; } 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 fix_uv(std::vector& p) const; void bind() const; static void reset_binding(); private: void postprocess(); void upload_to_gl() const; void unload_from_gl() const; void context_recreated(); void set_properties() const; char* pixels_; mutable unsigned object_; static unsigned global_object_; int width_; int height_; int depth_; int pitch_; int channels_; 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 #endif // _MOOF_IMAGE_HH_