Packageflash.display
Classepublic class Shader
HéritageShader Inheritance Object

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: Flash Player 10, AIR 1.5

Une occurrence de Shader représente un noyau de shader de Pixel Bender dans le code ActionScript. Pour utiliser un shader dans votre application, vous devez créer une occurrence de Shader pour le shader. Utilisez ensuite cette occurrence de Shader de manière à obtenir l'effet que vous souhaitez créer. Par exemple, pour utiliser le shader en tant que filtre, affectez l'occurrence Shader à la propriété 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 :

Consulter les exemples

Voir aussi

flash.display.DisplayObject.blendShader
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Chargement ou intégration d'un shader


Propriétés publiques
 PropriétéDéfini par
  byteCode : ByteArray
[lecture seule] Pseudo-code binaire du shader brut pour cette occurrence Shader.
Shader
 Inheritedconstructor : 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
 Inheritedprototype : Object
[statique] Référence à l'objet prototype d'un objet de classe ou fonction.
Object
Méthodes publiques
 MéthodeDéfini par
  
Shader(code:ByteArray = null)
Crée une occurrence Shader.
Shader
 Inherited
Indique si la propriété spécifiée d'un objet est définie.
Object
 Inherited
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
 Inherited
Indique si la propriété spécifiée existe et est énumérable.
Object
 Inherited
Définit la disponibilité d'une propriété dynamique pour les opérations en boucle.
Object
 Inherited
Renvoie la représentation sous forme de chaîne de l'objet spécifié.
Object
 Inherited
Renvoie la valeur primitive de l'objet spécifié.
Object
Détails de la propriété
byteCodepropriété
byteCode:ByteArray  [lecture seule]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: Flash Player 10, AIR 1.5

Pseudo-code binaire du shader brut pour cette occurrence Shader.



Implémentation
    public function set byteCode(value:ByteArray):void
datapropriété 
data:ShaderData  [lecture-écriture]

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

Voir aussi

precisionHintpropriété 
precisionHint:String  [lecture-écriture]

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 :



Implémentation
    public function get precisionHint():String
    public function set precisionHint(value:String):void

Voir aussi

Détails du constructeur
Shader()Constructeur
public function Shader(code:ByteArray = null)

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: Flash Player 10, AIR 1.5

Crée une occurrence Shader.

Paramètres
code:ByteArray (default = null) — Pseudo-code binaire du shader brut à lier au Shader.
Exemples Utilisation des exemples
ShaderExample.1.as

L'exemple suivant charge un fichier de pseudo-code binaire de shader à l'exécution et crée une occurrence Shader liée au fichier.

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
        }
    }
}
ShaderExample.2.as

L'exemple suivant intègre un fichier de pseudo-code binaire de shader en le compilant dans le fichier SWF, et crée une occurrence Shader liée au fichier.

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
        }
    }
}