Package | flash.display |
Classe | public class Shader |
Héritage | Shader Object |
Sous-classes | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
shader
d’un objet ShaderFilter.
Un shader définit une fonction qui s’exécute sur tous les pixels d’une image, un pixel après l’autre. Le résultat de chaque appel à la fonction est la couleur de sortie aux coordonnées de ce pixel dans l’image. Un shader peut spécifier une ou plusieurs images d’entrée, dont le contenu peut être utilisé pour déterminer le résultat de la fonction. Un shader peut également spécifier un ou plusieurs paramètres, correspondant aux valeurs d’entrée pouvant être utilisées pour calculer le résultat de la fonction. Dans une seule exécution de shader, les valeurs d’entrée et des paramètres sont constantes. Les seuls éléments qui varient sont les coordonnées du pixel dont la couleur est le résultat de la fonction. Les appels de la fonction du shader pour plusieurs coordonnées de pixel de sortie s’exécutent en parallèle pour améliorer les performances de l’exécution du shader.
Le code binaire du shader peut être chargé au moment de l’exécution à l’aide d’une occurrence URLLoader. L’exemple suivant montre le chargement d’un fichier de code binaire de shader à l’exécution et sa liaison à une occurrence 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 }
Vous pouvez intégrer le shader dans la séquence SWF au moment de la compilation à l’aide de la balise de métadonnées [Embed]
. La balise de métadonnées [Embed]
n’est disponible que si vous utilisez le kit de développement Flex pour compiler le fichier SWF. Le paramètre source
de la balise [Embed]
pointe vers le fichier du shader, et son paramètre mimeType
est "application/octet-stream"
, comme dans cet exemple :
[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
Dans tous les cas, vous liez le shader brut (la propriété URLLoader.data
ou une occurrence de la classe de données [Embed]
) à l’occurrence Shader. Comme le montre l’exemple précédent, vous avez deux moyens de le faire. Vous pouvez transmettre le pseudo-code binaire du shader sous forme d’argument au constructeur Shader()
. Vous pouvez également le définir en tant que propriété byteCode
de l’occurrence Shader.
Lorsqu’une occurrence Shader est créée, elle peut être utilisée de plusieurs manières :
- Un remplissage de shader : le résultat du shader est utilisé comme remplissage lorsque le contenu est dessiné avec l’API de dessin. Transmettez l’occurrence Shader sous forme d’argument à la méthode
Graphics.beginShaderFill()
. - Un filtre de shader : le résultat du shader est utilisé comme filtre graphique appliqué à un objet d’affichage. Affectez l’occurrence Shader à la propriété
shader
d’une occurrence ShaderFilter. - Un mode de fusion : le résultat du shader est restitué sous forme de fusion entre deux objets d’affichage qui se chevauchent. Affectez l’occurrence Shader à la propriété
blendShader
de celui des deux objets d’affichage qui placé au-dessus. - Traitement du shader en arrière-plan : le shader s’exécute en arrière-plan, ce qui évite à l’écran de geler, et déclenche un événement lorsque le traitement est terminé. Affectez l’occurrence Shader à la propriété
shader
d’une occurrence ShaderJob.
Les remplissages, filtres et dégradés de shader ne sont pas pris en charge sous le rendu sur GPU.
Prise en charge du navigateur mobile : cette fonctionnalité n’est pas prise en charge sur les navigateurs mobiles.
Prise en charge du profil AIR : cette fonctionnalité est prise en charge sur tous les systèmes d’exploitation de bureau, mais ne l’est pas sur tous les périphériques mobiles. Elle n’est pas prise en charge sur les périphériques AIR pour TV. Voir Prise en charge du profil AIR pour plus d’informations sur la prise en charge de l’API dans plusieurs profils.
Plus d’exemples
Eléments de l’API associés
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Propriété | Défini par | ||
---|---|---|---|
byteCode : ByteArray [écriture seule]
Pseudo-code binaire du shader brut pour cette occurrence Shader. | Shader | ||
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
data : ShaderData
Permet à l’occurrence Shader d’accéder aux paramètres, aux images d’entrée et aux métadonnées. | Shader | ||
precisionHint : String
Précision des opérations mathématiques effectuées par le shader. | Shader |
Méthode | Défini par | ||
---|---|---|---|
Crée une occurrence Shader. | Shader | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
byteCode | propriété |
data | propriété |
data:ShaderData
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Permet à l’occurrence Shader d’accéder aux paramètres, aux images d’entrée et aux métadonnées. Des objets ShaderParameter représentant des paramètres du shader, des objets ShaderInput représentant des images d’entrée du shader et d’autres valeurs représentant les métadonnées du shader sont ajoutées dynamiquement en tant que propriétés de l’objet data
lors de la création de l’occurrence Shader. Ces propriétés peuvent être utilisées pour analyser le shader et pour définir les valeurs des entrées et des paramètres.
Pour plus d’informations sur l’accès et la manipulation des propriétés dynamiques de l’objet data
, reportez-vous à la description de la classe ShaderData.
Implémentation
public function get data():ShaderData
public function set data(value:ShaderData):void
Plus d’exemples
Eléments de l’API associés
precisionHint | propriété |
precisionHint:String
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Précision des opérations mathématiques effectuées par le shader.
L’ensemble des valeurs possibles de la propriété precisionHint
est défini par les constantes de la classe ShaderPrecision.
La valeur par défaut est ShaderPrecision.FULL
. Le fait de définir la précision sur ShaderPrecision.FAST
peut accélérer les opérations mathématiques au détriment de la précision.
Le mode de précision totale (ShaderPrecision.FULL
) calcule toutes les opérations mathématiques avec toute la largeur de virgule flottante 32 bits de la norme IEEE et assure un comportement cohérent sur toutes les plates-formes. Dans ce mode, certaines opérations mathématiques, telles que les fonctions trigonométriques et exponentielles, peuvent être lentes.
Le mode de précision rapide (ShaderPrecision.FAST
) est conçu pour des performances maximales, mais n’assure pas la même cohérence sur les différentes plates-formes et les configurations de CPU individuelles. Dans la plupart des cas, ce niveau de précision suffit pour créer des effets graphiques sans artefact visible.
Le choix du mode de précision affecte les opérations de shader suivantes. Ces opérations sont plus rapides sur un processeur Intel avec l’instruction SSE définie :
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)
Implémentation
public function get precisionHint():String
public function set precisionHint(value:String):void
Eléments de l’API associés
Shader | () | Constructeur |
Notez que cet exemple part du principe qu’un fichier de pseudo-code binaire du shader nommé « donothing.pbj » existe dans le répertoire de sortie de l’application. Le code source de Pixel Bender pour le shader DoNothing est disponible dans l’exemple de la classe 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 } } }
Notez que cet exemple part du principe qu’un fichier de pseudo-code binaire du shader nommé « donothing.pbj » existe dans le répertoire de sortie de l’application, et que le kit de développement Flex est utilisé pour compiler le fichier SWF. Le code source de Pixel Bender pour le shader DoNothing est disponible dans l’exemple de la classe 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, 09:30 AM Z