シェーダーのロードまたは埋め込み

Flash Player 10 以降、Adobe AIR 1.5 以降

Pixel Bender シェーダーを ActionScript で使用するには、最初に、ActionScript のコードからシェーダーにアクセスします。シェーダーは Adobe Pixel Bender Toolkit を使用して作成され、Pixel Bender 言語で記述されているので、ActionScript から直接アクセスできません。 代わりに、ActionScript で Pixel Bender シェーダーを表す Shader クラスのインスタンスを作成します。 Shader オブジェクトを使用すると、必要なパラメーターや入力イメージの値など、シェーダーに関する情報を検出できます。 実際にシェーダーを使用するには Shader オブジェクトを他のオブジェクトに渡します。 例えば、シェーダーをフィルターとして使用するには、ShaderFilter オブジェクトの shader プロパティに Shader オブジェクトを割り当てます。また、シェーダーを描画の塗りに使用するには、 Graphics.beginShaderFill() メソッドに Shader オブジェクトを引数として渡します。

ActionScript コードは Adobe Pixel Bender Toolkit(.pbj ファイル)で作成されたシェーダーに 2 つの方法でアクセスできます。

  • 実行時にロード:シェーダーファイルは URLLoader オブジェクトを使用して外部アセットとしてロードできます。この方法はテキストファイルなどの外部アセットをロードすることと似ています。次の例は、シェーダーバイトコードファイルを実行時にロードし、それを Shader インスタンスにリンクする方法を示しています。

    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 { 
        // Create a new shader and set the loaded data as its bytecode 
        shader = new Shader(); 
        shader.byteCode = loader.data; 
         
        // You can also pass the bytecode to the Shader() constructor like this: 
        // shader = new Shader(loader.data); 
         
         // do something with the shader 
    }
  • SWF ファイルに埋め込む:シェーダーファイルは [Embed] メタタグを使用してコンパイル時に SWF ファイルに埋め込むことができます。 [Embed] メタデータタグは、Flex SDK を使用して SWF ファイルをコンパイルした場合にのみ使用できます。この例では、 [Embed] タグの source パラメーターがシェーダーファイルを指定し、 mimeType パラメーターは、「 application/octet-stream 」となります。

    [Embed(source="myShader.pbj", mimeType="application/octet-stream")] 
    var MyShaderClass:Class; 
     
    // ... 
     
    // create a shader and set the embedded shader as its bytecode 
    var shader:Shader = new Shader(); 
    shader.byteCode = new MyShaderClass(); 
     
    // You can also pass the bytecode to the Shader() constructor like this: 
    // var shader:Shader = new Shader(new MyShaderClass()); 
     
    // do something with the shader

どちらの場合も、未処理のシェーダーバイトコード( URLLoader.data プロパティまたは [Embed] データクラスのインスタンス)を Shader インスタンスにリンクします。前の例で示すように、バイトコードは 2 つの方法で Shader インスタンスに割り当てることができます。シェーダーバイトコードを引数として Shader() コンストラクターに渡します。または、Shader インスタンスの byteCode プロパティとして設定することもできます。

Pixel Bender シェーダーを作成し、Shader オブジェクトにリンクすると、様々な方法でエフェクトの作成にシェーダーを使用できます。フィルター、ブレンドモード、ビットマップの塗りなどに使用したり、ビットマップなどのデータのスタンドアローン処理に使用することもできます。Shader オブジェクトの data プロパティを使用してシェーダーのメタデータへのアクセス、入力イメージの指定およびパラメーター値の設定も行うことができます。