| Пакет | 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
Скрыть унаследованные общедоступные свойства
Показать унаследованные общедоступные свойства