Pakiet | flash.display |
Klasa | public class Shader |
Dziedziczenie | Shader Object |
Podklasy | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
shader
obiektu ShaderFilter.
Moduł cieniujący definiuje funkcję, która jest wykonywana na wszystkich pikselach w obrazie, po jednym pikselu jednocześnie. Wynik każdego wywołania funkcji to kolor wyjściowy we współrzędnych pikselowych obrazu. Moduł cieniujący może określać jeden lub większą liczbę obrazów wejściowych — są to obrazy, których zawartość może być używana podczas określania wyniku działania funkcji. Moduł cieniujący może również określać jeden lub większą liczbę parametrów — są to wartości wejściowe, które mogą być używane podczas obliczania wyniku działania funkcji. Podczas pojedynczego wykonania instrukcji modułu cieniującego dane wejściowe i parametry są stałe. Zmieniają się tylko współrzędne piksela, którego kolor jest wynikiem działania funkcji. Wywołania funkcji modułu cieniującego dotyczące współrzędnych wielu pikseli wyjściowych są wykonywane równocześnie, co poprawia wydajność wykonywania instrukcji modułu cieniującego.
Kod bajtowy modułu cieniującego może być ładowany w za pomocą instancji URLLoader w trakcie wykonywania. Poniższy przykład przedstawia ładowanie pliku kodu bajtowego modułu cieniującego w trakcie wykonywania oraz połączenie pliku z instancją modułu cieniującego.
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 }
Moduł cieniujący można również osadzić do pliku SWF w czasie kompilacji — w tym celu należy użyć znacznika metadanych [Embed]
. Znacznik metadanych [Embed]
jest dostępny tylko wówczas, jeśli do kompilowania pliku SWF używane jest narzędzie Flex SDK. Parametr source
znacznika [Embed]
wskazuje plik modułu cieniującego, a jego parametr mimeType
ma wartość "application/octet-stream"
, jak w przykładzie:
[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
W każdym przypadku należy połączyć nieprzetworzony moduł cieniujący (właściwość URLLoader.data
lub instancja klasy danych [Embed]
) z instancją modułu cieniującego. Zgodnie z tym, co przedstawiają poprzednie przykłady, można to zrobić na dwa sposoby. Kod bajtowy modułu cieniującego można wprowadzić jako argument do konstruktora Shader()
. Lub można ustawić go jako właściwość byteCode
instancji modułu cieniującego.
Po utworzeniu instancji modułu cieniującego można jej użyć na jeden z następujących sposobów:
- Wypełnienie cieniowane: wynik działania modułu cieniującego jest używany jako wypełnienie zawartości narysowanej za pomocą API rysunków. Należy wprowadzić instancję modułu cieniującego jako argument do metody
Graphics.beginShaderFill()
. - Filtr cieniowania: wynik działania modułu cieniującego jest używany jako filtr graficzny stosowany dla obiektu wyświetlanego. Należy przypisać instancję modułu cieniującego do właściwości
shader
instancji ShaderFilter. - Tryb mieszania: wynik działania modułu cieniującego jest renderowany jako mieszanie między dwoma nachodzącymi na siebie obiektami wyświetlanymi. Należy przypisać instancję modułu cieniującego do właściwości
blendShader
górnego z dwóch wyświetlanych obiektów. - Przetwarzanie modułu cieniującego w tle: instrukcje modułu cieniującego są wykonywane w tle, dzięki czemu nie dochodzi do zamrożenia ekranu — po zakończeniu przetwarzania wywoływane jest zdarzenie. Należy przypisać instancję modułu cieniującego do właściwości
shader
instancji ShaderJob.
W przypadku renderowania GPU nie jest obsługiwane wypełnianie, filtrowanie i mieszanie przy użyciu modułów cieniujących.
Obsługa w przeglądarkach na urządzeniach przenośnych: Ta funkcja nie jest obsługiwana w przeglądarkach na urządzeniach przenośnych.
Obsługa profilów AIR: Ta funkcja jest obsługiwana we wszystkich systemach operacyjnych dla komputerów stacjonarnych, ale nie jest obsługiwana na niektórych urządzeniach przenośnych. Nie jest też obsługiwana na urządzeniach telewizyjnych ze środowiskiem AIR. Więcej informacji o obsłudze elementów interfejsu API w różnych profilach można znaleźć w sekcji Obsługa profilów aplikacji AIR.
Powiązane elementy interfejsu API
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
byteCode : ByteArray [tylko do zapisu]
Nieprzetworzony kod bajtowy modułu cieniującego dla tej instancji modułu cieniującego. | Shader | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
data : ShaderData
Zapewnia dostęp do parametrów, obrazów wejściowych i metadanych dla instancji modułu cieniującego. | Shader | ||
precisionHint : String
Dokładność operacji matematycznych wykonywanych przez moduł cieniujący. | Shader |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Tworzy nową instancję modułu cieniującego. | Shader | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
byteCode | właściwość |
data | właściwość |
data:ShaderData
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Zapewnia dostęp do parametrów, obrazów wejściowych i metadanych dla instancji modułu cieniującego. Obiekty ShaderParameter reprezentujące parametry dla modułu cieniującego, obiekty ShaderInput reprezentujące obrazy wejściowe dla modułu cieniującego oraz inne wartości reprezentujące metadane modułu są dynamicznie dodawane jako właściwości należące do obiektu właściwości data
podczas tworzenia instancji modułu cieniującego. Te właściwości mogą być używane w celu sprawdzania modułu cieniującego oraz ustawiania parametrów i wartości wejściowych.
Informacje dotyczące uzyskiwania dostępu i manipulowania właściwościami dynamicznymi obiektu data
zawiera opis klasy ShaderData.
Implementacja
public function get data():ShaderData
public function set data(value:ShaderData):void
Powiązane elementy interfejsu API
precisionHint | właściwość |
precisionHint:String
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Dokładność operacji matematycznych wykonywanych przez moduł cieniujący.
Zestaw możliwych wartości dla właściwości precisionHint
jest zdefiniowany przez stałe w klasie ShaderPrecision.
Wartością domyślną jest ShaderPrecision.FULL
. Ustawienie ShaderPrecision.FAST
dla dokładności może przyspieszyć wykonywanie operacji matematycznych i może prowadzić do zmniejszenia dokładności.
Tryb pełnej dokładności (ShaderPrecision.FULL
) wykonuje wszystkie operacje matematyczne do pełnej szerokości 32-bitowego standardu zmiennopozycyjnego IEEE i zapewnia spójne działanie na wszystkich platformach. W tym trybie niektóre operacje matematyczne, takie jak funkcje trygonometryczne i wykładnicze, mogą być wykonywane powoli.
Tryb szybkiej dokładności (ShaderPrecision.FAST
) jest przeznaczony dla maksymalnej wydajności, ale nie działa spójnie na wszystkich platformach i w poszczególnych konfiguracjach procesorów. W wielu przypadkach taka dokładność jest wystarczająca do tworzenia efektów graficznych bez widocznych artefaktów.
Wybór trybu dokładności wpływa na następujące operacje modułu cieniującego. Te operacje są wykonywane szybciej na procesorze Intel z zestawem instrukcji SSE:
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)
Implementacja
public function get precisionHint():String
public function set precisionHint(value:String):void
Powiązane elementy interfejsu API
Shader | () | Konstruktor |
public function Shader(code:ByteArray = null)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Tworzy nowe wystąpienie klasy Shader.
Parametrycode:ByteArray (default = null ) — Nieprzetworzony kod bajtowy modułu cieniującego do połączenia z instancją modułu cieniującego.
|
W tym przykładzie założono, że w tym samym katalogu, co katalog wyjściowy aplikacji, znajduje się plik kodu bajtowego modułu cieniującego o nazwie „donothing.pbj”. Kod źródłowy wtyczki Pixel Bender dla modułu cieniującego DoNothing jest dostępny w sekcji Przykład klasy ShaderData.
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 } } }
W tym przykładzie założono, że w tym samym katalogu, w którym znajduje się kod źródłowy aplikacji, znajduje się plik kodu bajtowego o nazwie „donothing.hbc” oraz że do kompilowania SWF używane jest narzędzie Flex SDK. Kod źródłowy Pixel Bender dla modułu cieniującego DoNothing jest dostępny w sekcji Przykład klasy ShaderData.
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 } } }
Tue Jun 12 2018, 12:06 PM Z