パッケージflash.display
クラスpublic class Shader
継承Shader Inheritance Object

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

Shader インスタンスは ActionScript のシェーダ (Pixel Bender) のカーネルを表します。アプリケーションでシェーダを使用するには、そのシェーダの Shader インスタンスを作成します。次に、その Shader インスタンスを、作成するエフェクトに合わせて使用します。例えば、シェーダをフィルタとして使用する場合は、Shader インスタンスを ShaderFilter オブジェクトの shader プロパティに割り当てます。

シェーダがイメージの全ピクセルに対しピクセル単位で実行する関数を定義します。各関数呼び出し結果が、イメージ内のそのピクセル座標の出力カラーとなります。シェーダは 1 つ以上の入力イメージを指定できます。このイメージのコンテンツを関数の出力の決定に使用できます。また、シェーダは 1 つ以上のパラメータを指定することもできます。これは関数出力の計算に使用可能な入力値となります。1 つのシェーダ実行では、入力値とパラメータ値は定数です。唯一変化するのは、関数の結果がカラーとなるピクセル座標です。複数の出力ピクセル座標のシェーダ関数呼び出しは、シェーダ実行パフォーマンスを高めるために、並行して実行されます。

シェーダバイトコードは、実行時に 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
  }

[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 new shader and set the embedded shader as its bytecode
  var shaderShader = 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 インスタンスの byteCode プロパティとして設定することもできます。

Shader インスタンスが作成されたら、次のいくつかの方法のうちどれでも使用できます。

例を表示

関連項目

flash.display.DisplayObject.blendShader
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Loading or embedding a shader


パブリックプロパティ
 プロパティ定義元
  byteCode : ByteArray
[書き込み専用] この Shader インスタンスの生のシェーダバイトコードです。
Shader
 Inheritedconstructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  data : ShaderData
Shader インスタンスのパラメータ、入力イメージ、およびメタデータにアクセスできます。
Shader
  precisionHint : String
シェーダが実行する算術演算の精度です。
Shader
 Inheritedprototype : Object
[静的] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
パブリックメソッド
 メソッド定義元
  
Shader(code:ByteArray = null)
新しい Shader インスタンスを作成します。
Shader
 Inherited
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 Inherited
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 Inherited
指定されたプロパティが存在し、列挙できるかどうかを示します。
Object
 Inherited
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
 Inherited
指定されたオブジェクトのストリング表現を返します。
Object
 Inherited
指定されたオブジェクトのプリミティブな値を返します。
Object
プロパティの詳細
byteCodeプロパティ
byteCode:ByteArray  [書き込み専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

この Shader インスタンスの生のシェーダバイトコードです。



実装
    public function set byteCode(value:ByteArray):void
dataプロパティ 
data:ShaderData  [読み書き可能]

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

Shader インスタンスのパラメータ、入力イメージ、およびメタデータにアクセスできます。シェーダのパラメータを表す ShaderParameter オブジェクト、シェーダの入力イメージを表す ShaderInput オブジェクト、シェーダのメタデータを表すその他の値が、Shader インスタンスの作成時に data プロパティオブジェクトの各プロパティとして動的に追加されます。これらのプロパティを使用して、シェーダを検査し、パラメータと入力値を設定することができます。

data オブジェクトの動的プロパティにアクセスし、操作する方法について詳しくは、ShaderData クラスに関する説明を参照してください。



実装
    public function get data():ShaderData
    public function set data(value:ShaderData):void

関連項目

precisionHintプロパティ 
precisionHint:String  [読み書き可能]

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

シェーダが実行する算術演算の精度です。

precisionHint プロパティで使用可能な値セットは、ShaderPrecision クラスの定数によって定義されます。

デフォルト値は ShaderPrecision.FULL です。 精度を ShaderPrecision.FAST に設定すると、精度が低下しますが算術演算は高速になります。

full 精度モード(ShaderPrecision.FULL)では、すべての算術演算が完全桁の IEEE 32 ビット浮動少数規格で計算され、すべてのプラットフォームで一貫した動作が提供されます。 このモードでは、三角関数や指数関数などの一部の算術演算をスローできます。

fast 精度モード(ShaderPrecision.FAST)は処理速度を最大にするように設計されていますが、異なるプラットフォームや個々の CPU 構成で一貫した結果が得られません。 多くの場合、グラフィックエフェクトの作成にはアーティファクトが見えることもなく、この精度レベルで十分です。

精度モードの選択は、次のシェーダ操作に影響します。これらの操作は、SSE 命令セットを内蔵する Intel プロセッサでは高速になります。



実装
    public function get precisionHint():String
    public function set precisionHint(value:String):void

関連項目

コンストラクタの詳細
Shader()コンストラクタ
public function Shader(code:ByteArray = null)

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 10, AIR 1.5

新しい Shader インスタンスを作成します。

パラメータ
code:ByteArray (default = null) — Shader にリンクする生のシェーダバイトコードです。
例の使用法
ShaderExample.1.as

次の例は、シェーダバイトコードファイルを実行時にロードし、それにリンクされた Shader インスタンスを作成する方法を示しています。

この例では、"donothing.pbj" という名前のシェーダバイトコードファイルが、アプリケーションの出力先と同じディレクトリにあるものとします。DoNothing シェーダの Pixel Bender ソースコードは、ShaderData クラスの例にあります。

package {
    import flash.display.Shader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;

    public class LoadedShaderExample extends Sprite {
        
        private var loader:URLLoader;
        
        public function LoadedShaderExample() {
            loader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.BINARY;
            loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
            loader.load(new URLRequest("donothing.pbj"));
        }
        
        private function loadCompleteHandler(event:Event):void {
            var shader:Shader = new Shader();
            shader.byteCode = loader.data;
            
            // do something with the Shader instance
        }
    }
}
ShaderExample.2.as

次の例は、シェーダバイトコードファイルを SWF にコンパイルすることで埋め込み、それにリンクされた Shader インスタンスを作成する方法を示しています。

この例では、"donothing.pbj" という名前のシェーダバイトコードファイルがアプリケーションのソースコードと同じディレクトリにあり、Flex SDK を使用して SWF をコンパイルしたものとします。DoNothing シェーダの Pixel Bender ソースコードは、ShaderData クラスの例にあります。

package {
    import flash.display.Shader;
    import flash.display.Sprite;

    public class EmbeddedShaderExample extends Sprite {
        
        [Embed(source="donothing.pbj", mimeType="application/octet-stream")]
        private static var DoNothingShader:Class;
        
        public function EmbeddedShaderExample() {
            var shader:Shader = new Shader();
            shader.byteCode = new DoNothingShader();
            
            // do something with the Shader instance
        }
    }
}