Uso di uno shader in modalità autonomaFlash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive Quando usate uno shader in modalità autonoma, l'elaborazione dello shader avviene in modo indipendente da come prevedete di sfruttare l'output. Specificate uno shader da eseguire, impostate i valori di input e dei parametri e progettate un oggetto in cui devono essere inseriti i dati risultanti. Potete utilizzare uno shader in modalità autonoma per due motivi:
Potete usare un oggetto ShaderJob per eseguire uno shader in modalità autonoma. In primo luogo create l'oggetto ShaderJob e lo collegate all'oggetto Shader che rappresenta lo shader da eseguire: var job:ShaderJob = new ShaderJob(myShader); Quindi, impostate i valori di input o dei parametri previsti dallo shader. Se eseguite lo shader in background, registrate inoltre un listener per l'evento complete dell'oggetto Shader che viene chiamato al termine dell'elaborazione dello shader: function completeHandler(event:ShaderEvent):void
{
// do something with the shader result
}
job.addEventListener(ShaderEvent.COMPLETE, completeHandler);
Create quindi un oggetto in cui deve essere scritto il risultato dell'operazione dello shader al termine dell'operazione. Assegnate questo oggetto alla proprietà target dell'oggetto ShaderJob: var jobResult:BitmapData = new BitmapData(100, 75); job.target = jobResult; Assegnate un'istanza di BitmapData alla proprietà target se utilizzate l'oggetto ShaderJob per eseguire l'elaborazione di immagini. Se invece elaborate dati binari o numerici, assegnate un oggetto BitArray o un'istanza di Vector.<numero> alla proprietà target. In questo caso, dovete impostare le proprietà width e height dell'oggetto ShaderJob per specificare la quantità di dati da restituire all'oggetto target. Nota: potete impostare le proprietà shader, target, width e height dell'oggetto ShaderJob in un solo passaggio passando argomenti al costruttore ShaderJob() in questo modo: var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
Quando siete pronti a eseguire lo shader, chiamate il metodo start() dell'oggetto ShaderJob: job.start(); Per impostazione predefinita, la chiamata a start() causa l'esecuzione asincrona di ShaderJob, pertanto l'esecuzione del programma continua subito con la riga successiva di codice e non viene atteso il completamento dell'esecuzione dello shader. Al termine dell'esecuzione dello shader, l'oggetto ShaderJob chiama i listener dell'evento complete per notificare il termine dell'esecuzione. A questo punto, ovvero nel corpo del listener dell'evento complete, l'oggetto target contiene il risultato dell'operazione dello shader. Nota: anziché utilizzare l'oggetto proprietà target, potete recuperare il risultato dello shader direttamente dall'oggetto evento che viene passato al metodo del listener. L'oggetto evento è un'istanza di ShaderEvent. L'oggetto ShaderEvent dispone di tre proprietà che possono essere utilizzate per accedere al risultato, in base al tipo di dati dell'oggetto che impostate come proprietà target: ShaderEvent.bitmapData, ShaderEvent.byteArray e ShaderEvent.vector.
In alternativa, potete passare un argomento true al metodo start() affinché il funzionamento dello shader avvenga in modo sincrono. Tutto il codice, compresa l'interazione con l'interfaccia utente e altri eventi, verrà interrotto temporaneamente durante l'esecuzione dello shader. Al termine dell'esecuzione dello shader, l'oggetto target contiene il risultato dello shader e il programma continua con la riga di codice successiva. job.start(true); |
|