PixelBenderのデモ

ちょいとオープンキャンパスってことでデモ用作品をちめちめと作成しています。
今回は勉強がてらPixelBenderでの作品です。
っと言っても、ほとんど拾ってきたエフェクトを動かせるようにしただけ(汗
こんな感じ。Flash Player 10が必要でっす。
http://moeten.info/flex/20081003_OpenCanpasDemo/bin-release/main.html

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    verticalScrollPolicy="off" horizontalScrollPolicy="off"
    backgroundGradientAlphas="[1,1]" backgroundGradientColors="[0xffffff,0xcccccc]"
    layout="vertical" creationComplete="init()"
    verticalGap="5" paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.controls.sliderClasses.Slider;
import mx.events.SliderEvent;
import flash.filters.ShaderFilter;
//初期化関数
private function init():void{
    pBar.visible = true;
    loadShader( typeArr[0].fname );
}
//フィルタータイプ選択
private function typeChange():void{
    pBar.visible = true;
    loadShader( typeArr[vs.selectedIndex].fname );
    vs.enabled = false;
}
//PixelBenderファイルのロード
private var loader:URLLoader;
private function loadShader(shaderName:String):void{
    loader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE,loadShaderComplete);
    loader.load( new URLRequest( shaderName ) );
}
//ロード完了。フィルター適応
private var shader:Shader;
private var myFilter:ShaderFilter;
private function loadShaderComplete(e:Event):void{
    vs.enabled = true;
    trace( "loadComplete" );
    pBar.visible = false;
    shader = new Shader();
    shader.byteCode = loader.data;
    myFilter = new ShaderFilter(shader);
    myVideo.filters = [myFilter];
}
//スライダー変更
private function sliderChange(event:SliderEvent ,targetParam:String, targetNum:Number):void {
       var currentSlider:Slider = Slider(event.currentTarget);
       shader.data[targetParam].value[targetNum] = currentSlider.value;
       myVideo.filters = [myFilter];
}
]]>
</mx:Script>
<!--#################  #################-->
<mx:Array id="typeArr">
    <mx:Object fname="changeRGB.pbj" label="色変換"/>
    <mx:Object fname="invertRGB.pbj" label="色反転"/>
    <mx:Object fname="sepia.pbj"     label="セピア"/>
    <mx:Object fname="deformer.pbj"  label="魚眼レンズ"/>
    <mx:Object fname="tuble.pbj"     label="チューブ"/>
    <mx:Object fname="twist.pbj"     label="ツイスト"/>
    <mx:Object fname="pixelate.pbj"  label="ピクセル化"/>
    <mx:Object fname="crystal.pbj"   label="クリスタル"/>
    <mx:Object fname="pixel2.pbj"    label="ピクセル2"/>
    <mx:Object fname="hexagon.pbj"   label="六角格子"/>
</mx:Array>
<mx:Style>
labelfont{
  fontSize:20;
}
</mx:Style>
<!--#################  #################-->
<mx:HBox width="100%" textAlign="left">
    <mx:Label text="GPGPUによる画像処理" fontSize="30"/>
    <mx:ProgressBar id="pBar" indeterminate="true" themeColor="#7C7C7C"
        label="" trackHeight="10" width="100%" visible="false" height="10"/>
</mx:HBox>
<mx:ToggleButtonBar height="34" dataProvider="{vs}" width="100%" selectedIndex="-1" itemClick="typeChange()" fontSize="20"/>
<mx:HBox width="100%" height="100%">
    <mx:Canvas width="100%" height="100%">
        <mx:VideoDisplay id="myVideo" width="100%" height="100%" source="01.flv"/>
        <mx:Label text="{vs.selectedChild.label}" fontSize="20" visible="false"/>
        <mx:TextArea editable="false" selectable="false" cornerRadius="5" borderColor="0x000000" borderStyle="solid" borderThickness="3"
            width="462" height="145" backgroundAlpha="0.5" left="10" bottom="10" visible="false"/>
    </mx:Canvas>
    <mx:ViewStack id="vs" y="92" width="200" height="100%">
    <!-- 色変換 -->
    <mx:VBox textAlign="left" label="{typeArr[0].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="1" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="赤" change="sliderChange(event, 'ColorRatio' , 0)" value="1"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="1" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="緑" change="sliderChange(event, 'ColorRatio' , 1)" value="1"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="1" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="青" change="sliderChange(event, 'ColorRatio' , 2)" value="1"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="1" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="透明度" change="sliderChange(event, 'ColorRatio' , 3)" value="1"/>
    </mx:VBox>
    <!-- 色反転 -->
    <mx:VBox textAlign="left" label="{typeArr[1].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
    </mx:VBox>
    <!-- セピア -->
    <mx:VBox textAlign="left" label="{typeArr[2].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="1" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="度合" change="sliderChange(event, 'intensity' , 0)" value="0"/>
    </mx:VBox>
    <!-- 魚眼レンズ -->
    <mx:VBox textAlign="left" label="{typeArr[3].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="249" minimum="182" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="中心点x" change="sliderChange(event, 'center_x' , 0)" value="182"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="249" minimum="158" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="中心点y" change="sliderChange(event, 'center_y' , 0)" value="158"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="2024" minimum="1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="画像の高さ" change="sliderChange(event, 'imageHeight' , 0)" value="2024"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="3" minimum="1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="ストレッチ具合" change="sliderChange(event, 'stretch' , 0)" value="1" snapInterval="1"/>
    </mx:VBox>
    <!-- チューブ -->
    <mx:VBox textAlign="left" label="{typeArr[4].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="300" minimum="0.1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'radius' , 0)" value="210"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="3.14" minimum="-3.14" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'turbulence' , 0)" value="1.25"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="2048" minimum="-200" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'center' , 0)" value="457"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="2048" minimum="-200" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'center' , 1)" value="365"/>
    </mx:VBox>
    <!-- ツイスト -->
    <mx:VBox textAlign="left" label="{typeArr[5].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="400" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'myCenter' , 0)" value="200"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="400" minimum="0" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'myCenter' , 1)" value="200"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="9.423" minimum="-9.423" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'myAngle' , 0)" value="0"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="400" minimum="1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'myRadius' , 0)" value="100"/>
    </mx:VBox>
    <!-- ピクセル化 -->
    <mx:VBox textAlign="left" label="{typeArr[6].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="100" minimum="1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'dimension' , 0)" value="1"/>
    </mx:VBox>
    <!-- クリスタル -->
    <mx:VBox textAlign="left" label="{typeArr[7].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="300" minimum="0.1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'size' , 0)" value="20"/>
    </mx:VBox>
    <!-- ピクセル2 -->
    <mx:VBox textAlign="left" label="{typeArr[8].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
    </mx:VBox>
    <!-- 六角格子 -->
    <mx:VBox textAlign="left" label="{typeArr[9].label}" cornerRadius="5" borderThickness="3" borderStyle="solid" borderColor="0xcccccc"
        backgroundColor="0xffffff" paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" backgroundAlpha="0.5">
        <mx:Label text="{vs.selectedChild.label}" fontSize="20"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="200" minimum="1" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'size' , 0)" value="50"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="800" minimum="-200" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'base' , 0)" value="400"/>
        <mx:HSlider width="100%" labelStyleName="labelfont" maximum="500" minimum="-200" allowTrackClick="true" enabled="true"
            liveDragging="true" labels="R" change="sliderChange(event, 'base' , 1)" value="250"/>
    </mx:VBox>
    </mx:ViewStack>
</mx:HBox>
</mx:Application>