zoukankan      html  css  js  c++  java
  • 合并图片、EUI顺序、CacheAsBitmap对drawcall影响的测试

     

    一 什么是DrawCall

    Draw Call 理解和优化:

    http://blog.csdn.net/sakyaer/article/details/44459881

     

    draw call是openGL的描绘次数
    一个简单的openGL的绘图次序是:设置颜色→绘图方式→顶点座标→绘制→结束。 
    每帧都会重复以上的步骤。这就是一次draw call

    如果有两个model,那么需要 
    设置颜色→绘图方式→顶点座标A→绘制→结束。 
    设置颜色→绘图方式→顶点座标B→绘制→结束。 
    两次draw calls; 
    也就是说在openGl绘制前,如果色彩通道(color filter),绘图方式(shader),顶点座标(model)不同的情况下draw calls就会增加。

    对openGl来说绘制参数(状态值)的变更要比绘制大量的顶点更耗费cpu。

     

    二  Egret中减少DrawCall

    1  使用6张单张图片和1个Label,drawcall数是6图片+1文本=7。

     

     

    2 现在将6张图片合并成一张,drawcall数是1图片+1文本=2

     

     

     

     3 现在只将两个按钮合并

     

     drawcall数如下图,是10次。

     

     

    如果图"朋友圈"和"微信"是同一张图drawcall算1次,那么应该是9次才对,为什么是10次?

     因为当A和B是一张图,C是单张图。

    如果渲染顺序是 A->B->C 则drawcall是2

    但是渲染顺序A->C->B则drawcall是3

     

    三  Egret中减少drawcall的合图做法

    1 将同一场景或模块的图片合成一张,则可以大幅度减少drawcall数

    2 合图可以使用texturemerger,手动合并。

       也可以使用wing发布时的合并图选项,但是wing发布合图时根据资源组合并,所以你必须事先将同一场景或模块分好了资源组。 (测试wingIDE的合图有问题,不建议使用)

    四 EUI中的排列顺序对DrawCall的影响

    现在有ABCD四张图

    当在EUI中由上到下是ABCD时,drawcall是2

     

     当顺序是ACBD时,DrawCall是4

     

     

     总结:EUI的渲染次序是从上到下的,将同一图片放在相邻的顺序上,可以减少drawcall数。

    五、cacheAsBitmap缓存为位图对drawcall的影响

    drawcall由4变成了2

     

    总结:将静态图片放在一个group内,并使用cacheAsBitmap,可以减少drawcall

    其他:

    1. EUI的多个Group不增加drawcall。

    2. EUI的自定义组件,如果组件内图片是同一张,多个组件不增加drawcall。

    以下组件GruideHand,组件内使用的图片是一张图,则多个自定义组件在EUI内drawcall是1.

     

  • 相关阅读:
    博客园添加侧边栏小插件并更改css样式
    ubuntu14.04环境下利用docker搭建solrCloud集群
    使用Grunt 插件打包Electron Windows应用
    使用Squirrel创建基于Electron开发的Windows 应用安装包
    Electron实战:创建ELectron开发的window应用安装包
    6、创建-查看-复制-删除-文件和文件夹相关命令
    5、Linux 系统基本文件管理
    3、Linux 获取帮助的方法-关机命令-7个系统启动级别
    2 、Linux基本命令-ls-pwd-cd-date-hwclock
    1 、Linux-Rhel6终端介绍-Shell提示符
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/8028675.html
Copyright © 2011-2022 走看看