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);