//myShader.pbjをバイナリで読み込む var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(new URLRequest("myShader.pbj")); var shader:Shader; function onLoadComplete(event:Event):void { //shaderを作る shader = new Shader(); shader.byteCode = loader.data; //これでもOK // shader = new Shader(loader.data); // shaderを使う }
Pixel Benderの最近のブログ記事
var canvas:Sprite = new Sprite(); canvas.graphics.beginShaderFill(myShader); canvas.graphics.drawRect(10, 10, 150, 150); canvas.graphics.endFill();
シェーダのパラメータをシェーダのdataから調べる例。
シェーダのdataオブジェクトを取り出し、ShaderInput、ShaderParameter、メタデータを取り出す。
var shaderData:ShaderData = myShader.data; var inputs:Vector.<ShaderInput> = new Vector.<ShaderInput>(); var parameters:Vector.<ShaderParameter> = new Vector.<ShaderParameter>(); var metadata:Vector.<String> = new Vector.<String>(); for (var prop:String in shaderData) { if (shaderData[prop] is ShaderInput) { inputs[inputs.length] = shaderData[prop]; } else if (shaderData[prop] is ShaderParameter) { parameters[parameters.length] = shaderData[prop]; } else { metadata[metadata.length] = shaderData[prop]; } }
var foregroundShape:Shape = new Shape(); var g2:Graphics = foregroundShape.graphics; var c2:Array = [0xff8000, 0x663300]; var a2:Array = [255, 255]; var r2:Array = [100, 255]; var m2:Matrix = new Matrix(); m2.createGradientBox(300, 200); g2.beginGradientFill(GradientType.LINEAR, c2, a2, r2, m2); g2.drawEllipse(100, 0, 300, 200); g2.endFill(); addChild(foregroundShape); //ブレンドモードをシェーダにする foregroundShape.blendShader = shader; foregroundShape.blendMode = BlendMode.SHADER;
スタンドアローンモードでは、シェーダをイメージ以外のデータ処理に使うことができる。スタンドアローンモードでは、シェーダの実行が非同期のバックグラウンド処理になる。
同期処理する場合
var job:ShaderJob = new ShaderJob(myShader); job.addEventListener(ShaderEvent.COMPLETE, completeHandler); function completeHandler(event:ShaderEvent):void { // do something with the shader result } var jobResult:BitmapData = new BitmapData(100, 75); job.target = jobResult; job.start();target, width, heightをコンストラクタのパラメータで指定する場合
var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
同期処理する場合
job.start(true);
Pixel Benderの入り口はここAdobe Labsです(英語)。
Pixel BenderのいろんなFilterはここAdobe Pixel Bender Exchangeからダウンロード。
AdobeのFlashデベロッパーセンターの解説記事。これまだエントリーしてなかったよね。