Получение метаданных шейдера

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Создавая ядро шейдера Pixel Bender, автор может указать метаданные о шейдере в исходном коде Pixel Bender. Используя шейдер в ActionScript, шейдер можно проанализировать и извлечь метаданные.

После того как создается экземпляр Shader и связывается с шейдером Pixel Bender, создается объект ShaderData, содержащий данные о шейдере, и сохраняется в свойстве data этого объекта Shader. Класс ShaderData не определяет собственных свойств. Однако во время выполнения в объект ShaderData динамически добавляется свойство для каждого значения метаданных, определенного в исходном коде шейдера. Каждому свойству присваивается то же имя, которое указано в метаданных. К примеру, предположим, что исходный код шейдера Pixel Bender включает следующее определение метаданных:

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

Объект ShaderData, созданный для этого шейдера, создается со следующими свойствами и значениями:

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

  • vendor (String): "Bob Jones" (Боб Джоунз)

  • version (String): "1"

  • description (String): "Creates a version of the specified image with the specified brightness" (Создает версию заданного изображения с требуемой яркостью)

Так как свойства метаданных добавляются в объект ShaderData динамически, можно использовать цикл for..in для анализа объекта ShaderData. С помощью этого приема можно выяснить, имеет ли шейдер какие-либо метаданные и каковы их значения. Помимо свойств метаданных, объект ShaderData может иметь свойства, представляющие ввод и параметры, определенные в шейдере. Анализируя объект ShaderData с помощью цикла for..in , проверьте тип данных для каждого свойства, чтобы определить, является ли оно вводом (экземпляр ShaderInput), параметром (экземпляр ShaderParameter) или метаданными (экземпляр String). В следующем примере демонстрируется использование цикла for..in для анализа динамических свойств, содержащихся в свойстве data шейдера. Каждое значение метаданных добавляется в экземпляр Vector с именем metadata . Обратите внимание, что для этого примера необходимо предварительно создать экземпляр Shader с именем 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

Версию этого примера с извлечением вводов и параметров шейдера см. в разделе Определение вводов и параметров шейдера . Дополнительные сведения о свойствах ввода и параметров см. в разделе Указание значений вводов и параметров шейдера .