as3 vertexBuffer 渲染效率

2021-07-25 15:24:24 字數 743 閱讀 1531

最近在優化專案效能,偶然發現乙個有關效率的問題:

同一幀中:

對於某個vertexbuffer3d,如果已經渲染完畢,再對vertexbuffer3d呼叫uploadfromvector,耗時會特別長;

所以,同一幀中,在對某個vertexbuffer3d渲染之前,一定要先把該buffer相關的upload全都呼叫完畢。

case:

專案優化之前的情況是:

地圖和角色合用了乙個vertexbuffer,然後渲染如下:

//map

vertexbuffer.uploadfromvector...

vertexbuffer.draw.....

//entity

vertexbuffer.uploadfromvector...

vertexbuffer.draw.....

專案優化之後的情況是把地圖和角色的upload放在一起,然後draw放在一起:

//map & entity

vertexbuffer.uploadfromvector...

vertexbuffer.draw.....

結果發現每幀時間平均縮短了8-10ms,這也是乙個驚嚇啊!!!

對於這種情況作了種種猜測,並進行測試,後來發現比較好的做法是,對於同乙個vertebuffer,在同一幀中,最好是先把所有的upload都執行完畢,再draw。

至於原因:不得而知,還望各位前輩和同道不吝賜教

關於 0x3f3f3f3f 的問題

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...

0x3f3f3f3f(無窮大數)

一般定義無窮大數都是inf 99999999,或者0x7f ff ff ff,但是有的時候inf過大,雖然保證了沒有數超過它,但是在需要加上乙個數的時候,inf a可能會導致溢位,最終變成乙個負數。而0x3f3f3f3f的數量級也1e9的,一般題不會給超過1e9的數 在把它當成無窮大的時候,兩個0x...

Python3物件導向 3 異常(3)異常作用

當丟擲異常時,看起來好像立即停止了程式的執行。丟擲異常之後的所有 都不會執行,除非處理了這一異常,程式將會退出並給出錯誤資訊。def no return print i am about to raise an exception raise exception this is always rai...