00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef neo_image_codec_h
00022 #define neo_image_codec_h
00023
00027 #include "../core/platform.h"
00028 #include "../core/array.h"
00029 #include "../core/singleton.h"
00030
00031 #if NEO_ENABLE_IMAGE
00032
00033 namespace neo {
00034 namespace file { class IStream; class OStream; }
00035 namespace render { class TextureGenerator; }
00036 namespace image {
00037
00038 class Image;
00039
00063 class Codec
00064 {
00065 public:
00066
00068 inline virtual ~Codec();
00069
00071
00076 virtual Image* load( neo::file::IStream* p_stream ) const = 0;
00077
00079
00083 virtual void save( neo::file::OStream* p_stream, const Image& image ) const = 0;
00084
00086
00090 inline const core::Array< std::string >& getExtensions() const;
00091
00092 protected:
00093
00095 core::Array< std::string > _extensions;
00096 };
00097
00105 class CodecManager : public core::Singleton< CodecManager >
00106 {
00107 public:
00108
00110
00113 void insertCodec( Codec* p_codec );
00114
00116
00120 void removeCodec( Codec* p_codec );
00121
00123
00127 const Codec* getCodec( const std::string& ext ) const;
00128
00130
00132 inline const core::Array< Codec* >& getCodecs() const;
00133
00134 private:
00135
00137 core::Array< Codec* > _codecs;
00138
00140
00141 CodecManager();
00142
00144
00145 virtual ~CodecManager();
00146
00147 friend class core::Singleton< CodecManager >;
00148 };
00149
00150 #include "codec.inl"
00151
00152 }
00153 }
00154
00155 #endif
00156
00157 #endif