Verwenden eines Shaders im eigenständigen ModusFlash 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:
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); |
|