关于事件的优化:

遍历注册的事件由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. RGB颜色查询对照表

    RGB颜色查询对照表     RGB颜色对照表   #FFFFFF2015-02-05   #FFFFF0   #FFFFE0   #FFFF00   #FFFAFA   #FFFAF0   #FFF ...

  2. P90、面试题11:数值的整数次方

    题目:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 需要注意的地方: 1)输入的指 ...

  3. JAVA-----乱码的处理 乱码的解决方法总结

    为什么说乱码是程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!工作遇到各种各样的乱码的解决方法总结一下. 对于Java由于默认的编码方式是 ...

  4. C#中的Marshal

    Const.MaxLengthOfBufferd的长度固定为0x2000   也就是8192 private bool SendMessage(int messageType, string ip, ...

  5. Spring个人总结

    编写Spring第一个程序 Spring是一种开源框架,通过使用它可以大大降低企业应用程序的复杂性.Spring是一种非常完善的框架,几乎涉及WEB开发中的每一层,但是在开发中通常使用Spring开发 ...

  6. jQgrid问题总结

    最近一段时间一直在使用jqgrid这个免费的插件,网上的资料也比较多.比较全,但是这里还是整理几个自己在开发过程中遇到的小问题. 1.自动换行 一行数据过多需要自动根据内容换行时,如果遇到在表格中的汉 ...

  7. 十个免费的Web压力测试工具

    两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...

  8. 思考之spring的ioc

    控制反转 英语:Inversion of control,缩写为IoC 我想很多同学都会思考过这样的一个问题,控制反转,什么地方反转了,是不是翻译的不对? 这里插一句 当年马云借着盖茨的嘴说:“互联网 ...

  9. jquery 上传空间uploadify使用笔记

    基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个 ...

  10. VS2008编写MFC程序--使用opencv2.4()

    开始记录VS2008环境下学习OPENCV2.4 头文件: #pragma once #include "CvvImage.h" #include "opencv/cv. ...