Läsa in eller bädda in en skuggning

Flash Player 10 och senare, Adobe AIR 1.5 och senare

Det första steget när du använder en Pixel Bender-skuggning i ActionScript är att få åtkomst till skuggningen i ActionScript-koden. Eftersom en skuggning skapas med Adobes Pixel Bender-verktygslådan, och skrivs i Pixel Bender-språket, kan det inte nås direkt i ActionScript. I stället skapar du en instans av klassen Shader som representerar Pixel Bender-skuggningen för ActionScript. Med Shader-objektet kan du ta reda på information om skuggningen, till exempel om den förväntar sig parametrar eller värden för indatabilder. Du skickar Shader-objektet till andra objekt när du vill använda skuggningen. Om du till exempel vill använda skuggningen som ett filter tilldelar du Shader-objektet till shader-egenskapen i ett ShaderFilter-objekt. Om du i stället vill använda skuggningen som en fyllning skickar du Shader-objektet som ett argument till metoden Graphics.beginShaderFill().

ActionScript-koden får tillgång till en skuggning som skapats med Adobes Pixel Bender-verktygslådan (en .pbj-fil) på två sätt:

  • Inläsning vid körning: skuggningsfilen kan läsas in som en extern resurs med hjälp av ett URLLoader-objekt. Den här metoden påminner om att läsa in en extern resurs, till exempel en textfil. Följande exempel visar hur en skuggningsbytekodfil läses in vid körning och länkas till en Shader-instans:

    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 
    }
  • Inbäddad i SWF-filen: skuggningsfilen kan bäddas in i SWF-filen vid kompilering med hjälp av metadatataggen [Embed]. Metadatataggen [Embed] är bara tillgänglig om du använder Flex SDK för att kompilera SWF-filen. [Embed]-taggens source-parameter pekar på skuggningsfilen och dess mimeType-parameter är "application/octet-stream", vilket visas i det här exemplet:

    [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

I båda fallen länkar du bytekoden för rådataskuggning (URLLoader.data-egenskapen eller en instans av [Embed]-dataklassen) till Shader-instansen. Så som visas i exemplen ovan kan du tilldela bytekoden till Shader-instansen på två sätt. Du kan skicka skuggningsbytekoden som ett argument till Shader()-konstruktorn. Du kan också ange den som byteCode-egenskap för Shader-instansen.

När en Pixel Bender-skuggning har skapats och länkats till ett Shader-objekt, kan du använda skuggningen för att skapa effekter på olika sätt. Du kan använda den som ett filter, ett blandningsläge, en bitmappsfyllning eller för fristående bearbetning av bitmapps- eller andra data. Du kan också använda Shader-objektets data-egenskap när du vill komma åt skuggningens metadata, ange indatabilder och ställa in parametervärden.