Als u een arcering in zelfstandige modus gebruikt, wordt de arcering uitgevoerd onafhankelijk van het gebruik dat u wilt maken van de uitvoer. U geeft op welke arcering moet worden uitgevoerd, stelt invoer- en parameterwaarden in en geeft op in welk object de resultaatgegevens moeten worden geplaatst. Er zijn twee redenen om een arcering in zelfstandige modus te gebruiken:
-
Verwerken van niet-grafische gegevens: in zelfstandige modus kunt u willekeurige binaire of numerieke gegevens in plaats van grafische bitmapgegevens aan de arcering doorgeven. U kunt het resultaat van de arcering niet alleen als grafische bitmapgegevens maar ook als binaire of numerieke gegevens laten retourneren.
-
Achtergrondverwerking: wanneer u een arcering in zelfstandige modus uitvoert, wordt de arcering standaard asynchroon uitgevoerd. Dit betekent dat de arcering op de achtergrond wordt uitgevoerd terwijl uw toepassing blijft lopen. Wanneer de arceringsbewerking is voltooid, ontvangt de code een melding. U kunt een arcering gebruiken waarvan de uitvoering lang duurt, zonder dat de gebruikersinterface van de toepassing bevriest of andere processen worden stilgezet terwijl de arcering wordt uitgevoerd.
U kunt een ShaderJob-object gebruiken om een arcering in zelfstandige modus uit te voeren. Eerst maakt u het ShaderJob-object en koppelt u dit aan het Shader-object dat de arcering vertegenwoordigt die moet worden uitgevoerd:
var job:ShaderJob = new ShaderJob(myShader);
Vervolgens stelt u de invoer- of parameterwaarden in die de arcering verwacht. Als u de arcering op de achtergrond uitvoert, kunt u ook een listener registreren voor de gebeurtenis
complete
van het ShaderJob-object. De listener wordt opgeroepen wanneer de arcering het werk heeft voltooid:
function completeHandler(event:ShaderEvent):void
{
// do something with the shader result
}
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);
Vervolgens maakt u een object waarin het resultaat van de arceringsbewerking wordt geschreven nadat de bewerking is voltooid. U wijst dat object toe aan de eigenschap
target
van het ShaderJob-object:
var jobResult:BitmapData = new BitmapData(100, 75);
job.target = jobResult;
Wijs een BitmapData-instantie aan de eigenschap
target
toe als u de ShaderJob gebruikt om grafische gegevens te bewerken. Als u binaire of numerieke gegevens verwerkt, wijst u een ByteArray-object of Vector.<Number>-instantie aan de eigenschap
target
toe. In dat geval moet u de eigenschappen
width
en
height
van het ShaderJob-object instellen om de hoeveelheid gegevens op te geven die naar het
target
-object wordt uitgevoerd.
Opmerking:
U kunt de eigenschappen
shader
,
target
,
width
en
height
van het ShaderJob-object in één stap instellen door argumenten door te geven aan de constructor
ShaderJob()
. U doet dit als volgt:
var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
Wanneer u gereed bent om de arcering uit te voeren, roept u de methode
start()
van het ShaderJob-object aan:
job.start();
Standaard heeft het aanroepen van
start()
tot gevolg dat ShaderJob asynchroon wordt uitgevoerd. In dit geval gaat de uitvoering van het programma direct door met de volgende coderegel en wordt niet gewacht tot de arcering is voltooid. Wanneer de arceringsbewerking is voltooid, roept het ShaderJob-object de listeners voor de gebeurtenis
complete
aan om ze te melden dat de bewerking is voltooid. Op dat punt (dat wil zeggen in de hoofdtekst van de gebeurtenislistener
complete
) bevat het
target
-object het resultaat van de arceringsbewerking.
Opmerking:
In plaats van de eigenschap
target
van het object te gebruiken, kunt u het resultaat van de arcering direct ophalen uit het gebeurtenisobject dat wordt doorgegeven aan de listenermethode. Het gebeurtenisobject is een ShaderEvent-instantie. Het ShaderEvent-object heeft drie eigenschappen die kunnen worden gebruikt om het resultaat te benaderen, afhankelijk van het gegevenstype van het object dat u instelt als de eigenschap
target
:
ShaderEvent.bitmapData
,
ShaderEvent.byteArray
en
ShaderEvent.vector
.
U kunt ook het argument
true
doorgeven aan de methode
start()
. In dat geval wordt de arcering synchroon uitgevoerd. Alle code (inclusief interactie met de gebruikersinterface en eventuele andere gebeurtenissen) wordt stopgezet terwijl de arcering wordt uitgevoerd. Wanneer de arcering is voltooid, bevat het
target
-object het resultaat van de arcering en gaat het programma verder met de volgende coderegel.
job.start(true);