加载或嵌入着色器

Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本

在 ActionScript 中使用 Pixel Bender 着色器的第一步是在 ActionScript 代码中访问着色器。因为着色器是用 Adobe Pixel Bender 工具包创建并以 Pixel Bender 语言编写的,所以不能在 ActionScript 中直接访问。您需要创建 Shader 类的一个实例,用于向 ActionScript 表示 Pixel Bender 着色器。通过 Shader 对象可以查明着色器的有关信息,如着色器是否需要参数或输入图像值。将 Shader 对象传递给其他对象即可实际使用着色器。例如,若要将着色器用作滤镜,可将 Shader 对象分配给 ShaderFilter 对象的 shader 属性。若要将着色器用作绘制填充,可将 Shader 对象作为参数传递给 Graphics.beginShaderFill() 方法。

ActionScript 代码可以通过两种方式访问由 Adobe Pixel Bender 工具包创建的着色器(.pbj 文件):

  • 在运行时加载:可以使用 URLLoader 对象将着色器文件作为外部资源进行加载。这种方法类似于加载外部资源(如文本文件)。下面的示例演示如何在运行时加载着色器字节码文件并将其链接到一个 Shader 实例:

    var loader:URLLoader = new URLLoader(); 
    loader.dataFormat = URLLoaderDataFormat.BINARY; 
    loader.addEventListener(Event.COMPLETE, onLoadComplete); 
    loader.load(new URLRequest("myShader.pbj")); 
     
    var shader:Shader; 
     
    function onLoadComplete(event:Event):void { 
        // Create a new shader and set the loaded data as its bytecode 
        shader = new Shader(); 
        shader.byteCode = loader.data; 
         
        // You can also pass the bytecode to the Shader() constructor like this: 
        // shader = new Shader(loader.data); 
         
         // do something with the shader 
    }
  • 嵌入在 SWF 文件中:使用 [Embed] 元数据标签可以在编译时将着色器文件嵌入在 SWF 文件中。只有在使用 Flex SDK 编译 SWF 文件时,[Embed] 元数据标签才可用。[Embed] 标签的 source 参数指向着色器文件,其 mimeType 参数为"application/octet-stream",如以下示例中所示:

    [Embed(source="myShader.pbj", mimeType="application/octet-stream")] 
    var MyShaderClass:Class; 
     
    // ... 
     
    // create a shader and set the embedded shader as its bytecode 
    var shader:Shader = new Shader(); 
    shader.byteCode = new MyShaderClass(); 
     
    // You can also pass the bytecode to the Shader() constructor like this: 
    // var shader:Shader = new Shader(new MyShaderClass()); 
     
    // do something with the shader

在任何一种情况下,都可以将原始着色器字节码(URLLoader.data 属性或 [Embed] 数据类的实例)链接到 Shader 实例。如以上示例所示,可以通过两种方式将字节码分配给 Shader 实例。可以将着色器字节代码作为参数传递到 Shader() 构造函数。或者,可以将其设置为 Shader 实例的 byteCode 属性。

在创建 Pixel Bender 着色器并将其链接到 Shader 对象后,即可使用着色器以多种方式创建效果。您可以将着色器用作滤镜、混合模式、位图填充,也可以用于位图或其他数据的独立处理。您还可以使用 Shader 对象的 data 属性访问着色器的元数据、指定输入图像以及设置参数值。