Paket | flash.display |
Klasse | public class Shader |
Vererbung | Shader Object |
Unterklassen | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10, AIR 1.5 |
shader
-Eigenschaft eines ShaderFilter-Objekts zu.
Ein Shader definiert eine Funktion, die für alle Pixel in einem Bild ausgeführt wird, jeweils ein Pixel nach dem anderen. Das Ergebnis eines jeden Aufrufs der Funktion ist die Ausgabefarbe an der jeweiligen Pixelkoordinate im Bild. Ein Shader kann ein oder mehrere Eingabebilder festlegen, deren Inhalt zum Bestimmen der Ausgabe der Funktion verwendet wird. Ein Shader kann auch einen oder mehrere Parameter festlegen, die als Eingabewerte für die Berechnung der Funktionsausgabe verwendet werden können. Bei einer einzelnen Shaderausführung sind Eingabe- und Parameterwerte konstant. Es ändert sich lediglich die Koordinate des Pixels, dessen Farbe das Ergebnis der Funktion ist. Shaderfunktionsaufrufe für mehrere Ausgabepixelkoordinaten werden gleichzeitig ausgeführt, damit die Shaderausgabeleistung verbessert wird.
Der Shaderbytecode kann zur Laufzeit mit einer URLLoader-Instanz geladen werden. Das folgende Beispiel zeigt, wie eine Bytecode-Datei für einen Shader zur Laufzeit geladen und mit einer Shader-Instanz verknüpft wird.
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 }
Sie können den Shader auch beim Kompilieren in die SWF einbetten, indem sie das [Embed]
-Metadaten-Tag verwenden. Das [Embed]
-Metadaten-Tag ist nur verfügbar, wenn Sie die SWF-Datei mit Flex SDK kompilieren. Der source
-Parameter des [Embed]
-Tags verweist auf die Shaderdatei und der mimeType
-Parameter lautet "application/octet-stream"
, wie im Beispiel gezeigt wird:
[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
In beiden Fällen verknüpfen Sie den unformatierten Shaderbytecode (die URLLoader.data
-Eigenschaft oder eine Instanz der [Embed]
-Datenklasse) mit der Shader-Instanz. Wie im Beispiel oben gezeigt wird, können Sie das auf zwei Arten tun. Sie können den Shaderbytecode als Argument an den Shader()
-Konstruktor übergeben. Oder Sie legen ihn als byteCode
-Eigenschaft der Shader-Instanz fest.
Sobald eine Shader-Instanz erstellt wurde, kann Sie auf mehrere Arten verwendet werden:
- Als Shaderfüllung: Die Ausgabe des Shaders wird als Füllung für Inhalte verwendet, die mit der Zeichnungs-API gezeichnet wurden. Übergeben Sie die Shader-Instanz als Argument an die
Graphics.beginShaderFill()
-Methode. - Als Shaderfilter: Die Ausgabe des Shaders wird als Grafikfilter auf ein Anzeigeobjekt angewendet. Weisen Sie die Shader-Instanz der
shader
-Eigenschaft einer ShaderFilter-Instanz zu. - Als Mischmodus: Die Ausgabe des Shaders wird als Mischung zwischen zwei überlappenden Anzeigeobjekten dargestellt. Weisen Sie die Shader-Instanz der
blendShader
-Eigenschaft des oberen der beiden Anzeigeobjekte zu. - Shaderverarbeitung im Hintergrund: Der Shader wird im Hintergrund ausgeführt, wodurch ein mögliches Hängenbleiben der Bildschirmanzeige verhindert wird, und löst nach Beenden der Verarbeitung ein Ereignis aus. Weisen Sie die Shader-Instanz der
shader
-Eigenschaft einer ShaderJob-Instanz zu.
Shader-Füllungen, Filter und Mischmodi werden mit GPU-Rendering nicht unterstützt.
Unterstützung für mobile Browser: Diese Funktion wird in mobilen Browsern nicht unterstützt.
Unterstützung von AIR-Profilen: Diese Funktion wird auf allen Desktopbetriebssystemen unterstützt, jedoch nicht auf allen mobilen Geräten. Bei Geräten mit AIR für TV wird sie nicht unterstützt. Weitere Informationen zum AIR-Support über mehrere Profile finden Sie unter Unterstützung von AIR-Profilen.
Verwandte API-Elemente
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Eigenschaft | Definiert von | ||
---|---|---|---|
byteCode : ByteArray [Nur Schreiben]
Der unformatierte Shaderbytecode für die Shader-Instanz. | Shader | ||
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
data : ShaderData
Gewährt Zugriff auf Parameter, Eingabebilder und Metadaten für die Shader-Instanz. | Shader | ||
precisionHint : String
Die Präzision der vom Shader ausgeführten mathematischen Operationen. | Shader |
Methode | Definiert von | ||
---|---|---|---|
Erstellt eine neue Shader-Instanz. | Shader | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
byteCode | Eigenschaft |
data | Eigenschaft |
data:ShaderData
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10, AIR 1.5 |
Gewährt Zugriff auf Parameter, Eingabebilder und Metadaten für die Shader-Instanz. ShaderParameter-Objekte stellen Parameter für den Shader dar, Shaderinput-Objekte stellen die Eingabebilder für den Shader dar und andere Werte stellen die Metadaten des Shaders dar, die beim Erstellen der Shaderinstanz als Eigenschaften des data
-Eigenschaftsobjekts dynamisch hinzugefügt werden. Diese Eigenschaften können zum Untersuchen des Shaders und zum Setzen von Parametern und Eingabewerten verwendet werden.
Informationen über den Zugriff auf und die Änderung der dynamischen Eigenschaften des data
-Objekts finden Sie in der Beschreibung der ShaderData-Klasse.
Implementierung
public function get data():ShaderData
public function set data(value:ShaderData):void
Verwandte API-Elemente
precisionHint | Eigenschaft |
precisionHint:String
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 10, AIR 1.5 |
Die Präzision der vom Shader ausgeführten mathematischen Operationen.
Der Satz der möglichen Werte für die precisionHint
-Eigenschaft wird durch die Konstanten in der ShaderPrecision-Klasse definiert.
Der Standartwert ist ShaderPrecision.FULL
. Mathematische Operationen können zulasten der Präzision beschleunigt werden, indem Sie die Präzision auf ShaderPrecision.FAST
setzen.
Im vollen Präzisionsmodus (ShaderPrecision.FULL
) werden alle mathematischen Operationen basierend auf dem 32-Bit-Gleitkommastandard des IEEE berechnet. Dieser Modus gewährleistet konsistentes Verhalten über alle Plattformen hinweg. In diesem Modus können einige mathematische Operationen, wie beispielsweise trigonometrische und Exponentialfunktionen, langsam sein.
Der schnelle Präzisionsmodus (ShaderPrecision.FAST
) gewährleistet maximale Leistung, funktioniert aber nicht konsistent über alle Plattformen und individuellen CPU-Konfigurationen hinweg. Diese Präzisionsebene reicht aus, um Grafikeffekte ohne sichtbare Artefakte zu erstellen.
Die Auswahl des Präzisionsmodus wirkt sich auf die folgenden Shadervorgänge aus. Diese Vorgänge sind auf einem Intel-Prozessor schneller, wenn die SSE-Anweisung wie folgt eingestellt ist:
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)
Implementierung
public function get precisionHint():String
public function set precisionHint(value:String):void
Verwandte API-Elemente
Shader | () | Konstruktor |
Beachten Sie, dass im Beispiel davon ausgegangen wird, dass im selben Ordner wie dem Ausgabeordner der Anwendung eine Shaderbytecodedatei mit dem Namen „donothing.pbj“ vorhanden ist. Der Pixel Bender-Quellcode for den DoNothing-Shader ist im Beispiel zur ShaderData-Klasse verfügbar.
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 } } }
Bei diesem Beispiel wird davon ausgegangen, dass im selben Ordner, in dem der Quellcode für die Anwendung liegt, eine Shaderbytecodedatei namens „donothing.pbj“ vorhanden ist und dass Flex SDK für das Kompilieren der SWF verwendet wird. Der Pixel Bender-Quellcode for den DoNothing-Shader ist im Beispiel zur ShaderData-Klasse verfügbar.
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:04 AM Z