flash.display
public final dynamic class ShaderData
继承ShaderData Inheritance Object

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

ShaderData 对象包含以下属性:表示着色器内核的任何参数和输入的属性,以及包含为着色器指定的任何元数据的属性。

创建 ShaderData 对象时会将这些属性添加到该对象中。这些属性的名称与着色器源代码中指定的名称相匹配。每个属性的数据类型因属性所表示的着色器方面而异。表示着色器参数的属性是 ShaderParameter 实例,表示输入图像的属性是 ShaderInput 实例,而表示着色器元数据的属性是与其数据类型相对应的 ActionScript 类的实例(例如,文本元数据的 String 实例和 uint 元数据的 uint)。

例如,假设有以下着色器,其中定义有一个输入图像 (src)、两个参数(sizeradius)以及三个元数据值(nameSpaceversiondescription):

<languageVersion : 1.0;>
  
  kernel DoNothing
  <
      namespace: "Adobe::Example";
      vendor: "Adobe examples";
      version: 1;
      description: "A shader that does nothing, but does it well.";
  >
  {
      input image4 src;
  
      output pixel4 dst;
      
      parameter float2 size
      <
          description: "The size of the image to which the kernel is applied";
          minValue: float2(0.0, 0.0);
          maxValue: float2(100.0, 100.0);
          defaultValue: float2(50.0, 50.0);
      >;
      
      parameter float radius
      <
          description: "The radius of the effect";
          minValue: 0.0;
          maxValue: 50.0;
          defaultValue: 25.0;
      >;
  
      void evaluatePixel()
      {
          float2 one = (radius / radius) ∗ (size / size);
          dst = sampleNearest(src, outCoord());
      }
  }

如果通过为此着色器加载字节代码来创建 Shader 实例,则其 data 属性中的 ShaderData 实例包含以下属性:

属性数据类型
nameString"DoNothing"
nameSpaceString"Adobe::Example"
versionString"1"
descriptionString"A shader that does nothing, but does it well."
srcShaderInput [一个 ShaderInput 实例]
sizeShaderParameter [一个 ShaderParameter 实例,包含参数元数据的属性]
radiusShaderParameter [一个 ShaderParameter 实例,包含参数元数据的属性]

请注意,将着色器编译为字节代码时,会删除着色器源代码中已定义但未在着色器的 evaluatePixel() 函数中使用的任何输入图像或参数。这种情况下,不会添加对应的 ShaderInput 或 ShaderParameter 实例作为 ShaderData 实例的属性。

通常,开发人员代码不创建 ShaderData 实例。包含着色器数据、参数和输入的 ShaderData 实例可用作 Shader 实例的 data 属性。

查看示例

另请参见

flash.display.Shader.data
flash.display.ShaderInput
flash.display.ShaderParameter


公共属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
公共方法
 方法定义方
  
创建 ShaderData 实例。
ShaderData
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
构造函数详细信息
ShaderData()构造函数
public function ShaderData(byteCode:ByteArray)

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

创建 ShaderData 实例。通常,开发人员代码不直接调用 ShaderData 构造函数。使用 Shader 实例的 data 属性来访问包含该实例数据、参数和输入的 ShaderData 实例。

参数
byteCode:ByteArray — 着色器的字节代码。

另请参见

示例 如何使用示例
ShaderDataExample.1.as

下面的示例加载着色器并枚举着色器的 data 属性中的 ShaderData 实例,以显示着色器的输入、参数和元数据属性。

请注意,此示例假设应用程序输出目录所在的同一目录中有一个名为“donothing.pbj”的着色器字节码文件。

//
// Source code for the shader:
//
<languageVersion : 1.0;>

kernel DoNothing
<
    namespace: "Adobe::Example";
    vendor: "Adobe examples";
    version: 1;
    description: "A shader that does nothing, but does it well.";
>
{
    input image4 src;
    
    output pixel4 dst;
    
    parameter float2 size
    <
        description: "The size of the image to which the shader is applied";
        minValue: float2(0.0, 0.0);
        maxValue: float2(100.0, 100.0);
        defaultValue: float2(50.0, 50.0);
    >;
    
    parameter float radius
    <
        description: "The radius of the effect";
        minValue: float(0.0);
        maxValue: float(50.0);
        defaultValue: float(25.0);
    >;

    void evaluatePixel()
    {
        float2 one = (radius / radius) * (size / size);
        dst = sampleNearest(src, outCoord());
    }
}

//
// ActionScript source code:
//
package {
    import flash.display.Shader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;

    public class ShaderDataExample extends Sprite {
        
        private var loader:URLLoader;
        
        public function ShaderDataExample() {
            loader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.BINARY;
            loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
            loader.load(new URLRequest("donothing.pbj"));
        }
        
        private function loadCompleteHandler(event:Event):void {
            var shader:Shader = new Shader();
            shader.byteCode = loader.data;
            
            for (var p:String in shader.data) {
                trace(p, ":", shader.data[p]);
                for (var d:String in shader.data[p]) {
                    trace("\t", d, ":", shader.data[p][d]);
                }
            }
        }
    }
}