Главная / Action Script 3
Пакетflash.display
Классpublic class Shader
НаследованиеShader Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Экземпляр Shader представляет ядро затенения Pixel Bender в ActionScript. Чтобы использовать затенение в приложении, необходимо создать экземпляр Shader. Затем можно использовать этот экземпляр Shader соответствующим образом в зависимости от желаемого эффекта. Например, чтобы использовать затенение в качестве фильтра, необходимо назначить экземпляр Shader свойству shader объекта ShaderFilter.

Затенение задает функцию, которая по очереди обрабатывает каждый пиксель изображения. В результате каждого вызова функции цвет пиксела в конкретном месте изображения меняется. В затенении может быть указано более одного изображения ввода, содержимое которого или которых может быть использовано для определения вывода функции. В затенении также может быть указан один или несколько параметров, представляющих значения ввода, которые могут быть использованы в расчетах вывода функции. При однократном выполнении операции затенения значения ввода и параметра остаются неизменными. Изменяются только координаты пиксела, цвет которого является результатом вычисления функции. Повышение производительности достигается параллельной работой нескольких функций затенения.

Байт-код затенения можно загрузить в среду выполнения с помощью экземпляра 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]. Тег метаданных [Embed] доступен только в том случае, если при компиляции SWF используется Flex SDK. В теге [Embed] параметр source указывает на файл затенения, а параметр mimeType является "application/octet-stream". Пример:

  [Embed(source="myShader.pbj", mimeType="application/octet-stream)]
  var MyShaderClass:Class;
   
  // ...
  
  // create a new shader and set the embedded shader as its bytecode
  var shaderShader = 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(). Либо можно задать его в качестве свойства byteCode экземпляра Shader.

После создания экземпляра Shader его можно использовать по-разному:

Посмотреть примеры

См. также

flash.display.DisplayObject.blendShader
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Загрузка или встраивание затенения


Общедоступные свойства
 СвойствоОпределено
  byteCode : ByteArray
[только для записи] Необработанный байт-код затенения для данного экземпляра Shader.
Shader
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  data : ShaderData
Предоставляет доступ к параметрам, изображениям ввода и метаданным данного экземпляра Shader.
Shader
  precisionHint : String
Точность вычисления математических операций, выполняемых затенением.
Shader
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
Общедоступные методы
 МетодОпределено
  
Shader(code:ByteArray = null)
Создает новый экземпляр Shader.
Shader
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о свойстве
byteCodeсвойство
byteCode:ByteArray  [только для записи]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Необработанный байт-код затенения для данного экземпляра Shader.



Реализация
    public function set byteCode(value:ByteArray):void
dataсвойство 
data:ShaderData  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Предоставляет доступ к параметрам, изображениям ввода и метаданным данного экземпляра Shader. При создании экземпляра Shader все объекты ShaderParameter, представляющие параметры затенения, объекты ShaderInput, представляющие изображения ввода и прочие значения, представляющие метаданные затенения, динамически добавляются в качестве свойств объекта data. Эти свойства можно использовать для анализа затенения, а также для настройки параметров и значений ввода.

Дополнительные сведения по получению доступа к динамическим свойствам объекта data и их изменению находятся в описании класса ShaderData.



Реализация
    public function get data():ShaderData
    public function set data(value:ShaderData):void

См. также

precisionHintсвойство 
precisionHint:String  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Точность вычисления математических операций, выполняемых затенением.

Набор возможных значений свойства precisionHint определяется константами класса ShaderPrecision.

Значение по умолчанию — ShaderPrecision.FULL. Если установить для точности значение ShaderPrecision.FAST, то выполнение математических вычислений ускорится в ущерб точности.

В полном режиме точности (ShaderPrecision.FULL) все математические операции выполняются с использованием полного 32-разрядного стандарта IEEE, что обеспечивает согласованное поведение на всех платформах. Вычисление некоторых математических функций в этом режиме, например тригонометрических и экспонентных, может выполняться очень медленно.

Быстрый режим точности (ShaderPrecision.FAST) предусмотрен для максимального повышения производительности, но он дает несогласованные результаты для разных платформ и индивидуальных конфигураций ЦП. Во многих случаях этого уровня точности достаточно для создания графических эффектов без видимых искажений.

Выбор режима точности затенения влияет на следующие операции затенения. При использовании процессора Intel с набором инструкций SSE данные операции выполняются быстрее:



Реализация
    public function get precisionHint():String
    public function set precisionHint(value:String):void

См. также

Сведения о конструкторе
Shader()Конструктор
public function Shader(code:ByteArray = null)

Язык версии : ActionScript 3.0
Версии среды выполнения:  10, 1.5

Создает новый экземпляр Shader.

Параметры
code:ByteArray (default = null) — Необработанный байт-код затенения, привязываемый к экземпляру Shader.
Примеры Как пользоваться примерами
ShaderExample.1.as

В следующем примере происходит загрузка файла байт-кода затенения в среду выполнения и создание экземпляра Shader, связанного с ним.

Обратите внимание, что в этом примере мы исходим из того, что существует файл байт-кодов с именем donothing.pbj, хранящийся в каталоге, который является выходным для приложения. Исходный код Pixel Bender для затенения DoNothing доступен в примере класса ShaderData.


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 LoadedShaderExample extends Sprite {
        
        private var loader:URLLoader;
        
        public function LoadedShaderExample() {
            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;
            
            // do something with the Shader instance
        }
    }
}
ShaderExample.2.as

В следующем примере происходит внедрение файла байт-кода в SWF при компиляции и его привязка к экземпляру Shader.

Примечание. В данном примере подразумевается наличие файла байт-кода затенения с именем donothing.pbj в каталоге исходного кода, а также использование Flex SDK при компиляции SWF-файла. Исходный код Pixel Bender для затенения DoNothing доступен в примере класса ShaderData.


package {
    import flash.display.Shader;
    import flash.display.Sprite;

    public class EmbeddedShaderExample extends Sprite {
        
        [Embed(source="donothing.pbj", mimeType="application/octet-stream")]
        private static var DoNothingShader:Class;
        
        public function EmbeddedShaderExample() {
            var shader:Shader = new Shader();
            shader.byteCode = new DoNothingShader();
            
            // do something with the Shader instance
        }
    }
}