通過減少GL CALLS 來優化渲染效能

2021-09-08 12:16:36 字數 819 閱讀 8484

gl verts 表示給顯示卡繪製的頂點數 

gl calls 表示代表每一幀中opengl指令的呼叫次數 

其中「gl calls」代表每一幀中opengl指令的呼叫次數,這個數字越小,程式的繪製效能就越好。

cocos中渲染流程是這樣的:

(1)drawscene開始繪製場景

(2)遍歷場景的子節點,呼叫visit函式,遞迴遍歷子節點的子節點

(3)對每乙個子節點呼叫draw函式

(4)初始化quadcommand物件,這就是渲染命令,會丟到渲染佇列裡

(5)丟完quadcommand就完事了,接著就交給渲染邏輯處理了。

(7)渲染邏輯遍歷渲染命令佇列,這時候會有乙個變數,用來儲存渲染命令裡的材質id,遍歷過程中就拿當前渲染命令的材質id和上乙個的材質id對比,如果發現是一樣的,那就不進行渲染,儲存一下所需的資訊,繼續下乙個遍歷。好,如果這時候發現當前材質id和上乙個材質id不一樣,那就開始渲染,這就算是乙個渲染批次了。

按照上面的邏輯,分成以下兩種方式處理:

二:在面對plist型別的時,plist合圖實際上算是乙個材質,比如 lin.png 合圖里有 lin_test1.png ,lin_test2.png...

所以在我需要建立 lin_test1.png ,lin_test2.png...等的時候,並不需要將其分類處理,整個渲染過程其實只做了一次gl call。

綜上,如果是需要連續多種大量建立的物件,將其放到乙個plist合圖里處理能非常有效的降低gl call次數

使用委託來減少if else判斷

上述 根據傳進來的語言列舉值和名字串來輸出相應語言的問候語,不過,這個方法的可擴充套件性太差了,如果以後我們需要再新增韓文版,日文版,就不得不反覆修改列舉和dowork 方法,以適應新的需求。使用委託可以解決優化此類問題。using system using system.collections.g...

使用委託來減少if else判斷

using system using system.collections.generic using system.linq using system.text namespace 13 public void sayenglish string name public enum language...

調優(二) 減少if語句的使用

程式中減少if語句的使用 注 if語句通常會讓 更加負載,但這不代表要完全拋棄if語句 1 if語句的問題 a.通常出現if語句的 很容易越改越糟 b.複製時會有問題,即if語句缺失domain的概念 c.開發者必須在頭腦中模擬執行實際情況,造成腦細胞浪費 2 替代if語句的方案 1 布林引數 bo...