GPU每一帧可以绘制的像素有一个最大限制(就是所谓的fill rate),这个情况下可以轻易地绘制整个屏幕的所有像素。但是如果由于重叠图层的关系需要不停地重绘同一区域的话,掉帧就可能发生了。
GPU会放弃绘制那些完全被其他图层遮挡的像素,但是要计算出一个图层是否被遮挡也是相当复杂并且会消耗处理器资源。同样,合并不同图层的透明重叠像素(即混合)消耗的资源也是相当客观的。所以为了加速处理进程,不到必须时刻不要使用透明图层。
任何情况下,你应该这样做:
这样做减少了混合行为(因为编译器知道在图层之后的东西都不会对最终的像素颜色产生影响)并且计算得到了加速,避免了过度绘制行为因为Core Animation可以舍弃所有被完全遮盖住的图层,而不用每个像素都去计算一遍。
如果用到了图像,尽量避免透明除非非常必要。如果图像要显示在一个固定的背景颜色或是固定的背景图之前,你没必要相对前景移动,你只需要预填充背景图片就可以避免运行时混色了。
如果是文本的话,一个白色背景的UILabel(或者其他颜色)会比透明背景要更高效。
最后,明智地使用shouldRasterize属性,可以将一个固定的图层体系折叠成单张图片,这样就不需要每一帧重新合成了,也就不会有因为子图层之间的混合和过度绘制的性能问题了。
-
gpu
+关注
关注
28文章
4795浏览量
129506 -
Core
+关注
关注
0文章
175浏览量
43040 -
编译器
+关注
关注
1文章
1642浏览量
49338
原文标题: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)
评论