Få tillgång till skuggningens metadata

Flash Player 10 och senare, Adobe AIR 1.5 och senare

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.