Создавая ядро шейдера 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
Версию этого примера с извлечением вводов и параметров шейдера см. в разделе
Определение вводов и параметров шейдера
. Дополнительные сведения о свойствах ввода и параметров см. в разделе
Указание значений вводов и параметров шейдера
.