Utilisation d’un shader en mode autonomeFlash Player 10 et ultérieur, Adobe AIR 1.5 et ultérieur Lorsque vous utilisez un shader en mode autonome, son traitement s’exécute indépendamment de l’usage prévu du résultat. Vous spécifiez le shader à exécuter, définissez les valeurs d’entrée et de paramètres, puis stipulez un objet dans lequel seront placées les données résultantes. Vous pouvez utiliser un shader en mode autonome pour deux raisons :
Un objet ShaderJob permet d’exécuter un shader en mode autonome. Vous commencez par créer un objet ShaderJob et vous le liez à l’objet Shader qui représente le shader à exécuter : var job:ShaderJob = new ShaderJob(myShader); Vous définissez ensuite toute valeur d’entrée ou de paramètre attendue par le shader. Si vous exécutez le shader en arrière-plan, vous enregistrez également un écouteur associé à l’événement complete de l’objet ShaderJob. Votre écouteur est appelé lorsque le shader termine sa tâche : function completeHandler(event:ShaderEvent):void { // do something with the shader result } job.addEventListener(ShaderEvent.COMPLETE, completeHandler); Vous créez ensuite un objet dans lequel est écrit le résultat de l’opération du shader, une fois celle-ci terminée. Vous affectez cet objet à la propriété target de l’objet ShaderJob : var jobResult:BitmapData = new BitmapData(100, 75); job.target = jobResult; Affectez une occurrence de BitmapData à la propriété target si vous utilisez l’objet ShaderJob pour exécuter le traitement de l’image. Si vous traitez des données binaires ou numériques, affectez un objet ByteArray ou une occurrence de Vector.<Number> à la propriété target. Si tel est le cas, vous devez définir les propriétés width et height de l’objet ShaderJob pour stipuler le volume de données à créer dans l’objet target. Remarque : vous pouvez définir les propriétés shader, target,width et height de l’objet ShaderJob en une seule étape. Pour ce faire, transmettez les arguments au constructeur ShaderJob(), comme suit :var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);.
Lorsque vous êtes prêt à exécuter le shader, vous appelez la méthode start() de l’objet ShaderJob : job.start(); Par défaut, appeler start() entraîne l’exécution asynchrone de l’objet ShaderJob. Dans ce cas, l’exécution du programme continue et passe immédiatement à la ligne suivante de code au lieu d’attendre que le shader soit terminé. Une fois l’opération du shader terminée, l’objet ShaderJob appelle ses écouteurs d’événement complete et les avertit. A ce stade (en d’autres termes, dans le corps de votre écouteur d’événement complete), l’objet target contient le résultat de l’opération du shader. Remarque : au lieu d’utiliser l’objet propriété target, vous pouvez extraire directement le résultat du shader de l’objet événement qui est transmis à la méthode d’écouteur. L’objet événement est une occurrence de ShaderEvent. L’objet ShaderEvent possède trois propriétés susceptibles d’être utilisées pour accéder au résultat, selon le type de données de l’objet défini en tant que propriété target : ShaderEvent.bitmapData, ShaderEvent.byteArray et ShaderEvent.vector.
Vous pouvez également transmettre un argument true à la méthode start(). Dans ce cas, l’opération du shader s’exécute en mode synchrone. Tout le code (y compris l’interaction avec l’interface utilisateur et tout autre événement) est interrompu pendant l’exécution du shader. Une fois le shader terminé, l’objet target en contient le résultat et le programme passe à la ligne de code suivante. job.start(true); |
![]() |