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);