Använda en skuggning i fristående lägeFlash 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:
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); |
|