中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

opengl 渲染方式在屏 離屏 CPU

發布時間:2020-06-27 20:35:02 來源:網絡 閱讀:1048 作者:WZM3558862 欄目:開發技術

一、概念理解

OpenGL中,GPU屏幕渲染有以下兩種方式:

  • On-Screen Rendering

意為當前屏幕渲染,指的是GPU的渲染操作是在當前用于顯示的屏幕緩沖區中進行。

  • Off-Screen Rendering

意為離屏渲染,指的是GPU在當前屏幕緩沖區以外新開辟一個緩沖區進行渲染操作。

二、離屏渲染的是是非非

相比于當前屏幕渲染,離屏渲染的代價是很高的,主要體現在兩個方面:

  • 創建新緩沖區

要想進行離屏渲染,首先要創建一個新的緩沖區。

  • 上下文切換

離屏渲染的整個過程,需要多次切換上下文環境:先是從當前屏幕(On-Screen)切換到離屏(Off-Screen);等到離屏渲染結束以后,將離屏緩沖區的渲染結果顯示到屏幕上有需要將上下文環境從離屏切換到當前屏幕。而上下文環境的切換是要付出很大代價的。

三、離屏渲染觸發方式

設置了以下屬性時,都會觸發離屏繪制:

  • shouldRasterize(光柵化)

  • masks(遮罩)

  • shadows(陰影)

  • edge antialiasing(抗鋸齒)

  • group opacity(不透明)

需要注意的是,如果shouldRasterize被設置成YES,在觸發離屏繪制的同時,會將光柵化后的內容緩存起來,如果對應的layer及其sublayers沒有發生改變,在下一幀的時候可以直接復用。這將在很大程度上提升渲染性能。

而其它屬性如果是開啟的,就不會有緩存,離屏繪制會在每一幀都發生。

四、另一種特殊的“離屏渲染”

按照之前的說法,如果將不在GPU的當前屏幕緩沖區中進行的渲染都稱為離屏渲染,那么就還有另一種特殊的“離屏渲染”方式: CPU渲染 。

如果我們重寫了drawRect方法,并且使用任何Core Graphics的技術進行了繪制操作,就涉及到了CPU渲染。整個渲染過程由CPU在App內 同步地 完成,渲染得到的bitmap最后再交由GPU用于顯示。

五、Instruments

Instruments的Core Animation工具中有幾個和離屏渲染相關的檢查選項:

  • Color Offscreen-Rendered Yellow

開啟后會把那些需要離屏渲染的圖層高亮成×××,這就意味著×××圖層可能存在性能問題。

  • Color Hits Green and Misses Red

如果shouldRasterize被設置成YES,對應的渲染結果會被緩存,如果圖層是綠色,就表示這些緩存被復用;如果是紅色就表示緩存會被重復創建,這就表示該處存在性能問題了。

六、如何抉擇

現在擺在我們面前得有三個選擇:當前屏幕渲染、離屏渲染、CPU渲染,該用哪個呢?這需要根據具體的使用場景來決定。

  • 盡量使用當前屏幕渲染

鑒于離屏渲染、CPU渲染可能帶來的性能問題,一般情況下,我們要盡量使用當前屏幕渲染。

  • 離屏渲染 VS CPU渲染

由于GPU的浮點運算能力比CPU強,CPU渲染的效率可能不如離屏渲染;但如果僅僅是實現一個簡單的效果,直接使用CPU渲染的效率又可能比離屏渲染好,畢竟離屏渲染要涉及到緩沖區創建和上下文切換等耗時操作。

總之,具體的選擇應該由性能測試結果來決定。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 兴和县| 会东县| 冷水江市| 乐安县| 桃源县| 舒城县| 闻喜县| 莫力| 建水县| 扎赉特旗| 和政县| 四子王旗| 称多县| 深州市| 北海市| 西丰县| 东兰县| 富源县| 体育| 平陆县| 新野县| 易门县| 新源县| 托克逊县| 长治市| 通榆县| 昌都县| 五原县| 高雄市| 张掖市| 岗巴县| 洞头县| 苏尼特右旗| 新津县| 淮阳县| 镇江市| 子长县| 武隆县| 信丰县| 呼图壁县|