GPU每一幀可以繪制的像素有一個最大限制(就是所謂的fill rate),這個情況下可以輕易地繪制整個屏幕的所有像素。但是如果由于重疊圖層的關系需要不停地重繪同一區域的話,掉幀就可能發生了。
GPU會放棄繪制那些完全被其他圖層遮擋的像素,但是要計算出一個圖層是否被遮擋也是相當復雜并且會消耗處理器資源。同樣,合并不同圖層的透明重疊像素(即混合)消耗的資源也是相當客觀的。所以為了加速處理進程,不到必須時刻不要使用透明圖層。
任何情況下,你應該這樣做:
這樣做減少了混合行為(因為編譯器知道在圖層之后的東西都不會對最終的像素顏色產生影響)并且計算得到了加速,避免了過度繪制行為因為Core Animation可以舍棄所有被完全遮蓋住的圖層,而不用每個像素都去計算一遍。
如果用到了圖像,盡量避免透明除非非常必要。如果圖像要顯示在一個固定的背景顏色或是固定的背景圖之前,你沒必要相對前景移動,你只需要預填充背景圖片就可以避免運行時混色了。
如果是文本的話,一個白色背景的UILabel(或者其他顏色)會比透明背景要更高效。
最后,明智地使用shouldRasterize屬性,可以將一個固定的圖層體系折疊成單張圖片,這樣就不需要每一幀重新合成了,也就不會有因為子圖層之間的混合和過度繪制的性能問題了。
-
gpu
+關注
關注
28文章
4783瀏覽量
129379 -
Core
+關注
關注
0文章
175瀏覽量
43025 -
編譯器
+關注
關注
1文章
1642瀏覽量
49301
原文標題:GPU繪圖:如何應對混合和過度繪制?
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
HarmonyOS實戰開發-如何通過BlendMode屬性來實現掛件和圖片的混合
***如何根據底視圖繪制封裝庫
繪制PCB的3D視圖和其他的一些特殊需求
單個GPU上不支持混合配置文件嗎?
如何使用CAD來繪制軸測圖和三視圖?
MATLAB高級圖形繪制技術
MATLAB高級圖形繪制技術
基于GPU的點模型實時繪制
醫學層析圖像實時體繪制
OrCAD教程:如何添加footprint屬性 如何生成netlist
![OrCAD教程:如何添加footprint<b class='flag-5'>屬性</b> 如何生成netlist](https://file1.elecfans.com//web2/M00/A7/41/wKgZomUMQ1yAZgCDAAAc5GNvtAw854.jpg)
數據庫教程之索引和視圖的詳細資料概述免費下載
![數據庫教程之索引和<b class='flag-5'>視圖</b>的詳細資料<b class='flag-5'>概述</b>免費下載](https://file.elecfans.com/web1/M00/68/C7/pIYBAFvJSh6AMOhFAACk6PIwd6E141.png)
變精度下不完備混合數據如何進行增量式屬性約簡
![變精度下不完備<b class='flag-5'>混合</b>數據如何進行增量式<b class='flag-5'>屬性</b>約簡](https://file.elecfans.com/web1/M00/7D/53/o4YBAFwKMLGAImmeAAA37o--xZ0522.png)
評論