Paquete | flash.display |
Clase | public class Shader |
Herencia | Shader Object |
Subclases | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
shader
de un objeto ShaderFilter.
Un sombreado define una función que se ejecuta en todos los píxeles de la imagen, de uno en uno. El resultado de cada llamada a la función es el color de salida en las coordenadas del píxel de la imagen. Un sombreado puede especificar una o varias imágenes de entrada, que son imágenes cuyo contenido se puede utilizar para determinar la salida de la función. Un sombreado también puede especificar uno o varios parámetros, que son valores de entrada que se pueden utilizar para calcular la salida de la función. En una ejecución de sombreado sencilla, los valores de los parámetros de entrada son constantes. Lo único que varía son las coordenadas del píxel cuyo color es el resultado de la función. Las llamadas a la función Shader para varias coordenadas de píxeles de salida se ejecutan en paralelo para mejorar el rendimiento de ejecución del sombreado.
El código de bytes de sombreado se puede cargar en tiempo de ejecución mediante una instancia de URLLoader. En el siguiente ejemplo se muestra la carga de un archivo de código de bytes de sombreado en tiempo de ejecución y su vinculación a una instancia 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 }
También puede incorporar el sombreado en el archivo SWF en tiempo de compilación mediante la etiqueta de metadatos [Embed]
. La etiqueta de metadatos [Embed]
sólo está disponible si utiliza el SDK de Flex para compilar el archivo SWF. El parámetro source
de la etiqueta [Embed]
apunta al archivo de sombreado, y su parámetro mimeType
es "application/octet-stream"
, como se muestra en este ejemplo:
[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
En cualquier caso, se vincula el sombreado sin procesar (la propiedad URLLoader.data
o una instancia de la clase de datos [Embed]
) a la instancia de Shader. Como se mostraba en los ejemplos anteriores, esto se puede realizar de dos formas. Puede transferir el código de bytes de sombreado como un argumento al constructor Shader()
. También puede establecerlo como la propiedad byteCode
de la instancia de Shader.
Una vez creada la instancia de Shader, se puede utilizar de diversos modos:
- Un relleno de sombreado: la salida del sombreado se utiliza como relleno del contenido dibujado con la API de dibujo. Transfiera la instancia de Shader como un argumento al método
Graphics.beginShaderFill()
. - Un filtro de sombreado: la salida del sombreado se utiliza como filtro gráfico aplicado al objeto de visualización. Asigne la instancia de Shader a la propiedad
shader
de una instancia de ShaderFilter. - Un modo de mezcla: la salida del sombreado se representa como la mezcla entre dos objetos de visualización superpuestos. Asigne la instancia de Shader a la propiedad
blendShader
del objeto de visualización superior. - Procesamiento de sombreado en segundo plano: el sombreado se ejecuta en segundo plano, evitando así que la pantalla se bloquee. Distribuye un evento cuando finaliza el procesamiento. Asigne la instancia de Shader a la propiedad
shader
de una instancia de ShaderJob.
Los rellenos de sombreado, los filtros y las combinaciones no son compatibles en procesamiento de GPU.
Soporte con navegador móvil: esta función no se admite en navegadores móviles.
Compatibilidad con perfil de AIR: esta característica se admite en todos los sistemas operativos de escritorio, pero no en todos los dispositivos móviles. No se admite en dispositivos de AIR para TV. Consulte Compatibilidad con perfil de AIR para obtener información sobre la compatibilidad de la API con varios perfiles.
Elementos de API relacionados
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Propiedad | Definido por | ||
---|---|---|---|
byteCode : ByteArray [solo escritura]
El código de bytes de sombreado sin procesar para esta instancia de Shader. | Shader | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
data : ShaderData
Proporciona acceso a los parámetros, imágenes de entrada y metadatos de la instancia de Shader. | Shader | ||
precisionHint : String
La precisión de las operaciones matemáticas realizadas por el sombreado. | Shader |
Método | Definido por | ||
---|---|---|---|
Crea una nueva instancia de Shader. | Shader | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object |
byteCode | propiedad |
data | propiedad |
data:ShaderData
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
Proporciona acceso a los parámetros, imágenes de entrada y metadatos de la instancia de Shader. Los objetos ShaderParameter que representan los parámetros del sombreado, los objetos ShaderInput que representan las imágenes de entrada del sombreado y otros valores que representan los metadatos del sombreado se añaden automáticamente como propiedades del objeto data
cuando se crea la instancia de Shader. Estas propiedades se pueden utilizar para ocultar el sombreado y definir los parámetros y los valores de entrada.
Para obtener información sobre el acceso y la manipulación de las propiedades dinámicas del objeto data
, consulte la descripción de la clase ShaderData.
Implementación
public function get data():ShaderData
public function set data(value:ShaderData):void
Elementos de API relacionados
precisionHint | propiedad |
precisionHint:String
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
La precisión de las operaciones matemáticas realizadas por el sombreado.
El conjunto de valores posibles de la propiedad precisionHint
se define con las constantes de la clase ShaderPrecision.
El valor predeterminado es ShaderPrecision.FULL
. Si establece la precisión como ShaderPrecision.FAST
, las operaciones matemáticas se realizan más rápido pero la precisión es menor.
El modo de precisión total (ShaderPrecision.FULL
) calcula todas las operaciones de cálculo según la norma IEEE de 32 bits flotantes y proporciona un comportamiento coherente en todas las plataformas. En este modo, algunas operaciones matemáticas, como las funciones trigonométricas y exponenciales, pueden ser lentas.
El modo de precisión rápida (ShaderPrecision.FAST
) está diseñado para obtener el mejor rendimiento, pero no funciona d forma coherente en todas las plataformas o configuraciones de CPU. En muchos casos, este nivel de precisión es suficiente para crear efectos gráficos sin elementos visibles.
La selección del modo de precisión afecta a las siguientes operaciones de sombreado. Estas operaciones son más rápidas en procesadores Intel con el juego de instrucciones SSE:
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)
Implementación
public function get precisionHint():String
public function set precisionHint(value:String):void
Elementos de API relacionados
Shader | () | Información sobre |
Tenga en cuenta que este ejemplo asume que existe un archivo de código de bytes de sombreado llamado "donothing.pbj" en el mismo directorio que el directorio de salida de la aplicación. El código fuente de Pixel Bender para el sombreado DoNothing está disponible en el ejemplo de la clase 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 } } }
Tenga en cuenta que este ejemplo asume la existencia de un archivo de código de bytes de sombreado llamado "donothing.pbj" en el mismo directorio que el código fuente de la aplicación, y se utiliza el SDK de Flex para compilar el archivo SWF. El código fuente de Pixel Bender para el sombreado DoNothing está disponible en el ejemplo de la clase 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 } } }
Tue Jun 12 2018, 02:12 PM Z