AS3调用GPU渲染
AS 代码(TestShader.as):
package
?2?{
?3?????????import?flash.display.Sprite;
?4?????????import?flash.display.BitmapData;
?5?????????import?flash.display.Loader;
?6?????????import?flash.display.Shader;
?7?????????import?flash.display.StageScaleMode;
?8?????????import?flash.display.StageAlign;
?9?????????import?flash.events.Event;
10?????????import?flash.events.TimerEvent;
11?????????import?flash.net.URLStream;
12?????????import?flash.net.URLRequest;
13?????????import?flash.utils.ByteArray;
14?????????import?flash.utils.Timer;
15?????????
16?????????public?class?TestShader?extends?Sprite
17?????????{
18?????????????????private?var?_bitmapData:BitmapData;
19?????????????????private?var?_shader:Shader?=?new?Shader();
20?????????????????private?var?_sl:URLStream=new?URLStream();
21?????????????????
22?????????????????public?function?TestShader()
23?????????????????{
24?????????????????????????this.stage.scaleMode=StageScaleMode.NO_SCALE;
25?????????????????????????this.stage.align=StageAlign.TOP_LEFT;
26?????????????????????????this.stage.showDefaultContextMenu=false;
27?????????????????????????//===========================================
28?????????????????????????
29?????????????????????????//加载图片
30?????????????????????????var?imgloader:Loader=new?Loader();
31?????????????????????????imgloader.contentLoaderInfo.addEventListener(Event.COMPLETE,imgComplete);
32?????????????????????????imgloader.load(new?URLRequest("image.jpg"));
33?????????????????}
34?????????????????
35?????????????????/**
36??????????????????*?加载图片完成
37??????????????????*?@param?event
38??????????????????*?
39??????????????????*/????????????????
40?????????????????private?function?imgComplete(event:Event):void
41?????????????????{
42?????????????????????????_bitmapData=event.target.content.bitmapData;
43?????????????????????_sl.addEventListener(Event.COMPLETE,shaderLoaded);
44?????????????????????_sl.load(new?URLRequest("opengltest.pbj"));
45?????????????????}
46?????????????????
47?????????????????/**
48??????????????????*?加载GLSL代码完成
49??????????????????*?@param?event
50??????????????????*?
51??????????????????*/????????????????
52?????????????????private?function?shaderLoaded(event:Event):void
53?????????????????{
54?????????????????????????var?sls:URLStream=?event.target?as?URLStream;
55?????????????????????????if(sls==null){
56?????????????????????????????????throw?new?Error("GLSL?data?is?empty?or?load?error");
57?????????????????????????}
58?????????????????????????var?byArr:ByteArray=new?ByteArray();
59?????????????????????????sls.readBytes(byArr);
60?????????????????????????
61?????????????????????????//开始着色渲染
62?????????????????????????_shader.byteCode?=?byArr;
63?????????????????????????_shader.data.src.input?=?_bitmapData;
64?????????????????????????changeShader();
65?????????????????????????
66?????????????????????????
67?????????????????????????//时间间隔
68?????????????????????????var?time:Timer=new?Timer(1000);
69?????????????????????????time.addEventListener(TimerEvent.TIMER,onTime);
70?????????????????????????time.start();
71?????????????????}
72?????????????????
73?????????????????/**
74??????????????????*?时间间隔,动态改变着色渲染?
75??????????????????*?@param?event
76??????????????????*?
77??????????????????*/????????????????
78?????????????????private?function?onTime(event:TimerEvent):void
79?????????????????{
80?????????????????????????changeShader();
81?????????????????}
82?????????????????
83?????????????????/**
84??????????????????*?改变着色渲染
85??????????????????*?
86??????????????????*/????????????????
87?????????????????private?function?changeShader():void
88?????????????????{
89?????????????????????????_shader.data.exposure.value?=?[0.5-Math.random()];
90?
91?????????????????????????graphics.clear();
92?????????????????????????graphics.beginShaderFill(_shader);
93?????????????????????????graphics.drawRect(0,0,300,300);
94?????????????????}
95?????????}
96?}
?
?
Pixel Bender 代码(opengltest.pbk):
package flash.display { final public class ShaderParameterType extends Object { static public var BOOL:String = "bool"; static public var BOOL2:String = "bool2"; static public var BOOL3:String = "bool3"; static public var BOOL4:String = "bool4"; static public var FLOAT:String = "float"; static public var FLOAT2:String = "float2"; static public var FLOAT3:String = "float3"; static public var FLOAT4:String = "float4"; static public var INT:String = "int"; static public var INT2:String = "int2"; static public var INT3:String = "int3"; static public var INT4:String = "int4"; static public var MATRIX2X2:String = "matrix2x2"; static public var MATRIX3X3:String = "matrix3x3"; static public var MATRIX4X4:String = "matrix4x4"; public function ShaderParameterType(); }}?
如果显卡驱动不支持OpenGL 2.0,程序将使用CPU运算,而不是使用GPU运算,没有显卡硬件加速的效果。请更新最新显卡驱动,支持OpenGL 2.0。
相信不久的将来,将会有用Pixel Bender 开发的提供给AS调用的着色渲染引擎。