作者Jerrynet (我爱Hot_game板)
看板Flash
标题[心得] Pixel Bender 在 Flash 中的运作机制
时间Thu May 22 21:16:23 2008
我也来分享跟Flash比较有关的吧~!
废话不多说,直接进入主题:
Pixel Bender的滤镜档案要给Flash用需要先汇出成Bytecode,而此Bytecode和swf中
,ActionScript的Bytecode形式很像,这样处理可以加快速度。而且在Flash中,Pixel
Bender Bytecode是用CPU运算的而不是GPU (因为若用GPU运算,有些电脑显示卡老旧或很
慢,他们设计Flash Player 是希望在大部分99%的电脑中都能顺利使用)。
此外,为了处理像素运算,Flash Player会另开一个Thread处理,以避免造成运算量
大时,会有无法回应的情况(如无限回圈之类的),若使用者的电脑使用多核心CPU,也会分
配各核心一起运算以加快速度,因此这两年的电脑执行起来应该是没问题的。
而且,AVM执行JIT (Just In Time) Code (即转译过的AS Code)时,限制PixelBender
Kernel 的Buffer只能小於32KB,若是超过(例如复杂大量的运算),则速度会明显变慢,约
慢10倍左右。
为了在不同电脑上执行,使用C语言编译Flash Player,但每台电脑的CPU浮点运算和
编译时的C Library定义以及电脑不同,所以Kernel运算出来的图形很可能每个人看到的有
些微差异。又在苹果电脑上,因为C 语言的 Math Library 有特殊的写法,所以在苹果作
业系统上执行某些Kernel会稍微快一点哦。
以下是几点需注意的:
1. 因为在Flash Player 10 中支援Color Space,所以若用Pixel Bender滤镜处理,会先
将像素进行Color Space 和Alpha处理才进行运算喔
2. 可以将滤镜用在ByteArray, Vector, Blend Mode 和成为图形的填充色
3. Pixel Bender里的outCoord() 或是有牵涉到座标的,范围在
-4194304 ~ 4194303 之间 (24bit)
4. 为了处理反锯齿(Anti-Aliasing),每次像素运算会一次算4个像素
5. 在Flash中,Kernel 的判断式只能用 if-else
6. Kernel不会进行cache , 所以每次执行(如图形Fill,即generate类滤镜)的话,都要重
新运算喔
以下是Flash Player 10 部分
1. 目前Flash Player 还在进行开发,但可以enable GPU mode,代价是frame rate =60
因为萤幕更新频率目前大部分萤幕都是60Hz (这就跟显示卡有关了,而且各显示卡显
示出来的画面差异很大,而且Pixel Bender也不会在GPU下render,所以这是个没用的
mode ?? 但是加快显示速度倒是有些用......)
2. 正式版的Flash Player 10 出来速度会快一些,因为现在还在开发有限制部分功能...
3. 热腾腾的Language Reference出来罗!!(注意,未来功能可能会改变,仅供参考)
http://0rz.tw/d34aV 按index开启即可
4. 开启GPU mode 不代表可以加速喔,需要看你的内容(废mode?),不过反锯齿做的比较好
,在Windows使用DirectX 9 (CJ Cat 看起来很需要XD),在Linux和Mac使用OpenGL
5. 其他新特性如读取档案和储存档案等,会开启档案浏览视窗,代表你不能在没有经过使
用者同意进行暗地里的档案存取(这样不太好....不过进步很多了),不过在浏览器里一
样可以使用喔(这样就蛮不错的)
6. ....等我想到orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.70.112.18
1F:推 cjcat2266:呼呼...看来我的AuxGeom还保有它的地位XD 05/23 00:44
2F:→ cjcat2266:...还有为什麽你觉得我需要DX9?我已经安装了呀 @@?? 05/23 00:45
3F:→ cjcat2266:话说,在Mac上面跑比Windows顺很多,有什麽原因吗? 05/23 02:08
4F:推 BIAN:好文好文....推一个... 05/23 18:24
5F:推 ComicMan:非常非常受用的资讯 05/24 15:24