flash cs4 openGL 硬件加速研究

flashplayer10以后开始支持硬件加速,目前支持openGL2.0。下面是一个实例,先贴上代码。
/**
tb
*/
package
{
import flash.display.Loader;
import flash.display.BitmapData;
import flash.display.Shader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.net.URLRequest;
import flash.net.URLStream;
import flash.utils.ByteArray;
import flash.utils.Timer;
import flash.utils.getTimer;

public class TestShader extends Sprite
{
private var _shape:Shape=new Shape();
private var _bitmapData:BitmapData;
private var _shader:Shader = new Shader();
private var _sl:URLStream=new URLStream();

public function TestShader()
{
this.stage.scaleMode=StageScaleMode.NO_SCALE;
this.stage.align=StageAlign.TOP_LEFT;
this.stage.showDefaultContextMenu=false;
//===========================================

//加载图片
var imgloader:Loader=new Loader();
imgloader.contentLoaderInfo.addEventListener(Event.COMPLETE,imgComplete);
imgloader.load(new URLRequest("image.jpg"));
}

/**
* 加载图片完成
* @param event
*
*/
private function imgComplete(event:Event):void
{
_bitmapData=event.target.content.bitmapData;
_sl.addEventListener(Event.COMPLETE,shaderLoaded);
_sl.load(new URLRequest("Crystallize.pbj"));
}

/**
* 加载pbj文件完成
* @param event
*
*/
private function shaderLoaded(event:Event):void
{
var sls:URLStream= event.target as URLStream;
if(sls==null){
throw new Error("GLSL data is empty or load error");
}
var byArr:ByteArray=new ByteArray();
sls.readBytes(byArr);

//开始着色渲染
_shader.byteCode = byArr;
_shader.data.src.input = _bitmapData;

//添加显示
_shape.x=20;
_shape.y=20;
this.addChild(_shape);

//时间间隔
var time:Timer=new Timer(100);
time.addEventListener(TimerEvent.TIMER,onTime);
time.start();
}

/**
* 时间间隔,动态改变着色渲染
* @param event
*
*/
private function onTime(event:TimerEvent):void
{
_shader.data.size.value = [Math.sin(event.target.currentCount/100)*50];

_shape.graphics.clear();
_shape.graphics.beginShaderFill(_shader);
_shape.graphics.drawRect(0,0,200,200);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值