/* * cocos2d for iPhone: http://www.cocos2d-iphone.org * * Copyright (c) 2008-2010 Ricardo Quesada * Copyright (c) 2011 Zynga Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ #import #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED #import #endif #import @class CCTexture2D; /** Singleton that handles the loading of textures * Once the texture is loaded, the next time it will return * a reference of the previously loaded texture reducing GPU & CPU memory */ @interface CCTextureCache : NSObject { NSMutableDictionary *textures_; NSLock *dictLock_; NSLock *contextLock_; } /** Retruns ths shared instance of the cache */ + (CCTextureCache *) sharedTextureCache; /** purges the cache. It releases the retained instance. @since v0.99.0 */ +(void)purgeSharedTextureCache; /** Returns a Texture2D object given an file image * If the file image was not previously loaded, it will create a new CCTexture2D * object and it will return it. It will use the filename as a key. * Otherwise it will return a reference of a previosly loaded image. * Supported image extensions: .png, .bmp, .tiff, .jpeg, .pvr, .gif */ -(CCTexture2D*) addImage: (NSString*) fileimage; /** Returns a Texture2D object given a file image * If the file image was not previously loaded, it will create a new CCTexture2D object and it will return it. * Otherwise it will load a texture in a new thread, and when the image is loaded, the callback will be called with the Texture2D as a parameter. * The callback will be called from the main thread, so it is safe to create any cocos2d object from the callback. * Supported image extensions: .png, .bmp, .tiff, .jpeg, .pvr, .gif * @since v0.8 */ -(void) addImageAsync:(NSString*) filename target:(id)target selector:(SEL)selector; /** Returns a Texture2D object given an CGImageRef image * If the image was not previously loaded, it will create a new CCTexture2D object and it will return it. * Otherwise it will return a reference of a previously loaded image * The "key" parameter will be used as the "key" for the cache. * If "key" is nil, then a new texture will be created each time. * @since v0.8 */ -(CCTexture2D*) addCGImage: (CGImageRef) image forKey: (NSString *)key; /** Returns an already created texture. Returns nil if the texture doesn't exist. @since v0.99.5 */ -(CCTexture2D *) textureForKey:(NSString *)key; /** Purges the dictionary of loaded textures. * Call this method if you receive the "Memory Warning" * In the short term: it will free some resources preventing your app from being killed * In the medium term: it will allocate more resources * In the long term: it will be the same */ -(void) removeAllTextures; /** Removes unused textures * Textures that have a retain count of 1 will be deleted * It is convinient to call this method after when starting a new Scene * @since v0.8 */ -(void) removeUnusedTextures; /** Deletes a texture from the cache given a texture */ -(void) removeTexture: (CCTexture2D*) tex; /** Deletes a texture from the cache given a its key name @since v0.99.4 */ -(void) removeTextureForKey: (NSString*) textureKeyName; @end @interface CCTextureCache (PVRSupport) /** Returns a Texture2D object given an PVRTC RAW filename * If the file image was not previously loaded, it will create a new CCTexture2D * object and it will return it. Otherwise it will return a reference of a previosly loaded image * * It can only load square images: width == height, and it must be a power of 2 (128,256,512...) * bpp can only be 2 or 4. 2 means more compression but lower quality. * hasAlpha: whether or not the image contains alpha channel * * IMPORTANT: This method is only defined on iOS. It is not supported on the Mac version. */ #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED -(CCTexture2D*) addPVRTCImage:(NSString*)fileimage bpp:(int)bpp hasAlpha:(BOOL)alpha width:(int)w; #endif // __IPHONE_OS_VERSION_MAX_ALLOWED /** Returns a Texture2D object given an PVR filename. * If the file image was not previously loaded, it will create a new CCTexture2D * object and it will return it. Otherwise it will return a reference of a previosly loaded image * */ -(CCTexture2D*) addPVRImage:(NSString*) filename; @end @interface CCTextureCache (Debug) /** Output to CCLOG the current contents of this CCTextureCache * This will attempt to calculate the size of each texture, and the total texture memory in use * * @since v1.0 */ -(void) dumpCachedTextureInfo; @end