Pacote | flash.display |
Classe | public class Shader |
Herança | Shader Object |
Subclasses | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10, AIR 1.5 |
shader
de um objeto ShaderFilter.
Um shader define uma função executada em todos os pixels de uma imagem, um pixel por vez. O resultado de cada chamada para a função é a cor de saída nessa coordenada de pixel da imagem. Um shader pode especificar uma ou mais imagens de entrada cujo conteúdo pode ser usado para determinar a saída da função. Um shader também pode especificar um ou mais parâmetros, que são valores de entrada que você pode usar no cálculo da saída da função. Em uma execução de shader exclusiva, os valores de entrada e parâmetro são constantes. A única coisa variável é a coordenada do pixel cuja cor é o resultado da função. A função Shader chama várias coordenadas de pixel de saída executadas paralelamente para melhorar o desempenho da execução do shader.
O código de bytes do shader pode ser carregado durante o runtime usando uma ocorrência de URLLoader. O exemplo a seguir demonstra o carregamento de um arquivo de código de bytes do shader durante o runtime e sua vinculação a uma ocorrência de Shader.
var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(new URLRequest("myShader.pbj")); var shader:Shader; function onLoadComplete(event:Event):void { // Create a new shader and set the loaded data as its bytecode shader = new Shader(); shader.byteCode = loader.data; // You can also pass the bytecode to the Shader() constructor like this: // shader = new Shader(loader.data); // do something with the shader }
Você também pode incorporar o shader ao SWF durante a compilação usando a tag de metadados [Embed]
. A tag de metadados [Embed]
só permanece disponível caso você use o SDK do Flex para compilar o SWF. A tag [Embed]
com seu parâmetrosource
aponta para o arquivo do shader, e o parâmetro mimeType
é "application/octet-stream"
, como neste exemplo:
[Embed(source="myShader.pbj", mimeType="application/octet-stream)] var MyShaderClass:Class; // ... // create a new shader and set the embedded shader as its bytecode var shaderShader = new Shader(); shader.byteCode = new MyShaderClass(); // You can also pass the bytecode to the Shader() constructor like this: // var shader:Shader = new Shader(new MyShaderClass()); // do something with the shader
Qualquer que seja o caso, você vincula o shader bruto (a propriedade URLLoader.data
ou uma ocorrência da classe de dados [Embed]
) à ocorrência de Shader. Como demonstraram os exemplos anteriores, é possível fazer isso de duas formas. Você pode passar o código de bytes do shader como um argumento para o construtor Shader()
. Você também pode defini-lo como a propriedade byteCode
da ocorrência de Shader.
Depois de criada, uma ocorrência de Shader pode ser usada de várias formas:
- Um preenchimento de shader: A saída do shader é usada como um preenchimento do conteúdo desenhado com a API de desenho. Passe a ocorrência de Shader como um argumento para o método
Graphics.beginShaderFill()
. - Um filtro de shader: A saída do shader é usada como um filtro gráfico aplicado a um objeto de exibição. Atribua a ocorrência de Shader à propriedade
shader
de uma ocorrência de ShaderFilter. - Um modo de mesclagem: A saída do shader é processada como sendo a mesclagem entre dois objetos de exibição sobrepostos. Atribua a ocorrência de Shader à propriedade
blendShader
do objeto de exibição superior. - Processamento do shader no segundo plano: O shader é executado em segundo plano, o que evita a possibilidade de congelamento da exibição e despacha um evento quando o processamento é concluído. Atribua a ocorrência de Shader à propriedade
shader
de uma ocorrência de ShaderJob.
Os preenchimentos com sombreamento, os filtros, e as misturas não são compatíveis com a renderização pela GPU.
Suporte a navegador móvel: não há suporte para este recurso em navegadores móveis.
Suporte a perfil do AIR: este recurso conta com o suporte de todos os sistemas operacionais para desktop, mas nenhum dispositivo móvel oferece suporte para ele. Não é compatível com dispositivos AIR for TV. Consulte Suporte a perfil do AIR para obter mais informações sobre o suporte de API através de múltiplos perfis.
Elementos da API relacionados
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Propriedade | Definido por | ||
---|---|---|---|
byteCode : ByteArray [somente gravação]
O código de bytes do shader bruto da ocorrência de Shader. | Shader | ||
constructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. | Object | ||
data : ShaderData
Fornece acesso a parâmetros, imagens de entrada e metadados da ocorrência de Shader. | Shader | ||
precisionHint : String
A precisão das operações matemáticas realizadas pelo shader. | Shader |
Método | Definido por | ||
---|---|---|---|
Cria uma nova ocorrência de Shader. | Shader | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Retorna o valor primitivo do objeto especificado. | Object |
byteCode | propriedade |
data | propriedade |
data:ShaderData
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10, AIR 1.5 |
Fornece acesso a parâmetros, imagens de entrada e metadados da ocorrência de Shader. Objetos ShaderParameter que representam parâmetros do shader, objetos ShaderInput que representam as imagens de entrada do shader e outros valores que representam os metadados do shader são adicionados dinamicamente como propriedades do objeto de propriedade data
quando a ocorrência de Shader é criada. Você pode usar essas propriedades para examinar o shader e definir os valores de entrada e parâmetro.
Para obter informações sobre o acesso e a manipulação das propriedades dinâmicas do objeto data
, consulte a descrição da classe ShaderData.
Implementação
public function get data():ShaderData
public function set data(value:ShaderData):void
Elementos da API relacionados
precisionHint | propriedade |
precisionHint:String
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 10, AIR 1.5 |
A precisão das operações matemáticas realizadas pelo shader.
O conjunto de valores possíveis para a propriedade precisionHint
é definido pelas constantes na classe ShaderPrecision.
O valor padrão é ShaderPrecision.FULL
. Definir a precisão como ShaderPrecision.FAST
pode acelerar operações matemáticas em detrimento da precisão.
O modo de precisão total (ShaderPrecision.FULL
) computa todas as operações matemáticas em toda a largura do padrão flutuante IEEE de 32 bits e fornece um comportamento consistente em todas as plataformas. Nesse modo, algumas operações matemáticas como, por exemplo, funções trigonométricas e exponenciais, podem ser lentas.
O modo de precisão rápido (ShaderPrecision.FAST
) foi projetado tendo em vista o desempenho máximo, mas não funciona de maneira consistente em plataformas diferentes e configurações individuais de CPUs. Em muitos casos, isso nível de precisão é suficiente para criar efeitos gráficos sem artefatos visíveis.
A seleção do modo de precisão afeta as seguintes operações de shader. Essas operações são mais rápidas em um processador Intel com a instrução SSE definida:
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan(x, y)
exp(x)
exp2(x)
log(x)
log2(x)
pow(x, y)
reciprocal(x)
sqrt(x)
Implementação
public function get precisionHint():String
public function set precisionHint(value:String):void
Elementos da API relacionados
Shader | () | Construtor |
Este exemplo supõe a existência de um arquivo de código de bytes do sombreador chamado "donothing.pbj" no mesmo diretório do diretório de saída do aplicativo. O código-fonte de Pixel Bender para o shader DoNothing está disponível no exemplo de classe ShaderData.
package { import flash.display.Shader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class LoadedShaderExample extends Sprite { private var loader:URLLoader; public function LoadedShaderExample() { loader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loadCompleteHandler); loader.load(new URLRequest("donothing.pbj")); } private function loadCompleteHandler(event:Event):void { var shader:Shader = new Shader(); shader.byteCode = loader.data; // do something with the Shader instance } } }
O exemplo supõe a existência de um arquivo de código de bytes do sombreador chamado "donothing.pbj" no mesmo diretório do código-fonte do aplicativo e o uso do SDK do Flex na compilação do SWF. O código-fonte de Pixel Bender para o shader DoNothing está disponível no exemplo de classe ShaderData.
package { import flash.display.Shader; import flash.display.Sprite; public class EmbeddedShaderExample extends Sprite { [Embed(source="donothing.pbj", mimeType="application/octet-stream")] private static var DoNothingShader:Class; public function EmbeddedShaderExample() { var shader:Shader = new Shader(); shader.byteCode = new DoNothingShader(); // do something with the Shader instance } } }
Wed Jun 13 2018, 11:10 AM Z