Använda en skuggning i fristående läge

Flash Player 10 och senare, Adobe AIR 1.5 och senare

När du använder en skuggning i fristående läge körs skuggningsbearbetningen oberoende av hur du tänker använda resultatet. Du anger vilken skuggning som ska köras, ställer in indata- och parametervärden och anger vilket objekt som resultatdata ska placeras i. Du kan använda en skuggning i fristående läge av två anledningar:

  • Bearbeta andra data än bilddata: I fristående läge kan du välja att skicka godtyckliga binära data eller taldata till skuggningen i stället för bitmappsbilddata. Du kan välja att skuggningsresultatet returneras som binära data eller taldata förutom som bitmappsdata.

  • Bakgrundsbearbetning: När du kör en skuggning i fristående läge körs skuggningen som standard asynkront. Det innebär att skuggningen körs i bakgrunden medan programmet fortsätter att köras, och koden meddelas när skuggningsbearbetningen är klar. Du kan använda en skuggning som tar längre tid att köra och inte låser programmets användargränssnitt eller annan bearbetning medan skuggningen körs.

Med ett ShaderJob-objekt kan du köra en skuggning i fristående läge. Först skapar du ShaderJob-objektet och länkar det till Shader-objektet som representerar skuggningen som ska köras:

var job:ShaderJob = new ShaderJob(myShader);

Sedan ställer du in alla indata- eller parametervärden som skuggningen förväntar. Om du kör skuggningen i bakgrunden registrerar du även en avlyssnare för ShaderJob-objektets complete-händelse. Avlyssnaren anropas när skuggningen avslutas:

function completeHandler(event:ShaderEvent):void 
{ 
    // do something with the shader result 
} 
 
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);

Sedan skapar du ett objekt där skuggningsåtgärdens resultat sparas när åtgärden är klar. Du tilldelar det objektet till ShaderJob-objektets target-egenskap:

var jobResult:BitmapData = new BitmapData(100, 75); 
job.target = jobResult;

Tilldela en BitmapData-instans till target-egenskapen om du använder ShaderJob för att bearbeta bilder. Om du bearbetar binära data eller taldata tilldelar du ett ByteArray-objekt eller en Vector.<Number>-instans till egenskapen target. I så fall måste du ställa in ShaderJob-objektets width- och height-egenskaper så att de anger den mängd data som ska skickas till target-objektet.

Obs! Du kan ställa in ShaderJob-objektets shader-, target-, width- och height-egenskaper i ett enda steg genom att skicka argumenten till ShaderJob()-konstruktorn, så här:var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);

När du är klar att köra skuggningen anropar du ShaderJob-objektets start()-metod:

job.start();

Om du anropar start() körs ShaderJob som standard asynkront. I så fall fortsätter programkörningen omedelbart med nästa kodrad i stället för att vänta på att skuggningen ska bli klar. När skuggningsåtgärden är klar anropar ShaderJob-objektet sina complete-händelseavlyssnare och meddelar dem att åtgärden är klar. Vid den här punkten (det vill säga i brödtexten till complete-händelseavlyssnaren) innehåller target-objektet skuggningsåtgärdens resultat.

Obs! I stället för att använda target-egenskapsobjektet kan du hämta skuggningsresultatet direkt från det händelseobjekt som skickas till avlyssnarmetoden. Händelseobjektet är en ShaderEvent-instans. ShaderEvent-objektet har tre egenskaper som du kan använda för att komma åt resultatet, beroende på datatypen för det objekt du anger som target-egenskap: ShaderEvent.bitmapData, ShaderEvent.byteArray och ShaderEvent.vector.

Du kan också skicka ett true-argument till metoden start(). I så fall körs skuggningsåtgärden synkront. All kod (inklusive interaktion med användargränssnittet och andra händelser) gör en paus medan skuggningen körs. När skuggningen är klar innehåller target-objektet skuggningsresultatet och programmet fortsätter med nästa kodrad.

job.start(true);