ActionScript® 3.0 Referenzhandbuch für die Adobe® Flash®-Plattform
Home  |  Liste der Pakete und Klassen ausblenden |  Pakete  |  Klassen  |  Neue Funktionen  |  Stichwortverzeichnis  |  Anhänge  |  Warum auf Englisch?
Filter: Daten werden vom Server abgerufen...
Daten werden vom Server abgerufen...
flash.display 

Shader  - AS3

Paketflash.display
Klassepublic class Shader
VererbungShader Inheritance Object
Unterklassen ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 10, AIR 1.5

Eine Shader-Instanz stellt ein Pixel Bender-Shaderkernel in ActionScript dar. Um in Ihrer Anwendung einen Shader zu verwenden, erstellen Sie dafür eine Shader-Instanz. Dann verwenden Sie diese Shader-Instanz entsprechend dem Effekt, den Sie erstellen möchten. Um den Shader beispielsweise als Filter zu verwenden, weisen Sie die Shader-Instanz der 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.

Beispiele anzeigen

Verwandte API-Elemente



Öffentliche Eigenschaften
 EigenschaftDefiniert von
  byteCode : ByteArray
[Nur Schreiben] Der unformatierte Shaderbytecode für die Shader-Instanz.
Shader
 Inheritedconstructor : 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
Öffentliche Methoden
 MethodeDefiniert von
  
Shader(code:ByteArray = null)
Erstellt eine neue Shader-Instanz.
Shader
 Inherited
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde.
Object
 Inherited
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde.
Object
 Inherited
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann.
Object
 Inherited
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest.
Object
 Inherited
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas.
Object
 Inherited
Gibt das angegebene Objekt als String zurück.
Object
 Inherited
Gibt den Grundwert des angegebenen Objekts zurück.
Object
Eigenschaftendetails

byteCode

Eigenschaft
byteCode:ByteArray  [Nur Schreiben]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 10, AIR 1.5

Der unformatierte Shaderbytecode für die Shader-Instanz.



Implementierung
    public function set byteCode(value:ByteArray):void

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

Konstruktordetails

Shader

()Konstruktor
public function Shader(code:ByteArray = null)

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 10, AIR 1.5

Erstellt eine neue Shader-Instanz.

Parameter
code:ByteArray (default = null) — Der unformatierte Bytecode, der mit dem Shader verknüpft wird.
ShaderExample.1.as

Im folgenden Beispiel wird zur Laufzeit eine Shaderbytecodedatei geladen und eine Shader-Instanz damit verknüpft.

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
        }
    }
}
ShaderExample.2.as

Im folgenden Beispiel wird eine Shaderbytecodedatei durch Kompilieren in die SWF eingebettet und eine Shader-Instanz damit verknüpft.

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
        }
    }
}




[ X ]Warum auf Englisch?
Inhalt des ActionScript 3.0-Referenzhandbuchs wird in englischer Sprache angezeigt

Nicht alle Teile des ActionScript 3.0-Referenzhandbuchs wurden in alle Sprachen übersetzt. Wenn der Text zu einem Sprachelement nicht übersetzt wurde, wird er auf Englisch angezeigt. Zum Beispiel wurden die Informationen zur ga.controls.HelpBox-Klasse nicht in andere Sprachen übersetzt. In der deutschen Version des Referenzhandbuchs erscheint der Abschnitt zur ga.controls.HelpBox-Klasse deshalb auf Englisch.