cocos2dx 關於渲染的學習

2021-10-01 11:28:38 字數 1166 閱讀 7276

exe執行起來的時候,在左下角會有三個引數,glcall指的是當前場景的渲染批次(即渲染次數),這個次數越多,介面會越卡。據前輩說:一般超過130,介面會變的開始卡頓。當時寫介面的時候,這個值達到了250,介面重新整理的時候會明顯的頓一下,所以學習了下關於cocos2dx渲染的機制,從而降到了120,下面講一下關於對渲染機制的理解。

cocos2dx 的分批次渲染機制,可以理解為:準備-渲染-渲染-渲染-……-清除,可以理解為是乙個畫筆,準備階段包括,調色,著色等等多個階段(這邊沒有深入學習過),然後渲染階段就是「畫筆」畫出介面的過程,清除就是把「畫筆」清色。

只有在同一紋理,同一著色器,同一混合函式,這三個全部滿足的情況下才不會打斷乙個渲染批次。

對於上述的三種情況,還沒有進行深入的研究。簡單的理解為同一圖集,同種顏色。如果渲染n個node,node所用的圖全部**於同一圖集,或者node的顏色都為同一種顏色,則可以由1次渲染全部完成,否則則需要多個批次,批次和批次之間 就會存在清除和重新準備的階段,所以批次越多,渲染所花費的時間就越長。

專案中的問題為,介面存在40個節點(假設),每個節點包含3個子節點(1個img,2個text)。n個節點的背景都在a圖集中,所有子節點img的都在b圖集中,子節點text分為兩種顏色,如果

for allnode do

渲染背景,

建立img子節點,渲染子節點,

建立顏色1字型,渲染,

建立顏色2字型,渲染

end如上面偽**所示,乙個節點乙個節點渲染過來,先渲染節點的背景,此時打斷批次,渲染子節點img,又是乙個渲染批次,接著渲染顏色1字型,又打斷,渲染顏色2字型,這樣對於1個節點渲染批次就變成了4次,40個則為 40*4 = 160。

如果for allnode do

渲染背景

endfor allnode do

建立img節點,渲染

endfor allnode do

建立顏色1字型,渲染

endfor allnode do

建立顏色2字型,渲染

end如上面偽**所示,先用乙個迴圈,先把所有節點的背景渲染完,再用乙個迴圈,把所有子節點img的渲染完,再用乙個迴圈,把顏色1的text渲染完,再用乙個迴圈,把顏色2的text渲染完,則渲染批次次數為4次,修改渲染順序後,渲染的效率得到了很大的提高。

以上為對於cocos2dx渲染批次的理解,歡迎其他大佬一起交流學習。

cocos2dx渲染流程

二 mainloop drawscene當中統計deltatime,再呼叫排程管理器update,opengl clearbuffer,設定渲染檢視矩陣,投影矩陣和紋理,呼叫當前場景visit 遞迴呼叫子節點 呼叫opengl渲染 前後臺緩衝區交換 呼叫統計函式,呼叫自動釋放池的pop。三 ccme...

Cocos2d x 文字渲染

文字渲染 cclabelatlas cclabelbmfont cclabelttf類都是繼承 cclabelprotocol類,即能夠使用系統字,也能夠自己定義渲染字型。cclabelatlas類使用作為文字的一種方式,通過直接定義 cclabelatlas label0 cclabelatlas...

cocos2dX 文字的渲染

1 建立一段文字 create函式的三個引數分別為 文字內容 字型和字型大小 cclabelttf font cclabelttf create hello world 微軟雅黑 48 2 獲取文字的尺寸 font getcontentsize 返回的是乙個ccsize型別的值 該值有兩個屬性wid...