Uso de un sombreado en modo autónomo

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

Cuando se utiliza un sombreado en modo autónomo, el procesamiento del sombreado se ejecuta independientemente de cómo se vaya a utilizar la salida. Se especifica un sombreado para ejecutar, se establecen los valores de parámetro y entrada y se designa un objeto en el que se sitúan los datos del resultado. Un sombreado se puede emplear en modo autónomo por dos motivos:

  • Procesamiento de datos que no son de imagen: en el modo autónomo, puede optar por transmitir datos numéricos o binarios arbitrarios al sombreado en lugar de datos de imagen de mapa de bits. Puede optar por que el resultado del sombreado se devuelva como datos binarios o numéricos además de como datos de imagen de mapa de bits.

  • Procesamiento en segundo plano: cuando un sombreado se ejecuta en modo autónomo, de forma predeterminada se hace asíncronicamente. Esto significa que el sombreado se ejecuta en segundo plano mientras la aplicación continúa en ejecución y el código se notifica cuando finaliza el procesamiento del sombreado. Puede utilizar un sombreado que tarde más tiempo en ejecutarse y no bloquee la interfaz de usuario de la aplicación u otro procesamiento mientras que el sombreado se esté ejecutando.

Puede utilizar un objeto ShaderJob para ejecuta un sombreado en modo autónomo. En primer lugar cree un objeto ShaderJob y vincúlelo al objeto Shader que representa el sombreado que se va a ejecutar:

var job:ShaderJob = new ShaderJob(myShader);

A continuación, se establecen todos los valores de parámetro o entrada que espera el sombreado. Si está ejecutando el sombreado en segundo plano, también se registra un detector para el evento complete del objeto ShaderJob. El detector se llama cuando el sombreado finaliza su tarea:

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

A continuación, se crea un objeto en el que se escribe el resultado de la operación de sombreado cuando finaliza la operación. Ese objeto se asigna a la propiedad target del objeto ShaderJob:

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

Asigne una instancia de BitmapData a la propiedad target si está utilizando ShaderJob para realizar el procesamiento de imagen. Si va a procesar datos numéricos o binarios, asigne un objeto ByteArray o instancia de Vector.<Number> a la propiedad target . En este caso, debe establecer las propiedades width y height del objeto ShaderJob para que especifiquen la cantidad de datos de salida en el objeto target .

Nota: se pueden establecer las propiedades shader , target , width y height del objeto ShaderJob en un paso transmitiendo argumentos al constructor ShaderJob() , del siguiente modo: var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);

Cuando esté listo para ejecutar el sombreado, puede llamar al método start( ) del objeto ShaderJob:

job.start();

De forma predeterminada, la llamada a start() hace que ShaderJob se ejecute asincrónicamente. En ese caso, la ejecución del programa continúa inmediatamente con la siguiente línea de código en lugar de esperar a que termine el sombreado. Una vez terminada la operación del sombreado, el objeto ShaderJob llama a sus detectores de eventos complete , notificándoles que se ha finalizado. En este punto (es decir, en el cuerpo del detector de eventos complete ) el objeto target contiene el resultado de la operación de sombreado.

Nota: en lugar de utilizar el objeto de propiedad target , puede recuperar el resultado del sombreado directamente del objeto de evento que se transmite al método detector. El objeto de evento es una instancia de ShaderEvent. El objeto ShaderEvent tiene tres propiedades que se pueden utilizar para acceder al resultado, dependiendo del tipo de datos del objeto que se establezca como propiedad target : ShaderEvent.bitmapData , ShaderEvent.byteArray y ShaderEvent.vector .

De forma alternativa, puede pasar un argumento true al método start() . En ese caso, la operación de sombreado se ejecuta sincrónicamente. Todo el código (incluyendo la interacción con la interfaz de usuario y cualquier otro evento) se detiene mientras se ejecuta el sombreado. Cuando el sombreado finaliza, el objeto target contiene el resultado del proceso y el programa continúa con la siguiente línea de código.

job.start(true);