Verwenden eines Shaders im eigenständigen Modus

Flash Player 10 und höher, Adobe AIR 1.5 und höher

Wenn Sie einen Shader im Standalone-Modus einsetzen, wird die Shader-Verarbeitung unabhängig davon ausgeführt, wie Sie die Ausgabe verwenden wollen. Sie geben den auszuführenden Shader an, setzen die Eingabe- und Parameterwerte und geben das Objekt an, in das die resultierenden Daten platziert werden. Sie können einen Shader aus zwei Gründen im Standalone-Modus ausführen:

  • Verarbeitung von Nicht-Bilddaten: Im Standalone-Modus können Sie anstelle von Bitmap-Bilddaten willkürliche Binär- oder Zahlendaten an den Shader übergeben. Sie können auswählen, ob die Shader-Ergebnisse zusätzlich zu den Bitmap-Bilddaten als Binär- oder Zahlendaten zurückgeben werden.

  • Hintergrundverarbeitung: Wenn Sie einen Shader im Standalone-Modus ausführen, wird der Shader standardmäßig asynchron ausgeführt. Dies bedeutet, dass der Shader im Hintergrund ausgeführt wird, während Ihre Anwendung weiter läuft. Ihr Code wird benachrichtigt, wenn die Shader-Verarbeitung abgeschlossen ist. Sie können einen Shader verwenden, der viel Zeit für die Ausführung in Anspruch nimmt und dabei nicht die Benutzeroberfläche der Anwendung oder andere Verabeitungsprozesse blockiert.

Sie verwenden ein ShaderJob-Objekt, um einen Shader im Standalone-Modus auszuführen. Zunächst erstellen Sie das ShaderJob-Objekt und verknüpfen es mit dem Shader-Objekt, das für den auszuführenden Shader steht.

var job:ShaderJob = new ShaderJob(myShader);

Dann setzen Sie die vom Shader erwarteten Eingabe- oder Parameterwerte. Wenn Sie den Shader im Hintergrund ausführen, registrieren Sie außerdem einen Listener für das complete -Ereignis des ShaderJob-Objekt. Ihr Listener wird aufgerufen, wenn der Shader seine Verarbeitung beendet hat.

function completeHandler(event:ShaderEvent):void 
{ 
    // do something with the shader result 
} 
 
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);

Dann erstellen Sie ein Objekt, in das die Ergebnisse des Shaders nach Abschluss der Verarbeitung geschrieben werden. Dieses Objekt weisen Sie der target -Eigenschaft des ShaderJob-Objekts zu:

var jobResult:BitmapData = new BitmapData(100, 75); 
job.target = jobResult;

Weisen Sie der target -Eigenschaft eine BitmapData-Instanz zu, wenn Sie die Bildverarbeitung mit ShaderJob ausführen. Wenn Sie Binär- oder Zahlendaten verarbeiten, weisen Sie ein ByteArray-Objekt oder eine Vector.<Number>-Instanz für die target -Eigenschaft zu. In diesem Fall müssen Sie die Eigenschaften width und height des ShaderJob-Objekts auf die an das target -Objekt auszugebende Datenmenge setzen.

Hinweis: Sie können die Eigenschaften shader , target , width und height des ShaderJob-Objekts in einem Schritt setzen, indem Sie Argumente an den ShaderJob() -Konstruktor übergeben (Beispiel: var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);

Wenn Sie bereit sind, den Shader auszuführen, rufen Sie die start() -Methode des ShaderJob-Objekts auf:

job.start();

Beim Aufruf von start() wird ShaderJob standardmäßig asynchron ausgeführt. In diesem Fall fährt die Programmausführung direkt mit der nächsten Codezeile fort und wartet nicht darauf, dass der Shader die Verarbeitung abschließt. Nach Abschluss des Shader-Vorgangs ruft das ShaderJob-Objekt seine complete -Ereignis-Listener mit einer entsprechenden Benachrichtigung auf. An diesem Punkt (im Text des complete -Ereignis-Listeners) enthält das target -Objekt die Ergebnisse des Shader-Vorgangs.

Hinweis: Anstelle des target -Eigenschaftsobjekts können Sie die Shader-Ergebnisse direkt vom Ereignisobjekt abrufen, das an Ihre listener-Methode übergeben wurde. Das Ereignisobjekt ist eine ShaderEvent-Instanz. Das ShaderEvent-Objekt verfügt über drei Eigenschaften, die für den Zugriff auf das Ergebnis verwendet werden können, je nach Datentyp des Objekts, das Sie als target -Eigenschaft gesetzt haben: ShaderEvent.bitmapData , ShaderEvent.byteArray und ShaderEvent.vector .

Alternativ können Sie ein true -Argument an die start() -Methode senden. In diesem Fall wird der Shader-Vorgang synchron ausgeführt. Während der Ausführung des Shaders wird kein weiterer Code verarbeitet (einschließlich der Interaktion mit der Benutzeroberfläche und anderer Ereignisse). Ist der Shader fertig, enthält das target -Objekt die Ergebnisse des Shaders und das Programm fährt mit der nächsten Codezeile fort.

job.start(true);