Пакет | flash.display |
Класс | public class Shader |
Наследование | Shader Object |
Подклассы | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10, AIR 1.5 |
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 его можно использовать по-разному:
- Заливка затенением: вывод затенения используется в качестве заливки при рисовании содержимого с помощью соответствующего API. Следует передать экземпляр Shader в качестве аргумента метода
Graphics.beginShaderFill()
. - Фильтр затенением: вывод затенения используется в качестве графического фильтра, применяемого к экранному объекту. Следует назначить экземпляр Shader свойству
shader
экземпляра ShaderFilter. - Режим наложения: вывод затенения используется визуализируется в качестве наложения двух пересекающихся экранных объектов. Следует назначить экземпляр Shader свойству
blendShader
верхнего из двух пересекающихся экранных объектов. - Фоновая обработка затенения: выполнение операции затенения происходит в фоновом режиме, исключая зависания программного окна. По окончании операции отправляется соответствующее событие. Следует назначить экземпляр Shader свойству
shader
экземпляра ShaderJob.
Заливки, фильтры и переходы, использующие затенение, не поддерживаются при визуализации с использованием графического процессора.
Поддержка в мобильных браузерах: эта функция не поддерживается в мобильных браузерах.
Поддержка в профилях AIR: эта функция поддерживается во всех компьютерных операционных системах, но не на всех мобильных устройствах. Он не поддерживается на устройствах AIR for TV. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».
Связанные элементы API
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Свойство | Определено | ||
---|---|---|---|
byteCode : ByteArray [только для записи]
Необработанный байт-код затенения для данного экземпляра Shader. | Shader | ||
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
data : ShaderData
Предоставляет доступ к параметрам, изображениям ввода и метаданным данного экземпляра Shader. | Shader | ||
precisionHint : String
Точность вычисления математических операций, выполняемых затенением. | Shader |
Метод | Определено | ||
---|---|---|---|
Создает новый экземпляр Shader. | Shader | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object |
byteCode | свойство |
data | свойство |
data:ShaderData
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10, AIR 1.5 |
Предоставляет доступ к параметрам, изображениям ввода и метаданным данного экземпляра Shader. При создании экземпляра Shader все объекты ShaderParameter, представляющие параметры затенения, объекты ShaderInput, представляющие изображения ввода и прочие значения, представляющие метаданные затенения, динамически добавляются в качестве свойств объекта data
. Эти свойства можно использовать для анализа затенения, а также для настройки параметров и значений ввода.
Дополнительные сведения по получению доступа к динамическим свойствам объекта data
и их изменению находятся в описании класса ShaderData.
Реализация
public function get data():ShaderData
public function set data(value:ShaderData):void
Связанные элементы API
precisionHint | свойство |
precisionHint:String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10, AIR 1.5 |
Точность вычисления математических операций, выполняемых затенением.
Набор возможных значений свойства precisionHint
определяется константами класса ShaderPrecision.
Значение по умолчанию — ShaderPrecision.FULL
. Если установить для точности значение ShaderPrecision.FAST
, то выполнение математических вычислений ускорится в ущерб точности.
В полном режиме точности (ShaderPrecision.FULL
) все математические операции выполняются с использованием полного 32-разрядного стандарта IEEE, что обеспечивает согласованное поведение на всех платформах. Вычисление некоторых математических функций в этом режиме, например тригонометрических и экспонентных, может выполняться очень медленно.
Быстрый режим точности (ShaderPrecision.FAST
) предусмотрен для максимального повышения производительности, но он дает несогласованные результаты для разных платформ и индивидуальных конфигураций ЦП. Во многих случаях этого уровня точности достаточно для создания графических эффектов без видимых искажений.
Выбор режима точности затенения влияет на следующие операции затенения. При использовании процессора Intel с набором инструкций SSE данные операции выполняются быстрее:
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan(x, y)
exp(x)
exp2(x)
log(x)
log2(x)
pow(x, y)
reciprocal(x)
sqrt(x)
Реализация
public function get precisionHint():String
public function set precisionHint(value:String):void
Связанные элементы API
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 } } }
Примечание. В данном примере подразумевается наличие файла байт-кода затенения с именем 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 } } }
Tue Jun 12 2018, 11:34 AM Z