Пакет | flash.display |
Класс | public class Shader |
Наследование | Shader ![]() |
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10 |
shader
объекта ShaderFilter.
Затенение задает функцию, которая по очереди обрабатывает каждый пиксель изображения. В результате каждого вызова функции цвет пиксела в конкретном месте изображения меняется. В затенении может быть указано более одного изображения ввода, содержимое которого или которых может быть использовано для определения вывода функции. В затенении также может быть указан один или несколько параметров, представляющих значения ввода, которые могут быть использованы в расчетах вывода функции. При однократном выполнении операции затенения значения ввода и параметра остаются неизменными. Изменяются только координаты пиксела, цвет которого является результатом вычисления функции. Повышение производительности достигается параллельной работой нескольких функций затенения.
Байт-код затенения можно загрузить в среду выполнения с помощью экземпляра URLLoader. В следующем примере демонстрируется загрузка файла байт-кода затенения в среду выполнения и его привязка к экземпляру Shader.
var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(new URLRequest("myShader.hbc")); 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.hbc", 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 его можно использовать по-разному:
Graphics.beginShaderFill()
.shader
экземпляра ShaderFilter.blendShader
верхнего из двух пересекающихся экранных объектов.shader
экземпляра ShaderJob.См. также
Свойство | Определено | ||
---|---|---|---|
byteCode : ByteArray [только для записи]
Необработанный байт-код затенения для данного экземпляра Shader. | Shader | ||
![]() | constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | |
data : ShaderData
Предоставляет доступ к параметрам, изображениям ввода и метаданным данного экземпляра Shader. | Shader | ||
precisionHint : String
Точность вычисления математических операций, выполняемых затенением. | Shader | ||
![]() | prototype : Object [статические]
Ссылка на модель объекта класса или функции. | Object |
Метод | Определено | ||
---|---|---|---|
Создает новый экземпляр Shader. | Shader | ||
![]() |
Показывает, определено ли заданное свойство для объекта. | Object | |
![]() |
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | |
![]() |
Показывает наличие заданного свойства и его перечисляемость. | Object | |
![]() |
Задает доступность динамического свойства для операций цикла. | Object | |
![]() |
Возвращает строковое представление заданного объекта. | Object | |
![]() |
Возвращает элементарное значение заданного объекта. | Object |
byteCode | свойство |
byteCode:ByteArray
[только для записи] Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10 |
Необработанный байт-код затенения для данного экземпляра Shader.
public function set byteCode(value:ByteArray):void
data | свойство |
data:ShaderData
[чтение и запись] Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10 |
Предоставляет доступ к параметрам, изображениям ввода и метаданным данного экземпляра 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 |
Версии среды выполнения: | Flash Player 10 |
Точность вычисления математических операций, выполняемых затенением.
Набор возможных значений свойства 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
См. также
Shader | () | Конструктор |
public function Shader(code:ByteArray = null)
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10 |
Создает новый экземпляр Shader.
Параметрыcode:ByteArray (default = null ) — Необработанный байт-код затенения, привязываемый к экземпляру Shader.
|
Примечание. В данном примере подразумевается наличие файла байт-кода затенения под названием "donothing.hbc" в каталоге вывода приложения.
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.hbc")); } private function loadCompleteHandler(event:Event):void { var shader:Shader = new Shader(); shader.byteCode = loader.data; // do something with the Shader instance } } }
Примечание. В данном примере подразумевается наличие файла байт-кода затенения под названием "donothing.hbc" в каталоге исходного кода, а также использование Flex SDK при компиляции SWF.
package { import flash.display.Shader; import flash.display.Sprite; public class EmbeddedShaderExample extends Sprite { [Embed(source="donothing.hbc", 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 } } }