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.

     

  • 相关阅读:
    mapreduce参数记录
    find命令使用中记录
    运算符的优先级(从高到低)
    常用字符与ASCII代码对照表
    mysql在liunx上使用记录
    Java 流收集器 ( Stream Collectors )
    CDH 删除Agent节点(退役节点)
    学习记录CombineFileInputFormat类
    读取HBases的数据的三种常见用法
    hash算法学习
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/8028675.html
Copyright © 2011-2022 走看看