123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- #ifndef __CCTEXTURE_CACHE_H__
- #define __CCTEXTURE_CACHE_H__
- #include <mutex>
- #include <thread>
- #include <condition_variable>
- #include <queue>
- #include <string>
- #include <unordered_map>
- #include <functional>
- #include "base/CCRef.h"
- #include "renderer/CCTexture2D.h"
- #include "platform/CCImage.h"
- #if CC_ENABLE_CACHE_TEXTURE_DATA
- #include <list>
- #endif
- NS_CC_BEGIN
- class CC_DLL TextureCache : public Ref
- {
- public:
-
- CC_DEPRECATED_ATTRIBUTE static TextureCache * getInstance();
-
- CC_DEPRECATED_ATTRIBUTE static TextureCache * sharedTextureCache();
-
- CC_DEPRECATED_ATTRIBUTE static void destroyInstance();
-
- CC_DEPRECATED_ATTRIBUTE static void purgeSharedTextureCache();
-
- CC_DEPRECATED_ATTRIBUTE static void reloadAllTextures();
-
- static void setETC1AlphaFileSuffix(const std::string& suffix);
- static std::string getETC1AlphaFileSuffix();
- public:
-
- TextureCache();
-
- virtual ~TextureCache();
-
- virtual std::string getDescription() const;
-
-
- Texture2D* addImage(const std::string &filepath);
-
- virtual void addImageAsync(const std::string &filepath, const std::function<void(Texture2D*)>& callback);
-
- void addImageAsync(const std::string &path, const std::function<void(Texture2D*)>& callback, const std::string& callbackKey );
-
- virtual void unbindImageAsync(const std::string &filename);
-
-
- virtual void unbindAllImageAsync();
-
- Texture2D* addImage(Image *image, const std::string &key);
- CC_DEPRECATED_ATTRIBUTE Texture2D* addUIImage(Image *image, const std::string& key) { return addImage(image,key); }
-
- Texture2D* getTextureForKey(const std::string& key) const;
- CC_DEPRECATED_ATTRIBUTE Texture2D* textureForKey(const std::string& key) const { return getTextureForKey(key); }
-
- bool reloadTexture(const std::string& fileName);
-
- void removeAllTextures();
-
- void removeUnusedTextures();
-
- void removeTexture(Texture2D* texture);
-
- void removeTextureForKey(const std::string &key);
-
- std::string getCachedTextureInfo() const;
-
-
- void waitForQuit();
-
- std::string getTextureFilePath(Texture2D* texture) const;
-
- void renameTextureWithKey(const std::string& srcName, const std::string& dstName);
- private:
- void addImageAsyncCallBack(float dt);
- void loadImage();
- void parseNinePatchImage(Image* image, Texture2D* texture, const std::string& path);
- public:
- protected:
- struct AsyncStruct;
-
- std::thread* _loadingThread;
- std::deque<AsyncStruct*> _asyncStructQueue;
- std::deque<AsyncStruct*> _requestQueue;
- std::deque<AsyncStruct*> _responseQueue;
- std::mutex _requestMutex;
- std::mutex _responseMutex;
-
- std::condition_variable _sleepCondition;
- bool _needQuit;
- int _asyncRefCount;
- std::unordered_map<std::string, Texture2D*> _textures;
- static std::string s_etc1AlphaFileSuffix;
- };
- #if CC_ENABLE_CACHE_TEXTURE_DATA
- class VolatileTexture
- {
- typedef enum {
- kInvalid = 0,
- kImageFile,
- kImageData,
- kString,
- kImage,
- }ccCachedImageType;
- private:
- VolatileTexture(Texture2D *t);
-
- ~VolatileTexture();
- protected:
- friend class VolatileTextureMgr;
- Texture2D *_texture;
-
- Image *_uiImage;
- ccCachedImageType _cashedImageType;
- void *_textureData;
- int _dataLen;
- Size _textureSize;
- Texture2D::PixelFormat _pixelFormat;
- std::string _fileName;
- bool _hasMipmaps;
- Texture2D::TexParams _texParams;
- std::string _text;
- FontDefinition _fontDefinition;
- };
- class CC_DLL VolatileTextureMgr
- {
- public:
- static void addImageTexture(Texture2D *tt, const std::string& imageFileName);
- static void addStringTexture(Texture2D *tt, const char* text, const FontDefinition& fontDefinition);
- static void addDataTexture(Texture2D *tt, void* data, int dataLen, Texture2D::PixelFormat pixelFormat, const Size& contentSize);
- static void addImage(Texture2D *tt, Image *image);
- static void setHasMipmaps(Texture2D *t, bool hasMipmaps);
- static void setTexParameters(Texture2D *t, const Texture2D::TexParams &texParams);
- static void removeTexture(Texture2D *t);
- static void reloadAllTextures();
- public:
- static std::list<VolatileTexture*> _textures;
- static bool _isReloading;
- private:
-
-
- static VolatileTexture* findVolotileTexture(Texture2D *tt);
- static void reloadTexture(Texture2D* texture, const std::string& filename, Texture2D::PixelFormat pixelFormat);
- };
- #endif
- NS_CC_END
- #endif
|