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