Pakket | flash.display |
Klasse | public class Shader |
Overerving | Shader Object |
Subklassen | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
shader
van een ShaderFilter.
Een arcering definieert een functie die met één pixel tegelijk wordt uitgevoerd op alle pixels in een afbeelding. Het resultaat van elke aanroep van de functie is de uitvoerkleur bij de desbetreffende pixelcoördinaat in de afbeelding. Een arcering kan één of meer invoerafbeeldingen opgeven. Dit zijn afbeeldingen waarvan de inhoud kan worden gebruikt bij het bepalen van de uitvoer van de functie. Een arcering kan ook één of meer parameters opgeven. Dit zijn invoerwaarden die kunnen worden gebruikt bij het berekenen van de uitvoer van de functie. Binnen een arceringsuitvoering zijn de invoer- en parameterwaarden constant. Het enige dat varieert is de coördinaat van de pixel waarvan de kleur het resultaat van de functie is. Aanroepen van de arceringsfunctie voor meerdere uitvoerpixelcoördinaten worden parallel uitgevoerd, zodat de prestaties van het uitvoeren van de arcering hoger zijn.
De bytecode van de arcering kan in runtime worden geladen met een URLLoader-instantie. In het volgende voorbeeld wordt een bytecodebestand voor een arcering in runtime geladen en gekoppeld aan een Shader-instantie.
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 }
U kunt de arcering ook tijdens het compileren insluiten in de SWF met de metagegevenstag [Embed]
. De metagegevenstag [Embed]
is alleen beschikbaar als u de SWF compileert met de Flex SDK. Voor de tag [Embed]
geldt dat de parameter source
verwijst naar het arceringsbestand en dat de parameter mimeType
"application/octet-stream"
is, zoals in dit voorbeeld:
[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
In bedie gevallen koppelt u de ruwe arcering (de eigenschap URLLoader.data
of een instantie van de gegevensklasse [Embed]
) aan de Shader-instantie. Zoals u in door voorgaande voorbeelden ziet, kunt u dit op twee manieren doen: U kunt de bytecode van de arcering als een argument doorgeven aan de constructor Shader()
. U kunt deze ook instellen als de eigenschap byteCode
van de Shader-instantie.
Als er eenmaal een Shader-instantie is gemaakt, kan deze op verschillende manieren worden gebruikt:
- Een vulling met arcering: De uitvoer van de arcering wordt gebruikt als een vulling voor inhoud die is getekend met de teken-API. Geef de Shader-instantie als een argument door aan de methode
Graphics.beginShaderFill()
. - Een arceringsfilter: De uitvoer van de arcering wordt gebruikt als een grafische filter die wordt toegepast op een weergaveobject. Wijs de Shader-instantie toe aan de eigenschap
shader
van een ShaderFilter-instantie. - Een overvloeimodus: De uitvoer van de arcering wordt weergegeven als de overvloeiing tussen twee overlappende weergaveobjecten. Wijs de Shader-instantie toe aan de eigenschap
blendShader
van de bovenste van de twee weergaveobjecten. - Op de achtergrond verwerken van arcering: De arcering wordt op de achtergrond uitgevoerd, waardoor wordt voorkomen dat het beeldscherm blijft hangen. Er wordt een gebeurtenis verzonden als het verwerken is voltooid. Wijs de Shader-instantie toe aan de eigenschap
shader
van een ShaderJob-instantie.
Arceringsvullingen, filters en vloeiende overgangen worden niet ondersteund bij GPU-rendering.
Ondersteuning op mobiele browsers: mobiele browsers bieden geen ondersteuning voor deze functie.
AIR-profielondersteuning: deze functie wordt ondersteund op alle desktopbesturingssystemen, maar niet op alle mobiele apparaten. Deze functie wordt niet ondersteund op AIR for TV-apparaten. Zie AIR-profielondersteuning voor meer informatie over API-ondersteuning voor meerdere profielen.
Verwante API-elementen
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
byteCode : ByteArray [alleen-schrijven]
De onbewerkte arceringsbytecode voor deze Shader-instantie. | Shader | ||
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
data : ShaderData
Biedt toegang tot parameters, invoerafbeeldingen en metagegevens voor de Shader-instantie. | Shader | ||
precisionHint : String
De precisie van rekenkundige bewerkingen die worden uitgevoerd door de arcering. | Shader |
Methode | Gedefinieerd door | ||
---|---|---|---|
Maakt een nieuwe Shader-instantie. | Shader | ||
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeksrepresentatie van het opgegeven object. | Object | ||
Retourneert de primitieve waarde van het opgegeven object. | Object |
byteCode | eigenschap |
data | eigenschap |
data:ShaderData
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
Biedt toegang tot parameters, invoerafbeeldingen en metagegevens voor de Shader-instantie. ShaderParameter-objecten die parameters voor de arcering vertegenwoordigen, ShaderInput-objecten die de invoerafbeeldingen voor de arcering vertegenwoordigen en andere waarden die de metagegevens van de arcering vertegenwoordigen, worden dynamisch toegevoegd als eigenschappen van het eigenschapobject data
als de Shader-instantie wordt gemaakt. Die eigenschappen kunnen worden gebruikt voor het introspecteren van de arcering en voor het instellen van parameter- en invoerwaarden.
Zie de beschrijving van de klasse ShaderData voor informatie over het benaderen en manipuleren van de dynamische eigenschappen van het objectdata
.
Implementatie
public function get data():ShaderData
public function set data(value:ShaderData):void
Verwante API-elementen
precisionHint | eigenschap |
precisionHint:String
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
De precisie van rekenkundige bewerkingen die worden uitgevoerd door de arcering.
De set met mogelijke waarden voor de eigenschap precisionHint
wordt gedefinieerd door de constanten in de klasse ShaderPrecision.
De standaardwaarde is ShaderPrecision.FULL
. Door de precisie in te stellen op ShaderPrecision.FAST
, kunnen rekenkundige bewerkingen worden versneld ten koste van de nauwkeurigheid.
In de precisiemodus "full" (ShaderPrecision.FULL
) worden alle rekenkundige bewerkingen over de volledige breedte van de IEEE 32-bits standaard voor zwevende getallen berekend, wat op alle platforms een consistent resultaat geeft. In deze modus kunnen sommige rekenkundige bewerkingen, zoals trigonometrische en exponentiële functies, traag zijn.
De precisiemodus "fast" (ShaderPrecision.FAST
) is ontworpen voor maximale prestaties, maar werkt niet consistent op verschillende platforms en afzonderlijke CPU-configuraties. In veel gevallen is dit precisieniveau voldoende voor het maken van grafische effecten zonder zichtbare artefacten.
De selectie van de precisiemodus beïnvloedt de volgende arceringsbewerkingen. Deze bewerkingen gaan sneller op een Intel-processor waarop de SSE-instructie is ingesteld:
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)
Implementatie
public function get precisionHint():String
public function set precisionHint(value:String):void
Verwante API-elementen
Shader | () | Constructor |
In dit voorbeeld wordt ervan uitgegaan dat er in dezelfde map als de uitvoermap van de toepassing een bytecodebestand voor de arcering bestaat dat de naam 'donothing.pbj' heeft. De Pixel Bender-broncode voor de arcering DoNothing is beschikbaar in het ShaderData-voorbeeld.
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 } } }
In dit voorbeeld wordt ervan uitgegaan dat er in dezelfde map als de broncode voor de toepassing een bytecodebestand voor de arcering bestaat dat de naam 'donothing.pbj' heeft en dat de Flex SDK wordt gebruikt om het SWF-bestand te compileren. De Pixel Bender-broncode voor de arcering DoNothing is beschikbaar in het ShaderData-voorbeeld.
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 } } }
Wed Jun 13 2018, 11:42 AM Z