Wczytywanie lub osadzanie modułu cieniującego

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Pierwszym etapem użycia modułu cieniującego Pixel Bender w programie ActionScript jest uzyskanie dostępu do modułu z poziomu kodu ActionScript. Ponieważ moduły cieniujące są tworzone za pomocą pakietu Adobe Pixel Bender Toolkit i napisane w języku Pixel Bender, nie są bezpośrednio dostępne z kodu ActionScript. Można natomiast utworzyć instancję klasy Shader reprezentującą moduł cieniujący Pixel Bender w programie ActionScript. Obiekt Shader umożliwia uzyskiwanie takich informacji o module cieniującym, jak zestaw oczekiwanych parametrów lub wejściowych danych obrazu. Aby użyć modułu cieniującego, obiekt Shader przekazuje się do innych obiektów. Aby na przykład użyć modułu cieniującego jako filtra, należy przypisać obiekt Shader do właściwości shader obiektu ShaderFilter. Alternatywnym rozwiązaniem jest użycie modułu cieniującego jako wypełnienia. W tym celu należy przekazać obiekt Shader jako argument do metody Graphics.beginShaderFill() .

Kod ActionScript może uzyskiwać dostęp do modułu cieniującego utworzonego w pakiecie Adobe Pixel Bender Toolkit (do pliku PBJ) na dwa sposoby:

  • Ładowanie w czasie wykonywania: plik modułu cieniującego można załadować jako zasób zewnętrzny za pomocą obiektu URLLoader. Ta technika przypomina ładowanie zasobu zewnętrznego, takiego jak plik tekstowy. 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 
    }
  • Osadzenie w pliku SWF: Plik modułu cieniującego można osadzić w pliku SWF w czasie kompilacji, korzystając ze znacznika metadanych [Embed] . Znacznik metadanych [Embed] jest dostępny tylko wówczas, jeśli do kompilowania pliku SWF używany jest zestaw SDK środowiska Flex. Parametr source znacznika [Embed] wskazuje plik modułu cieniującego, a jego parametr mimeType ma wartość "application/octet-stream" , tak jak w poniższym przykładzie.

    [Embed(source="myShader.pbj", mimeType="application/octet-stream")] 
    var MyShaderClass:Class; 
     
    // ... 
     
    // create a shader and set the embedded shader as its bytecode 
    var shader:Shader = 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 kod bajtowy modułu cieniującego (właściwość URLLoader.data lub wystąpienie klasy danych [Embed] ) z wystąpieniem klasy Shader. Jak widać w powyższym przykładzie, dostępne są dwie metody przypisania kodu bajtowego do wystąpienia klasy Shader. Kod bajtowy modułu cieniującego można wprowadzić jako argument do konstruktora Shader() . Można także ustawić go jako właściwość byteCode wystąpienia klasy Shader.

Po utworzeniu modułu cieniującego Pixel Bender i powiązaniu go z obiektem Shader można na różne sposoby używać modułu cieniującego w celu tworzenia efektów. Moduł cieniujący może być stosowany jako filtr, tryb mieszania, wypełnienie bitmapą lub do autonomicznego przetwarzania bitmapy bądź innych danych. Korzystając z właściwości data obiektu Shader, można uzyskiwać dostęp do metadanych modułu cieniującego, określać obrazy wejściowe i ustawiać wartości parametrów.