Acceso a los metadatos de sombreado

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

Al crear un núcleo de sombreado de Pixel Bender, el autor puede especificar los metadatos del sombreado en el código fuente de Pixel Bender. Al utilizar un sombreado en ActionScript, puede examinar el sombreado y extraer sus metadatos.

Al crear una instancia de Shader y vincularla a un sombreado de Pixel Bender, se crea un objeto ShaderData que contiene datos sobre el sombreado y se almacena en la propiedad data del objeto Shader. La clase ShaderData no define propiedades propias. Sin embargo, en tiempo de ejecución una propiedad se añade dinámicamente al objeto ShaderData para cada valor de metadatos definido en el código fuente del sombreado. El nombre dado a cada propiedad es el mismo que el especificado en los metadatos. Por ejemplo, supongamos que el código fuente de un sombreado de Pixel Bender incluye la siguiente definición de metadatos:

namespace : "Adobe::Example"; 
vendor : "Bob Jones"; 
version : 1; 
description : "Creates a version of the specified image with the specified brightness.";

El objeto ShaderData creado para dicho sombreado se genera con las propiedades y valores siguientes:

  • namespace (String): "Adobe::Example"

  • vendor (String): "Bob Jones"

  • version (String): "1"

  • description (String): "Crea una versión de la imagen especificada con el brillo especificado"

Debido a que las propiedades de metadatos se añaden dinámicamente al objeto ShaderData, el bucle for..in se puede utilizar para examinar el objeto ShaderData. Esta técnica permite determinar si el sombreado contiene metadatos y cuáles son los valores de estos. Además de las propiedades de metadatos, los objetos ShaderData pueden contener propiedades que representan entradas y parámetros definidos en el sombreado. Al utilizar un bucle for..in para examinar un objeto ShaderData, es necesario comprobar los tipos de datos de cada propiedad para determinar si la propiedad es una entrada (una instancia de ShaderInput), un parámetro (una instancia de ShaderParameter) o un valor de metadatos (una instancia de String). El ejemplo siguiente muestra cómo utilizar un bucle for..in para examinar las propiedades dinámicas de la propiedad data de un sombreado. Cada valor de metadatos se añade a una instancia de Vector denominada metadata . Es necesario tener en cuenta que en este ejemplo se asume que ya se ha creado una instancia de Shader denominada myShader :

var shaderData:ShaderData = myShader.data; 
var metadata:Vector.<String> = new Vector.<String>(); 
 
for (var prop:String in shaderData) 
{ 
    if (!(shaderData[prop] is ShaderInput) && !(shaderData[prop] is ShaderParameter)) 
    { 
        metadata[metadata.length] = shaderData[prop]; 
    } 
} 
 
// do something with the metadata

Para obtener una versión de este ejemplo que también extrae entradas y parámetros de sombreado, consulte Identificación de entradas y parámetros de sombreado . Para obtener más información sobre las propiedades de entrada y parámetro, consulte Especificación de valores de entrada y parámetro de sombreado .