När utvecklaren skapar en Pixel Bender-skuggningskärna, kan han eller hon ange metadata om skuggningen i Pixel Bender-källkoden. När du använder en skuggning i ActionScript kan du undersöka skuggningen och hämta dess metadata.
När du skapar en Shader-instans och länkar den till en Pixel Bender-skuggning, skapas ett ShaderData-objekt som innehåller data om skuggningen och lagras i Shader-objektets
data
-egenskap. Klassen ShaderData definierar inte några egenskaper på egen hand. Under körning läggs en egenskap till dynamiskt i ShaderData-objektet för varje metadatavärde som definieras i skuggningens källkod. Namnet som ges till respektive egenskap är detsamma som namnet som anges i metadata. Anta att källkoden för en Pixel Bender-skuggning omfattar följande metadatadefinition:
namespace : "Adobe::Example";
vendor : "Bob Jones";
version : 1;
description : "Creates a version of the specified image with the specified brightness.";
ShaderData-objektet skapas för den skuggningen med följande egenskaper och värden:
-
namespace
(String):
"Adobe::Example"
-
vendor
(String):
"Bob Jones"
-
version
(String):
"1"
-
description
(String):
"Creates a version of the specified image with the specified brightness"
Eftersom metadataegenskaperna läggs till dynamiskt i ShaderData-objektet kan du använda en
for..in
-slinga när du undersöker ShaderData-objektet. Med den här tekniken kan du ta reda på om skuggningen har några metadata och vilka metadatavärdena är. Förutom metadataegenskaper kan ett ShaderData-objekt ha egenskaper som representerar indata och parametrar som definieras i skuggningen. När du använder en
for..in
-slinga för att undersöka ett ShaderData-objekt kontrollera du datatypen för varje egenskap för att undersöka om egenskapen är indata (en ShaderInput-instans), en parameter (en ShaderParameter-instans) eller ett metadatavärde (en String-instans). Följande exempel visar hur du använder en
for..in
-slinga för att undersöka de dynamiska egenskaperna i en skuggnings
data
-egenskap. Varje metadatavärde läggs till i en Vector-instans med namnet
metadata
. I det här exemplet förutsätts det att en Shader-instans med namnet
myShader
redan har skapats:
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
En version av det här exemplet som också extraherar skuggningsindata och parametrar finns i
Identifiera skuggningsindata och -parametrar
. Mer information om indata och parameteregenskaper finns i
Ange skuggningsindata och parametervärden
.