【Stage3D学习笔记续】山寨Starling(七):一般优化方法简介及混合模式
关于事件的优化:
遍历注册的事件由foreach改变为fori,在大量数据遍历时会有提升;
事件池优化:
所有的事件都使用一个对象池进行保存,而不是使用到时进行创建,使用EventDispatcher类的dispatchEventWith方法可以使用事件池,使用事件池在大量使用事件的情况下可以极大的提升运行效率,因为FlashPlayer不需要对大量的事件对象进行垃圾回收了。
该特性在Starling1.2中添加,我们的山寨版本就不添加这个功能了,有兴趣的童鞋可以自行查看。
关于算法的优化:
- 在多个方法中尽量不创建新的对象,如VertexData的getPosition方法由内部创建Vector3D对象返回更改为Vector3D对象作为参数传入修改,不返回新对象来处理。
- 某些方法中需要使用到临时变量来帮助运算,这个临时变量可以作为一个静态变量保存来重复利用,如VertexData的sPositions和sHelperPoint静态变量。
- 矩阵转换之前会判断是否需要进行转换,参考RenderSupport的transformMatrixForObject方法;
- 矩阵栈(mMatrixStack)使用一个当前的索引(mMatrixStackSize)记录当前使用的矩阵,栈中的矩阵都进行缓存,以供下一次循环中使用,不重新创建新的对象减小GC的压力提高运行效率;
- 矩阵运算上的优化,在Starling1.2的版本之后,RenderSupport里的矩阵运算都改为了二维矩阵,在使用时通过MatrixUtil类转换为三维矩阵使用,可以加快运算速度,我们的山寨版就不添加该功能了;
混合模式:
下面的解释来自于Starling中文站:
一个混合模式,总是被两个"Context3DBlendFactor"值来定义。一个混合因素代表一个特定的四个数值的数组, 这个数组是根据源和目标颜色用混合公式计算的。这个公式是:
result = source × sourceFactor + destination × destinationFactor
在这个公式里面,源颜色是像素着色器的输出颜色。目标颜色是在上一次清理和绘制操作之后,颜色缓冲区中的目前存在的颜色。
要注意的是,由于不同的纹理类型,混合因素会产生不同的输出。纹理可能包含'预乘透明度'(PMA), 意思就是他们的RGB色值是根据他们的颜色值分别相乘而得到的(以节省计算时间)。基于'BitmapData'的纹理,会拥有预乘透明度值,还有ATF纹理也有这个值。 基于这个原因,一个混合模式可能根据PMA值拥有不同的因素。
混合模式的好文链接:
在线混合模式查看工具:
http://www.andersriggelsen.dk/glblendfunc.php
混合模式的搭配可以查看BlendMode类的sBlendFactors静态变量。
混合模式即使用一个特定的公式,计算源颜色(像素着色器的输出颜色)和目标颜色(目标颜色是在上一次清理和绘制操作之后,颜色缓冲区中的目前存在的颜色),得到的结果作为最终显示的颜色。
混合模式需要考虑颜色值是否预乘了透明度,预乘透明度的意思就是他们的RGB色值是根据他们的颜色值分别相乘而得到的(据说是为了节省计算时间)。而BitmapData是预乘了透明度的,当然我们只需要关心是否预乘了透明度的混合模式的技术公式即可。
【Stage3D学习笔记续】山寨Starling(七):一般优化方法简介及混合模式的更多相关文章
- 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现
批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...
- 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西
我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...
- 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系
我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...
- 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽
还记得之前的学习笔记中我们的顶点缓冲数组中的顶点数据么,我们使用一个一维数组来记录所有的顶点数据,这是由于顶点缓冲上传数据时是使用的一维数组. 如果对顶点数据进行一层代码的封装,就能更加的方便我们来操 ...
- 【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法
Stage3D在运行中是存在随时会丢失上下文的尴尬情况. 渲染内容丢失的问题本身就说明是因为丢失了Context3D对象.出现此问题的原因很多,通常还不是因为Stage3D应用.比如在win7系统中, ...
- 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵
如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...
- 【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形
前面几个星期抽空用Starling做了一个打飞机的小游戏(所以没有接着看书了),准备面试时用的,结果面试还是没过%>_<%...这个游戏打算过几天全部开源了 那么接下来打算这周把<S ...
- 【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序
本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看. 点击下载:https://codeload.github.com/hammerc/hammerc-study-St ...
- 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程
这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...
随机推荐
- php类的实现
zend_class_entry typedef struct _zend_class_entry zend_class_entry; struct _zend_class_entry { char ...
- apache开源项目-- OODT
Apache OODT (Object Oriented Data Technology) OODT 面向对象的数据技术,开发和促进科学数据管理和归档制度,使跨学科和天体物理学之间的互操作性,行星和空 ...
- 【转】【cocos2d-x教程】如何使用WebSocket
介绍 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快 ...
- Using SharePoint 2010 dialogs
转:http://www.techbubbles.com/sharepoint/using-sharepoint-2010-dialogs/ SharePoint 2010 dialogs are J ...
- keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z
首先你会发现keybd_event函数中是没有窗口句柄作为参数的,好奇的你一定会觉得很奇怪,那是因为,keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)才可以,但是如果模拟的按键 ...
- 任务栏窗口和状态图标的闪动 z
Demo程序: 实现任务栏窗体和图标的闪动: 整个程序是基于Windows Forms的,对于任务栏右下角状态图标的闪动,创建了一个类型:NotifyIconAnimator,基本上是包装了Windo ...
- Mtom Encoding in WCF
http://www.codeproject.com/Articles/632101/Mtom-Encoding-in-WCF http://msdn.microsoft.com/zh-cn/libr ...
- Jmeter初步使用--Jmeter安装与使用
由于jmeter是开源的性能测试工具,但是使用的人较少,网络上相关资料不全面,需要自己去揣摩,因此,小编就把自己在用Jmeter时的一些小结总结出来.而loadrunner工具是商业软件,网上通常都是 ...
- JS 框架之我感
对于一些js框架在我看来,都是将前端的表现动态化,即用动态js把html加载到页面上,如angularJS的MVVM开发模式(已接触),ReactJS的View层组件化(学习中),还有一些只听过没见过 ...
- 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)
内容概要: CentSO_64bit集群搭建, hadoop2.2(64位)编译,安装,配置以及测试步骤 新版亮点: 基于yarn计算框架和高可用性DFS的第一个稳定版本. 注1:官网只提供32位re ...