关于事件的优化:

遍历注册的事件由foreach改变为fori,在大量数据遍历时会有提升;

事件池优化:

所有的事件都使用一个对象池进行保存,而不是使用到时进行创建,使用EventDispatcher类的dispatchEventWith方法可以使用事件池,使用事件池在大量使用事件的情况下可以极大的提升运行效率,因为FlashPlayer不需要对大量的事件对象进行垃圾回收了。

该特性在Starling1.2中添加,我们的山寨版本就不添加这个功能了,有兴趣的童鞋可以自行查看。

关于算法的优化:

  1. 在多个方法中尽量不创建新的对象,如VertexData的getPosition方法由内部创建Vector3D对象返回更改为Vector3D对象作为参数传入修改,不返回新对象来处理。
  2. 某些方法中需要使用到临时变量来帮助运算,这个临时变量可以作为一个静态变量保存来重复利用,如VertexData的sPositions和sHelperPoint静态变量。
  3. 矩阵转换之前会判断是否需要进行转换,参考RenderSupport的transformMatrixForObject方法;
  4. 矩阵栈(mMatrixStack)使用一个当前的索引(mMatrixStackSize)记录当前使用的矩阵,栈中的矩阵都进行缓存,以供下一次循环中使用,不重新创建新的对象减小GC的压力提高运行效率;
  5. 矩阵运算上的优化,在Starling1.2的版本之后,RenderSupport里的矩阵运算都改为了二维矩阵,在使用时通过MatrixUtil类转换为三维矩阵使用,可以加快运算速度,我们的山寨版就不添加该功能了;

混合模式:

下面的解释来自于Starling中文站:

一个混合模式,总是被两个"Context3DBlendFactor"值来定义。一个混合因素代表一个特定的四个数值的数组, 这个数组是根据源和目标颜色用混合公式计算的。这个公式是:

result = source × sourceFactor + destination × destinationFactor

在这个公式里面,源颜色是像素着色器的输出颜色。目标颜色是在上一次清理和绘制操作之后,颜色缓冲区中的目前存在的颜色。

要注意的是,由于不同的纹理类型,混合因素会产生不同的输出。纹理可能包含'预乘透明度'(PMA), 意思就是他们的RGB色值是根据他们的颜色值分别相乘而得到的(以节省计算时间)。基于'BitmapData'的纹理,会拥有预乘透明度值,还有ATF纹理也有这个值。 基于这个原因,一个混合模式可能根据PMA值拥有不同的因素。

混合模式的好文链接:

Starling 混合模式

HTML5 2D游戏引擎研发系列 第六章

WEBGL 2D游戏引擎研发系列 第七章

在线混合模式查看工具:

http://www.andersriggelsen.dk/glblendfunc.php

混合模式的搭配可以查看BlendMode类的sBlendFactors静态变量。

混合模式即使用一个特定的公式,计算源颜色(像素着色器的输出颜色)和目标颜色(目标颜色是在上一次清理和绘制操作之后,颜色缓冲区中的目前存在的颜色),得到的结果作为最终显示的颜色。

混合模式需要考虑颜色值是否预乘了透明度,预乘透明度的意思就是他们的RGB色值是根据他们的颜色值分别相乘而得到的(据说是为了节省计算时间)。而BitmapData是预乘了透明度的,当然我们只需要关心是否预乘了透明度的混合模式的技术公式即可。

【Stage3D学习笔记续】山寨Starling(七):一般优化方法简介及混合模式的更多相关文章

  1. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现

    批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...

  2. 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西

    我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...

  3. 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系

    我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...

  4. 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽

    还记得之前的学习笔记中我们的顶点缓冲数组中的顶点数据么,我们使用一个一维数组来记录所有的顶点数据,这是由于顶点缓冲上传数据时是使用的一维数组. 如果对顶点数据进行一层代码的封装,就能更加的方便我们来操 ...

  5. 【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法

    Stage3D在运行中是存在随时会丢失上下文的尴尬情况. 渲染内容丢失的问题本身就说明是因为丢失了Context3D对象.出现此问题的原因很多,通常还不是因为Stage3D应用.比如在win7系统中, ...

  6. 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵

    如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...

  7. 【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形

    前面几个星期抽空用Starling做了一个打飞机的小游戏(所以没有接着看书了),准备面试时用的,结果面试还是没过%>_<%...这个游戏打算过几天全部开源了 那么接下来打算这周把<S ...

  8. 【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序

    本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看. 点击下载:https://codeload.github.com/hammerc/hammerc-study-St ...

  9. 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程

    这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...

随机推荐

  1. POJ1328——Radar Installation

    Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side ...

  2. 压力测试的轻量级具体做法 Apache ab

    http://www.cnblogs.com/luminji/archive/2011/09/02/2163525.html

  3. I2C I2S SPDIF

    I2C总线 大多数是用于电视机等家用电器的(显卡与显示器之间的通讯也是)I2S: I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输 ...

  4. 微软嵌入式WEC2013产品研讨会(深圳站---2013.10.16)

    主要内容如下: 1.      Windows Embedded Compact 2013面向的市场 主要面向工业自动化.医疗设备和零售行业这些市场,和物联网关系非常紧密. 2.      Windo ...

  5. default parameter value for ‘color’ must be a compile-time constant

    定义了一个函数,函数有一个参数是Color类型的可选参数,想要设置其默认值为Color.Black http://stackoverflow.com/questions/2804395/c-sharp ...

  6. Css3 Media Queries移动页面的样式和图片的适配问题(转)

    CSS3 Media Queries 摘自:http://www.w3cplus.com/content/css3-media-queries Media Queries直译过来就是“媒体查询”,在我 ...

  7. 我的WCF之旅(3):在WCF中实现双工通信

    双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...

  8. jQuery修改操作css属性实现方法

    在jquery中我们要动态的修改css属性我们只要使用css()方法就可以实现了,下面我来给各位同学详细介绍介绍. css()方法在使用上具有多样性,我们先来了解css()方法基本知识. css() ...

  9. 再见WCF

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  10. SqlSugar轻量ORM

      蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...