cocos js,記憶體管理3 檢視器

2021-07-14 10:48:49 字數 2397 閱讀 5393

紋理快取是將紋理快取起來方便之後的繪製工作。每乙個快取的影象的大小,顏色和區域範圍都是可以被修改的。這些資訊都是儲存在記憶體中的,不用在每一次繪製的時候都傳送給gpu。

首先,我們建立乙個精靈

sprite* sprite::create(const std::string& filename)

cc_safe_delete(sprite);

return nullptr;

}

然後,繼續深入,initwithfile的方法

bool sprite::initwithfile(const std::string& filename)

// don't release here.

// when load texture failed, it's better to get a "transparent" sprite then a crashed program

// this->release();

return false;

}

最後在texturecache 的 addimage方法裡,我們會先去集合裡查詢是否之前載入過,如果沒有找到,那麼我們就會新生成一張紋理,並且新增到集合裡。

ccspriteframecache單例是所有精靈幀的快取。使用spritesheet和與之相關的xml檔案,我們可以載入很多的精靈幀到快取中,那麼之後我們就可以從這個快取中建立精靈物件了。

在texturecache中有個getcachedtextureinfo的方法

這個方法可以輸出每一張紋理所占用的記憶體,但是log日誌輸出檢視的話,難免不夠直觀,檢視起來不太方便,所以這裡我就想到把所有的這些紋理封裝到乙個node裡,然後顯示在螢幕上。

node* texturecache::getcachedtexturenode() const

unsigned int bpp = tex->getbitsperpixelforformat();

// each texture takes up width * height * bytesperpixel bytes.

auto bytes = tex->getpixelswide() * tex->getpixelshigh() * bpp / 8;

totalbytes += bytes;

count++;

snprintf(buftmp,sizeof(buftmp)-1,"\"%s\" rc=%lu id=%lu %lu x %lu @ %ld bpp => %lu kb\n",

it->first.c_str(),

(long)tex->getreferencecount(),

(long)tex->getname(),

(long)tex->getpixelswide(),

(long)tex->getpixelshigh(),

(long)bpp,

(long)bytes / 1024);

buffer += buftmp;

}snprintf(buftmp, sizeof(buftmp)-1, "texturecache dumpdebuginfo: %ld textures, for %lu kb (%.2f mb)\n", (long)count, (long)totalbytes / 1024, totalbytes / (1024.0f*1024.0f));

buffer += buftmp;

return node;

}

接下來就是js的工作了,至於怎麼匯出c++介面到js中,這裡就不作介紹了,在js中我們建立了乙個叫memorylayer的類,專門用來負責顯示快取。

var memorylayer = cc.layercolor.extend(,

initview:function(),

closebtnlistener:function(_sender,_type)

},inittouchevent : function());

cc.eventmanager.addlistener(listener,this);

},ontouchbegan : function(touch,event),

ontouchmoved : function(touch,event)

node.setpositiony(node.getpositiony()+dis);

},ontouchended : function(touch,event),

})

最後以一張效果圖作為本期節目的結束:

記憶體檢視器

最近新到乙個公司上班,所做的專案與網路通訊有關,網路通訊,必然涉及到收發網路包,為了檢查我封裝的包的資料是否正確,為了便於與通訊方進行比對,我需要獲得最終收發包的二進位制資料。這個通常有以下實現方式 1 網路抓包,典型的做法是,根據通訊網路裝置的組網,在交換機建立port mirroring,把執行...

mysql事件檢視器 MYSQL事件檢視器使用介紹

要檢視當前是否已開啟事件排程器 show variables like event scheduler 開啟事件檢視器 set global event scheduler 1 建立事件 語法 create event if not exists event name on schedule sch...

檔案檢視器

上節課中學習了如何載入乙個網路,這節課接著上節課的 來寫乙個引導程式。首先,可以重用上節課中的載入的 新新增的東西就是,乙個button,乙個text文字標籤,乙個filedialog檔案對話方塊。具體 如下 import qtquick 2.2 import qtquick.window 2.1 ...