//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デベロッパーセンターの解説記事。これまだエントリーしてなかったよね。







