Uso de um sombreador no modo autônomo

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

Quando você usa um sombreador no modo autônomo, o processamento do sombreador é executado independentemente do modo como você pretende usar a saída. Você especifica o sombreador a ser executado, define valores de entrada e de parâmetro e designa um objeto em que são colocados os dados resultantes. Você pode usar um sombreador no modo autônomo por dois motivos:

  • Processamento de dados não de imagem: no modo autônomo, você pode optar por passar dados binários ou numéricos arbitrários para o sombreador em vez de dados de imagem de bitmap. Você pode determinar que o resultado do sombreador seja retornado como dados binários ou numéricos além dos dados de imagem de bitmap.

  • Processamento em segundo plano: Quando você executa um sombreador no modo autônomo, por padrão ele é executado de maneira assíncrona. Isso significa que o sombreador é executado em segundo plano enquanto o aplicativo continua a executar, e o código recebe uma notificação quando o processamento do sombreador é concluído. Você pode usar um sombreador que demora bastante tempo para ser executado e não congela a interface de usuário do aplicativo ou outro processamento enquanto o sombreador está em execução.

Use um objeto ShaderJob para executar um sombreador no modo autônomo. Primeiro você deve criar o objeto ShaderJob e vinculá-lo ao objeto Shader que representa o sombreador a ser executado:

var job:ShaderJob = new ShaderJob(myShader);

Em seguida, defina quaisquer valores de entrada ou de parâmetro esperados pelo sombreador. Se estiver executando o sombreador em segundo plano, você também deverá registrar um ouvinte para o evento complete do objeto ShaderJob. O ouvinte será chamado quando o sombreador concluir seu trabalho:

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

Em seguida, crie um objeto no qual o resultado da operação do sombreador será gravado quando a operação for concluída. Atribua esse objeto à propriedade target do objeto ShaderJob:

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

Atribua uma ocorrência de BitmapData à propriedade target , caso você esteja usando ShaderJob para executar o processamento da imagem. Se estiver processando dados binários ou numéricos, atribua um objeto ByteArray ou uma ocorrência de Vector.<Number> para a propriedade target . Nesse caso, você deve definir as propriedades width e height do objeto ShaderJob para especificar o volume de dados a ser gerado para o objeto target .

Nota: É possível definir as propriedades shader , target , width e height do objeto ShaderJob em uma única etapa passando argumentos para o construtor ShaderJob() , da seguinte forma: var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);

Quando estiver pronto para executar o sombreador, chame o método start() do objeto ShaderJob:

job.start();

Por padrão, chamar start() faz com que ShaderJob seja executado de maneira assíncrona. Nesse caso, a execução do programa prossegue imediatamente com a próxima linha de código, em vez de esperar a conclusão do sombreador. Quando a operação do sombreador é concluída, o objeto ShaderJob chama seus ouvintes de evento complete , notificando-os sobre o término da execução. Nesse momento (isto é, no corpo do ouvinte de evento complete ), o objeto target contém o resultado da operação do sombreador.

Nota: Em vez de usar o objeto da propriedade target , você pode recuperar o resultado do sombreador diretamente do objeto do evento que é passado para o método do ouvinte. O objeto de evento é uma ocorrência de ShaderEvent. O objeto ShaderEvent tem três propriedades que podem ser usadas para acessar o resultado, dependendo do tipo de dados do objeto definido como a propriedade target : ShaderEvent.bitmapData , ShaderEvent.byteArray e ShaderEvent.vector .

Se preferir, você pode passar um argumento true para o método start() . Nesse caso, a operação do sombreador será executada de maneira síncrona. Todo o código (inclusive a interação com a interface de usuário e quaisquer outros eventos) é pausado enquanto o sombreador é executado. Quando o sombreador é concluído, o objeto target contém o resultado do sombreador e o programa prossegue com a próxima linha de código.

job.start(true);