cocos2dx之CCTextureCache
首先是最底層也最有效的紋理快取CCTextureCache,這裡快取的是載入到記憶體中的紋理資源,也就是圖片資源。其原理是對加入快取的紋理資源進行一次引用,使其引用計數加一,保持不被清除,而Cocos2d-x的渲染機制是可以重複使用同一份紋理在不同的場合進行繪製,從而達到重複使用,降低記憶體和GPU運算資源的開銷的目的。常用的是如下所示的3個介面:
/** Retruns ths shared instance of the cache */
static CCTextureCache * sharedTextureCache();
/** 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(const char* fileimage);
/** 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();
在這3個介面中,CCTextureCache遮蔽了載入紋理的許多細節;addImage函式會返回一個紋理CCTexture2D的引用,可能是新載入到記憶體的,也可能是之前已經存在的;而removeUnusedTextures則會釋放當前所有引用計數為1的紋理,即目前沒有被使用的紋理。後面會看到,引用計數的記憶體管理方式為快取的設計帶來了很大的便利。
實際上,我們很少需要呼叫addImage這個介面,因為引擎內部所有的紋理載入都是通過這個快取進行的,換句話說,載入的每一張圖片都被快取了,所以我們更需要關心什麼時候清理快取。引擎會在裝置出現記憶體警告時自動清理快取,但是這顯然在很多情況下已經為時過晚了。一般情況下,我們應該在切換場景時清理快取中的無用紋理,因為不同場景間使用的紋理是不同的。如果確實存在著共享的紋理,將其加入一個標記陣列來保持其引用計數,以避免被清理了。
相關文章
- cocos2dx之CCSpriteFrameCache
- cocos2dx之Box2D
- cocos2dx之儲存截圖圖片
- cocos2dx之引入Sqlite3資料庫SQLite資料庫
- cocos2dx之CCUserDefault及其資料進行加密解密加密解密
- cocos2dx之獲取當前的輸入法語言
- CoCos2dx開發:中文亂碼
- cocos2dx 場景切換特效特效
- cocos2dx遮蔽列表的觸控
- cocos2dx 很好的原始碼分析博文原始碼
- Cocos2dx中精靈(CCSprite)、動畫建立動畫
- COCOs2dx中KEY_KP與KEY的區別
- cocos2dx update scheduleUpdate to update or schedule(schedule_selector(fun),dt)
- win10搭建cocos2dx開發環境怎麼安裝_win10搭建cocos2dx開發環境的步驟Win10開發環境
- android層java如何呼叫cocos2dx c++程式碼 步驟AndroidJavaC++
- CoCos2dx開發:更換匯出的app名稱和圖示APP
- CoCos2dx開發:tile地圖繪製和Tiled工具的基本使用地圖
- cocos2dx遊戲開發——微信打飛機學習筆記(九)——BulletLayer的搭建遊戲開發筆記
- CoCos2dx開發:PC端除錯執行正常但打包apk檔案後在手機上點選閃退除錯APK
- 漢字之美,拼音之韻
- PHP之string之ord()函式使用PHP函式
- 深入Spring之IOC之載入BeanDefinitionSpringBean
- JavaScript之thisJavaScript
- 若之
- 計算方法之祖沖之的精度
- Kubernetes安裝之八:配置master之schedulerAST
- vue 兄弟元件之間傳值之busVue元件
- 《碼農翻身》之浪潮之巔的WebWeb
- 揭秘ORACLE備份之----RMAN之五(CATALOG)Oracle
- React之元件(component)之間的通訊React元件
- PHP之string之str_split()函式使用PHP函式
- AI犯錯誰之過?切勿盲目相信之AI
- Java常用資料結構之Set之TreeSetJava資料結構
- PHP之string之str_pad()函式使用PHP函式
- flutter之從零開始搭建(一)之 BottomNavigationBarFlutterNavigation
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- 序列SRAM和FRAM之間的相似之處
- 計算機網路之HTTP之概況計算機網路HTTP