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);