셰이더 메타데이터에 액세스

Flash Player 10 이상, Adobe AIR 1.5 이상

Pixel Bender 셰이더 커널을 만드는 동안 작성자는 Pixel Bender 소스 코드에 셰이더에 대한 메타데이터를 지정할 수 있습니다. ActionScript에서 셰이더를 사용하는 동안 셰이더를 검사하고 해당 메타데이터를 추출할 수 있습니다.

Shader 인스턴스를 만들고 Pixel Bender 셰이더에 연결하면 셰이더에 대한 데이터가 포함된 ShaderData 객체가 만들어져 Shader 객체의 data 속성에 저장됩니다. 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(문자열): "Adobe::Example"

  • vendor(문자열): "Bob Jones"

  • version(문자열): "1"

  • description(문자열): "Creates a version of the specified image with the specified brightness"

메타데이터 속성이 동적으로 ShaderData 객체에 추가되기 때문에 for..in 루프를 사용하여 ShaderData 객체를 검사할 수 있습니다. 이 기술을 사용하면 셰이더에 메타데이터가 있는지 여부 및 해당 메타데이터 값을 확인할 수 있습니다. 메타데이터 속성 외에도 ShaderData 객체는 셰이더에 정의된 입력과 매개 변수를 나타내는 속성을 가질 수 있습니다. for..in 루프를 사용하여 ShaderData 객체를 검사하는 경우 각 속성의 데이터 유형을 검사하여 속성이 입력(ShaderInput 인스턴스), 매개 변수(ShaderParameter 인스턴스) 또는 메타데이터 값(String 인스턴스)인지 확인합니다. 다음 예제에서는 for..in 루프를 사용하여 셰이더 data 속성의 동적 속성을 검사하는 방법을 보여 줍니다. 각 메타데이터 값은 metadata라는 Vector 인스턴스에 추가됩니다. 이 예제에서는 myShader라는 Shader 인스턴스가 이미 작성되었다고 가정합니다.

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

셰이더 입력과 매개 변수도 추출하는 이 예제의 버전을 보려면 셰이더 입력 및 매개 변수 식별을 참조하십시오. 입력 및 매개 변수 속성에 대한 자세한 내용은 셰이더 입력 및 매개 변수 값 지정을 참조하십시오.