Użycie modułu cieniującego w trybie autonomicznymFlash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje Jeśli moduł cieniujący jest używany w trybie autonomicznym, wówczas przetwarzanie modułu cieniującego działa niezależnie od przeznaczenia wyniku działania modułu cieniującego. Należy określić moduł cieniujący do uruchomienia, ustawić dane wejściowe i wartości parametrów, a następnie wyznaczyć obiekt, do którego zostaną wstawione dane wynikowe. Moduł cieniujący może być używany w trybie autonomicznym z dwóch powodów:
W celu uruchomienia modułu cieniującego w trybie autonomicznym należy użyć klasy ShaderJob. Najpierw należy użyć obiektu ShaderJob i połączyć go z obiektem Shader reprezentującym moduł cieniujący przeznaczony do uruchomienia: var job:ShaderJob = new ShaderJob(myShader); Następnie należy ustawić dowolne wartości wejściowe lub wartości parametrów, jakich oczekuje moduł cieniujący. Jeśli moduł cieniujący jest uruchamiany w tle, można również zarejestrować detektor dla zdarzenia complete obiektu ShaderJob. Detektor zostanie wywołany, gdy moduł cieniujący zakończy pracę: function completeHandler(event:ShaderEvent):void
{
// do something with the shader result
}
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);
Następnie należy utworzyć obiekt, do którego po zakończeniu operacji zostanie zapisany wynik działania modułu cieniującego. Obiekt ten należy przypisać do właściwości target obiektu ShaderJob. var jobResult:BitmapData = new BitmapData(100, 75); job.target = jobResult; Jeśli do przetwarzania obrazu jest stosowana klasa ShaderJob, należy przypisać wystąpienie klasy BitmapData do właściwości target. Jeśli przetwarzane są dane binarne lub liczbowe, należy przypisać obiekt ByteArray lub wystąpienie klasy Vector.<Number> do właściwości target. W takim przypadku należy ustawić właściwości width i height obiektu ShaderJob w celu określenia ilości danych, jakie zostaną przekazane na wyjściu do obiektu target. Uwaga: Właściwości shader, target,width i height obiektu ShaderJob można ustawić w jednym kroku, przekazując argumenty do konstruktora ShaderJob() na przykład za pomocą kodu var zadanie:ShaderJob = new ShaderJob(modul_cieniujacy, element_docelowy, szerokosc, wysokosc);.
Po przygotowaniu uruchomienia modułu cieniującego należy wywołać metodę start() obiektu ShaderJob. job.start(); Domyślnie wywołanie metody start() powoduje, że obiekt ShaderJob działa asynchronicznie. W takim przypadku wykonywanie programu jest kontynuowane bezpośrednio z kolejnym wierszem kodu — program nie oczekuje na zakończenie działania modułu cieniującego. Po zakończeniu działania modułu cieniującego obiekt ShaderJob wywołuje jego detektory zdarzenia complete, powiadamiając je o zakończeniu. W tym punkcie (w treści detektora zdarzenia complete) obiekt target zawiera wynik działania modułu cieniującego. Uwaga: Zamiast korzystać z właściwości target obiektu, można pobrać wynik działania modułu cieniującego bezpośrednio z obiektu zdarzenia, który został przekazany do metody detektora. Obiekt zdarzenia jest wystąpieniem klasy ShaderEvent. Obiekt ShaderEvent ma trzy właściwości, za pomocą których można uzyskać dostęp do wyniku — w zależności od typu danych obiektu ustawionego jako właściwość target: ShaderEvent.bitmapData, ShaderEvent.byteArray i ShaderEvent.vector.
Innym rozwiązaniem jest przekazanie argumentu true do metody start(). W tym przypadku moduł cieniujący będzie działał w sposób synchroniczny. Wykonywanie całego kodu (łącznie z interakcjami z interfejsem użytkownika i innymi zdarzeniami) zostaje wstrzymane podczas działania modułu cieniującego. Po zakończeniu działania modułu cieniującego obiekt target zawiera wynik działania modułu, a działanie programu jest kontynuowane od następnego wiersza kodu. job.start(true); |
|