Accesso ai metadati dello shader

Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive

Quando create il kernel di uno shader in Pixel Bender, potete specificare i metadati riguardanti lo shader nel codice sorgente di Pixel Bender. Quando usate uno shader in ActionScript, potete esaminare lo shader ed estrarne i metadati.

Quando create un'istanza Shader e la collegate a uno shader di Pixel Bender, viene creato un oggetto ShaderData contenente i dati sullo shader che viene memorizzato nella proprietà data dell'oggetto Shader. La classe ShaderData non definisce direttamente alcuna proprietà. Tuttavia, in fase di runtime all'oggetto ShaderData viene aggiunta dinamicamente una proprietà per ogni valore dei metadati definito nel codice sorgente dello shader. Il nome assegnato ad ogni proprietà è lo stesso che viene specificato nei metadati. Ipotizziamo ad esempio che il codice sorgente di uno shader di Pixel Bender includa la seguente definizione di metadati:

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

L'oggetto ShaderData per tale shader viene creato con le proprietà e i valori seguenti:

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

  • vendor (String): "Bob Jones"

  • version (String): "1"

  • description (String): "Crea una versione dell'immagine selezionata con la luminosità specificata"

Dato che le proprietà dei metadati vengono aggiunte in modo dinamico all'oggetto ShaderData, potete usare un ciclo for....in per esaminare l'oggetto ShaderData. Questa tecnica vi consente di scoprire se allo shader sono associati dei metadati e quali sono i loro valori. Oltre alle proprietà dei metadati, a un oggetto ShaderData possono essere associate altre proprietà che rappresentano gli input e i parametri che sono definiti nello shader. Se usate un ciclo for....in per esaminare un oggetto ShaderData, controllate il tipo di dati di ogni proprietà per determinare se la proprietà sia un input (un'istanza ShaderInput), un parametro (un'istanza ShaderParameter) o un valore di metadati (un'istanza String). L'esempio seguente illustra come utilizzare un ciclo for..in per esaminare le proprietà dinamiche di una proprietà data di uno shader. Ogni valore dei metadati viene aggiunto a un'istanza Vector il cui nome è metadata . Notate che questo esempio presuppone che sia già stata creata un'istanza Shader con nome 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

Per una versione di questo esempio che estragga anche gli input e i parametri dello shader, vedete Identificazione di input e parametri degli shader . Per ulteriori informazioni sulle proprietà di input e dei parametri, vedete Definizione dei valori di input e dei parametri .