Загрузка или встраивание шейдера

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Чтобы использовать шейдер Pixel Bender в ActionScript, сначала нужно получить к нему доступ через код ActionScript. Так как шейдер создается с помощью Adobe Pixel Bender Toolkit на языке Pixel Bender, код ActionScript не может обратиться к нему напрямую. Сначала нужно создать экземпляр класса Shader, который представляет шейдер Pixel Bender для ActionScript. Объект Shader позволяет получать информацию о шейдере, например, требует он параметров или значений ввода изображения. Объект Shader передается другим объектам, к которым требуется применить шейдер. Например, чтобы использовать шейдер в качестве фильтра, объект Shader нужно назначить свойству shader объекта ShaderFilter. А чтобы использовать шейдер в качестве заливки, объект Shader нужно передать в качестве аргумента методу Graphics.beginShaderFill() .

Код ActionScript может получить шейдер, созданное в Adobe Pixel Bender Toolkit (файл .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-файл: шейдер можно встроить в SWF-файл во время компиляции с помощью тега метаданных [Embed] . Тег метаданных [Embed] доступен только в том случае, если при компиляции SWF-файла используется Flex SDK. В теге [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() . Либо можно задать его в качестве свойства byteCode экземпляра Shader.

После того как шейдер Pixel Bender создано и связано с объектом Shader, его можно использовать для создания разных эффектов. Затенение можно использовать в качестве фильтра, режима наложения, растровой заливки, а также для автономной обработки растрового изображения и других данных. Также можно использовать свойство data объекта Shader, чтобы получить метаданные шейдера, задать вводимые изображения и значения параметров.