パッケージ | flash.display |
クラス | public class Shader |
継承 | Shader Object |
サブクラス | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10, AIR 1.5 |
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 インスタンスが作成されたら、次のいくつかの方法のうちどれでも使用できます。
- シェーダー塗り:シェーダーの出力は、描画 API により描画されたコンテンツの塗りとして使用されます。Shader インスタンスを引数として
Graphics.beginShaderFill()
メソッドに渡します。 - シェーダーフィルター:シェーダーの出力は、表示オブジェクトに適用されるグラフィックフィルターとして使用されます。Shader インスタンスを ShaderFilter インスタンスの
shader
プロパティに割り当てます。 - ブレンドモード:シェーダーの出力は、重なり合う 2 つの表示オブジェクト間のブレンドとしてレンダリングされます。Shader インスタンスを、2 つの表示オブジェクトのうち上の
blendShader
プロパティに割り当てます。 - バックグラウンドシェーダー処理:表示のフリーズを避けるため、シェーダーをバックグラウンドで実行し、処理が完了したときにイベントを送出します。Shader インスタンスを ShaderJob インスタンスの
shader
プロパティに割り当てます。
シェーダー塗り、フィルター、およびブレンドは、GPU レンダリングではサポートされません。
モバイルブラウザーのサポート:この機能はモバイルブラウザーではサポートされません。
AIR プロファイルのサポート:この機能はすべてのデスクトップオペレーティングシステムでサポートされますが、モバイルデバイスの種類によってはサポートされません。また、AIR for TV デバイスではサポートされません。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。
関連する API エレメント
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
プロパティ | 定義元 | ||
---|---|---|---|
byteCode : ByteArray [書き込み専用]
この Shader インスタンスの生のシェーダーバイトコードです。 | Shader | ||
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
data : ShaderData
Shader インスタンスのパラメーター、入力イメージ、およびメタデータにアクセスできます。 | Shader | ||
precisionHint : String
シェーダーが実行する算術演算の精度です。 | Shader |
メソッド | 定義元 | ||
---|---|---|---|
新しい Shader インスタンスを作成します。 | Shader | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object |
byteCode | プロパティ |
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
関連する API エレメント
precisionHint | プロパティ |
precisionHint:String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10, AIR 1.5 |
シェーダーが実行する算術演算の精度です。
precisionHint
プロパティで使用可能な値セットは、ShaderPrecision クラスの定数によって定義されます。
デフォルト値は ShaderPrecision.FULL
です。精度を ShaderPrecision.FAST
に設定すると、精度が低下しますが算術演算は高速になります。
full 精度モード(ShaderPrecision.FULL
)では、すべての算術演算が完全桁の IEEE 32 bit 浮動少数規格で計算され、すべてのプラットフォームで一貫した動作が提供されます。このモードでは、三角関数や指数関数などの一部の算術演算について処理速度が低下することがあります。
fast 精度モード(ShaderPrecision.FAST
)は処理速度を優先して設計されていますが、プラットフォームの差異や CPU 構成の内容によって結果が異なることがあります。多くの場合、グラフィックエフェクトの作成にはアーティファクトが見えることもなく、この精度レベルで十分です。
精度モードの選択は、次のシェーダー操作に影響します。これらの操作は、SSE 命令セットを内蔵する Intel プロセッサーでは高速になります。
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan(x, y)
exp(x)
exp2(x)
log(x)
log2(x)
pow(x, y)
reciprocal(x)
sqrt(x)
実装
public function get precisionHint():String
public function set precisionHint(value:String):void
関連する API エレメント
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 } } }
この例では、"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 } } }
Tue Jun 12 2018, 10:34 AM Z