Package | flash.display3D |
Classe | public final class Context3D |
Héritage | Context3D EventDispatcher Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Un contexte de rendu comprend une surface de dessin, ainsi que les ressources et l’état associés. Dans la mesure du possible, le contexte de rendu utilise le GPU. Dans le cas contraire, le contexte de rendu utilise le logiciel. (Si le rendu via Context3D n’est pas pris en charge sur une plate-forme, la propriété stage3Ds
de l’objet Stage contient une liste vide.)
Le contexte de rendu Context3D est un pipeline programmable très similaire à OpenGL ES 2, à la différence qu’il est abstrait afin d’être compatible avec plusieurs matériels et interfaces GPU. Bien qu’elle ait été conçue pour les graphiques 3D, le pipeline de rendu n’impose pas un rendu tridimensionnel. Il est par conséquent possible de créer un moteur de rendu 2D en fournissant les programmes de sommets et de fragments de pixels adéquats. Dans les deux cas (3D et 2D), l’unique primitive géométrique prise en charge est le triangle.
Obtenez une occurrence de la classe Context3D en appelant la méthode requestContext3D()
d’un objet Stage3D. Seul un nombre limité d’objets Context3D peut exister par scène : un pour chaque Stage3D dans la liste Stage.stage3Ds
. Lorsque le contexte est créé, l’objet Stage3D distribue un événement context3DCreate
. Il est à tout moment possible de détruire et de recréer un contexte de rendu, notamment lorsqu’une autre application qui utilise le GPU obtient le focus. Votre code doit anticiper la réception de plusieurs événements context3DCreate
. Placez la zone de rendu sur la scène à l’aide des propriétés x
et y
de l’occurrence de Stage3D associée.
Pour le rendu et l’affichage d’une séquence (après obtention d’un objet Context3D), les étapes suivantes sont généralement caractéristiques :
- Configurez les attributs du tampon de l’affichage principal en appelant
configureBackBuffer()
. - Créez et initialisez vos ressources de rendu, notamment :
- les tampons des sommets et des index définissant la géométrie de la séquence ;
- les programmes (shaders) de sommets et de pixels pour le rendu de la séquence ;
- les textures.
- Effectuez le rendu d’une image :
- Définissez l’état du rendu en fonction d’un objet ou d’un ensemble d’objets dans la séquence.
- Appelez la méthode
drawTriangles()
pour effectuer le rendu d’un ensemble de triangles. - Modifiez l’état de rendu pour le prochain groupe d’objets.
- Appelez
drawTriangles()
pour tracer les triangles définissant les objets. - Répétez cette opération jusqu’à ce que la séquence soit entièrement rendue.
- Appelez la méthode
present()
pour afficher la séquence rendue sur la scène.
Les limites suivantes s’appliquent au rendu :
Limites de ressources :
Ressource | Nombre autorisé | Mémoire totale |
---|---|---|
Tampons de sommets
| 4096 | 256 Mo |
Tampons d’index
| 4096 | 128 Mo |
Programmes
| 4096 | 16 Mo |
Textures
| 4096 | 128 Mo |
Textures de cube
| 4096 | 256 Mo |
Limites AGAL : 200 codes d’opération par programme.
Dessinez les limites d’appel : 32 768 appels à drawTriangles()
pour chaque appel à present()
.
Les limites suivantes s’appliquent aux textures :
Limites de texture pour AIR 32 bits :
Texture | Taille maximale | Mémoire totale du processeur graphique (GPU) |
---|---|---|
Texture normale (sous la ligne de base étendue)
| 2 048 x 2 048 | 512 Mo |
Texture normale (ligne de base prolongée et au-delà)
| 4 096 x 4 096 | 512 Mo |
Texture rectangulaire (sous la ligne de base étendue)
| 2 048 x 2 048 | 512 Mo |
Texture rectangulaire (ligne de base étendue et au-delà)
| 4 096 x 4 096 | 512 Mo |
Texture de cube
| 1 024 x 1024 | 256 Mo |
Limites de texture pour AIR 64 bits (bureau) :
Texture | Taille maximale | Mémoire totale du processeur graphique (GPU) |
---|---|---|
Texture normale (sous la ligne de base étendue)
| 2 048 x 2 048 | 512 Mo |
Texture normale (ligne de base étendue à standard)
| 4 096 x 4 096 | 512 Mo |
Texture normale (ligne de base étendue et au-delà)
| 4096 x 4096 | 2 048 Mo |
Texture rectangulaire (sous la ligne de base étendue)
| 2 048 x 2 048 | 512 Mo |
Texture rectangulaire (ligne de base étendue à standard)
| 4 096 x 4 096 | 512 Mo |
Texture rectangulaire (ligne de base étendue et au-delà)
| 4096 x 4096 | 2 048 Mo |
Texture de cube
| 1 024 x 1024 | 256 Mo |
512 Mo est la limite absolue pour les textures, y compris la texture mémoire requise pour les mipmaps. Toutefois, pour les textures de cube, la limite de mémoire est de 256 Mo.
Vous ne pouvez pas créer d’objets Context3D avec le constructeur Context3D. Il est construit et disponible comme propriété d’une occurrence de Stage3D. La classe Context3D peut être utilisée à la fois sur les plates-formes de bureau et mobiles lorsqu’elle est exécutée dans Flash Player et AIR.
Informations complémentaires
Eléments de l’API associés
Context3DClearMask
Context3DCompareMode
Context3DProgramType
Context3DRenderMode
Context3DStencilAction
Context3DTextureFormat
Context3DTriangleFace
Context3DVertexBufferFormat
flash.display3D.textures.Texture
flash.display3D.textures.CubeTexture
IndexBuffer3D
flash.geom.Matrix3D
Program3D
flash.display.Stage3D
VertexBuffer3D
Propriété | Défini par | ||
---|---|---|---|
backBufferHeight : int [lecture seule]
Spécifie la hauteur de la mémoire tampon d’arrière-plan, qui peut être modifiée par un appel de la méthode configureBackBuffer(). | Context3D | ||
backBufferWidth : int [lecture seule]
Indique la largeur de la mémoire tampon d’arrière-plan, qui peut être modifiée par un appel de la méthode configureBackBuffer (). | Context3D | ||
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
driverInfo : String [lecture seule]
Type de pilote de la bibliothèque des graphiques utilisé par ce contexte de rendu. | Context3D | ||
enableErrorChecking : Boolean
Indique si les erreurs détectées par le moteur de rendu sont transmises à l’application. | Context3D | ||
maxBackBufferHeight : int
Spécifie la hauteur maximale de la mémoire tampon d’arrière-plan. | Context3D | ||
maxBackBufferWidth : int
Spécifie la largeur maximale de la mémoire tampon d’arrière-plan. | Context3D | ||
profile : String [lecture seule]
Profil de prise en charge de fonction utilisé par cet objet Context3D. | Context3D | ||
supportsVideoTexture : Boolean [statique] [lecture seule]
Indique si les objets Context3D prennent en charge la texture vidéo. | Context3D | ||
totalGPUMemory : Number [lecture seule]
Renvoie la mémoire du processeur graphique totale attribuée par les structures de données Stage3D d'une application. Chaque fois qu'un objet de ressource du processeur graphique est créé, la mémoire utilisée est stockée dans Context3D. | Context3D |
Méthode | Défini par | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Enregistre un objet écouteur d’événement auprès d’un objet EventDispatcher afin que l’écouteur soit averti d’un événement. | EventDispatcher | ||
clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Efface les tampons de couleur, de profondeur et de modèle associés à cet objet Context3D et les remplit avec les valeurs spécifiées. | Context3D | ||
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Définit les dimensions de la fenêtre d’affichage et autres attributs du tampon de rendu. | Context3D | ||
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Crée un objet CubeTexture. | Context3D | ||
Crée un objet IndexBuffer3D. | Context3D | ||
Crée un objet Program3D. | Context3D | ||
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Crée un objet RectangleTexture. | Context3D | ||
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Crée un objet Texture. | Context3D | ||
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crée un objet VertexBuffer3D. | Context3D | ||
createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crée un objet VertexBuffer3D pour les données d’instances. | Context3D | ||
Crée un objet VideoTexture. | Context3D | ||
Distribue un événement dans le flux d’événements. | EventDispatcher | ||
Libère toutes les ressources et le stockage interne associés à cet objet Context3D. | Context3D | ||
Trace le tampon de rendu en cours sur une image bitmap. | Context3D | ||
Effectuez le rendu des triangles spécifiés à l’aide de l’état et des tampons actuels de cet objet Context3D. | Context3D | ||
drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Effectuez le rendu des triangles d’instances spécifiés à l’aide des tampons et de l’état actuels de cet objet Context3D. | Context3D | ||
Vérifie si des écouteurs sont enregistrés auprès de l’objet EventDispatcher pour un type spécifique d’événement. | EventDispatcher | ||
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 | ||
Affiche la mémoire tampon de rendu d’arrière-plan. | Context3D | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Supprime un écouteur de l’objet EventDispatcher. | EventDispatcher | ||
Spécifie les facteurs utilisés pour fusionner la couleur de sortie d’une opération de dessin avec la couleur existante. | Context3D | ||
Définit le masque utilisé lors de l’écriture des couleurs dans le tampon de rendu. | Context3D | ||
Définit le mode d’élimination du triangle. | Context3D | ||
Définit le type de comparaison utilisé pour le test de profondeur. | Context3D | ||
Réglez le mode de remplissage utilisé pour le rendu. | Context3D | ||
Définit le programme de sommets et le programme de fragments à utiliser pour le prochain rendu. | Context3D | ||
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Définissez les constantes à utiliser par programme de shaders en utilisant les valeurs stockées dans un objet ByteArray. | Context3D | ||
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Définit les constantes à utiliser par les programmes de shaders à l’aide des valeurs stockées dans un objet Matrix3D. | Context3D | ||
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Définit les entrées de constante pour les programmes de shaders. | Context3D | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Définit la mémoire tampon de rendu d’arrière-plan en tant que cible du rendu. | Context3D | ||
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Définit la texture spécifiée en tant que cible du rendu. | Context3D | ||
Remplace manuellement l’état d’échantillonneur de texture. | Context3D | ||
Définit un rectangle symétrique, qui est un type de masque de dessin. | Context3D | ||
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Définit le mode et l’opération de création de modèle. | Context3D | ||
Définit la valeur de comparaison du modèle utilisée pour tester les modèles. | Context3D | ||
Spécifie la texture à utiliser pour le registre d’entrée de texture d’un programme de fragments. | Context3D | ||
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Spécifie les composants de données de sommets correspondant à une seule entrée de programme de shader de sommets. | Context3D | ||
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 | ||
Vérifie si un écouteur d’événement est enregistré auprès de cet objet EventDispatcher ou de ses ancêtres pour le type d’événement spécifié. | EventDispatcher |
backBufferHeight | propriété |
backBufferHeight:int
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 15, AIR 15 |
Spécifie la hauteur de la mémoire tampon d’arrière-plan, qui peut être modifiée par un appel de la méthode configureBackBuffer()
. La hauteur peut être modifiée lorsque le facteur de zoom du navigateur change si le paramètre wantsBestResolutionOnBrowserZoom
est défini sur true
dans le dernier appel réussi de la méthode configureBackBuffer()
. La modification de la hauteur peut être détectée en enregistrant un écouteur d’événement pour l’événement de changement du zoom du navigateur.
Implémentation
public function get backBufferHeight():int
Eléments de l’API associés
backBufferWidth | propriété |
backBufferWidth:int
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 15, AIR 15 |
Indique la largeur de la mémoire tampon d’arrière-plan, qui peut être modifiée par un appel de la méthode configureBackBuffer()
. La largeur peut être modifiée lorsque le facteur de zoom du navigateur change si le paramètre wantsBestResolutionOnBrowserZoom
est défini sur true
dans le dernier appel réussi de la méthode configureBackBuffer()
. La modification de la largeur peut être détectée en enregistrant un écouteur d’événement pour l’événement de changement du zoom du navigateur.
Implémentation
public function get backBufferWidth():int
Eléments de l’API associés
driverInfo | propriété |
driverInfo:String
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Type de pilote de la bibliothèque des graphiques utilisé par ce contexte de rendu. Indique si le rendu utilise un logiciel, un pilote DirectX ou un pilote OpenGL. Indique également si le rendu matériel a échoué. Si le rendu matériel a échoué, Flash Player utilise le rendu logiciel pour Stage3D, et driverInfo
contient l’une des valeurs suivantes :
- "Software Hw_disabled=userDisabled" : la case Activer l’accélération matérielle de l’interface utilisateur des paramètres d’Adobe Flash Player n’est pas cochée.
- "Software Hw_disabled=oldDriver" : il existe des problèmes connus avec le pilote de graphiques du matériel. Mettre à jour le pilote de graphiques peut résoudre ce problème.
- "Software Hw_disabled=unavailable" : il existe des problèmes connus avec le pilote de graphiques du matériel ou son initialisation.
- "Software Hw_disabled=explicit" : le contenu a explicitement sollicité le rendu logiciel via requestContext3D.
- "Software Hw_disabled=domainMemory" : le contenu utilise domainMemory, qui requiert une licence lorsqu’il est utilisé avec le rendu matériel Stage3D. Voir adobe.com/go/fpl_fr.
Implémentation
public function get driverInfo():String
enableErrorChecking | propriété |
enableErrorChecking:Boolean
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Indique si les erreurs détectées par le moteur de rendu sont transmises à l’application.
Lorsque la propriété enableErrorChecking
est définie sur true
, les méthodes clear()
, et drawTriangles()
sont synchrones et peuvent renvoyer des erreurs. Lorsque la propriété enableErrorChecking
est définie sur false
(valeur par défaut), les méthodes clear()
et drawTriangles()
sont asynchrones et les erreurs ne sont pas signalées. L’activation de la détection d’erreurs réduit les performances de rendu. Vous devez activer la détection d’erreurs uniquement lors de la phase de débogage.
Implémentation
public function get enableErrorChecking():Boolean
public function set enableErrorChecking(value:Boolean):void
Eléments de l’API associés
maxBackBufferHeight | propriété |
maxBackBufferHeight:int
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 15, AIR 15 |
Spécifie la hauteur maximale de la mémoire tampon d’arrière-plan. La valeur initiale est la limite système de la plate-forme. La propriété peut être définie sur une valeur inférieure ou égale, mais pas supérieure, à la limite du système. La propriété peut être définie sur une valeur supérieure ou égale, mais pas inférieure, à la limite minimale. La limite minimale est une valeur constante (32) lorsque la mémoire tampon d’arrière-plan n’est pas configurée. La limite minimale sera la valeur du paramètre de hauteur dans le dernier appel réussi de la méthode configureBackBuffer()
après la configuration de la mémoire tampon d’arrière-plan.
Implémentation
public function get maxBackBufferHeight():int
public function set maxBackBufferHeight(value:int):void
maxBackBufferWidth | propriété |
maxBackBufferWidth:int
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 15, AIR 15 |
Spécifie la largeur maximale de la mémoire tampon d’arrière-plan. La valeur initiale est la limite système de la plate-forme. La propriété peut être définie sur une valeur inférieure ou égale, mais pas supérieure, à la limite du système. La propriété peut être définie sur une valeur supérieure ou égale, mais pas inférieure, à la limite minimale. La limite minimale est une valeur constante (32) lorsque la mémoire tampon d’arrière-plan n’est pas configurée. La limite minimale sera la valeur du paramètre de largeur dans le dernier appel réussi de la méthode configureBackBuffer()
après la configuration de la mémoire tampon d’arrière-plan.
Implémentation
public function get maxBackBufferWidth():int
public function set maxBackBufferWidth(value:int):void
profile | propriété |
supportsVideoTexture | propriété |
totalGPUMemory | propriété |
totalGPUMemory:Number
[lecture seule] Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 21, AIR 21 |
Renvoie la mémoire du processeur graphique totale attribuée par les structures de données Stage3D d'une application.
Chaque fois qu'un objet de ressource du processeur graphique est créé, la mémoire utilisée est stockée dans Context3D. Cette mémoire comprend des tampons d'index, des tampons de vertex, des textures (à l'exception de la texture vidéo), et des programmes qui ont été créés à l'aide de Context3D.
L'API totalGPUMemory
renvoie toute la mémoire consommée par les ressources ci-dessus à l'utilisateur. La valeur par défaut renvoyée est 0. La mémoire du processeur graphique totale renvoyée est exprimée en octets. Les informations sont uniquement disponibles en mode Direct sur les périphériques mobiles, et en mode Direct et en mode Processeur graphique sur les ordinateurs de bureau. (Sur un ordinateur de bureau, l'utilisation de <renderMode>gpu</renderMode>
rétablit <renderMode>direct</renderMode>
)
Implémentation
public function get totalGPUMemory():Number
clear | () | méthode |
public function clear(red:Number = 0.0, green:Number = 0.0, blue:Number = 0.0, alpha:Number = 1.0, depth:Number = 1.0, stencil:uint = 0, mask:uint = 0xffffffff):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Efface les tampons de couleur, de profondeur et de modèle associés à cet objet Context3D et les remplit avec les valeurs spécifiées.
Définissez le paramètre mask
pour spécifier les tampons à effacer. Utilisez les constantes définies dans la classe Context3DClearMask pour définir le paramètre mask
. Utilisez l’opérateur OR au niveau du bit "|" pour ajouter plusieurs tampons au masque (ou utilisez Context3DClearMask.ALL
). Lors du rendu sur la mémoire tampon d’arrière-plan, la méthode configureBackBuffer()
doit être appelée avant tout appel de clear()
.
Remarque : si vous spécifiez une valeur de paramètre en dehors de la plage autorisée, les valeurs du paramètre Numeric sont silencieusement réglées sur la plage zéro à un. De la même façon, si stencil
est supérieur à 0xff, il est défini sur 0xff.
Paramètres
red:Number (default = 0.0 ) — composante rouge de la couleur avec laquelle effacer le tampon de couleur, dans la plage zéro à un.
| |
green:Number (default = 0.0 ) — composante verte de la couleur avec laquelle effacer le tampon de couleur, dans la plage zéro à un.
| |
blue:Number (default = 0.0 ) — composante bleue de la couleur avec laquelle effacer le tampon de couleur, dans la plage zéro à un.
| |
alpha:Number (default = 1.0 ) — composante alpha de la couleur avec laquelle effacer le tampon de couleur, dans la plage zéro à un. Le composant alpha n’est pas utilisé pour la fusion. Il est écrit directement dans la mémoire tampon alpha.
| |
depth:Number (default = 1.0 ) — valeur à utiliser pour effacer le tampon de profondeur, dans la plage zéro à un.
| |
stencil:uint (default = 0 ) — valeur 8 bits avec laquelle effacer le tampon de modèle, dans une plage de 0x00 à 0xff.
| |
mask:uint (default = 0xffffffff ) — spécifie les tampons à effacer.
|
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
|
Eléments de l’API associés
configureBackBuffer | () | méthode |
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit les dimensions de la fenêtre d’affichage et autres attributs du tampon de rendu.
Le rendu est mis en tampon deux fois. La mémoire tampon d’arrière-plan est remplacée par la mémoire tampon d’avant plan visible lors de l’appel de la méthode present()
. La taille minimale du tampon est de 32 x 32 pixels. La taille maximale de la mémoire tampon d’arrière-plan est limitée par les fonctionnalités du périphérique et peut également être définie par l’utilisateur via les propriétés maxBackBufferWidth
et maxBackBufferHeight
. La configuration de la mémoire tampon est une opération lente. Evitez de modifier la taille du tampon ou les attributs lors d’opérations de rendu normales.
Paramètres
width:int — largeur du tampon, en pixels.
| |||||||||
height:int — hauteur du tampon, en pixels.
| |||||||||
antiAlias:int — une valeur entière qui spécifie la qualité d’anticrènelage demandée. Cette valeur correspond au nombre de sous-échantillons utilisés lors de l’anticrènelage. L’utilisation de davantage de sous-échantillons nécessite plus de calculs, bien que l’impact de performance relative dépende du matériel de rendu. Type d’anticrènelage et si l’anticrènelage effectué dépend du périphérique et du mode de rendu. L’anticrènelage n’est pas pris en charge par le contexte de rendu logiciel.
| |||||||||
enableDepthAndStencil:Boolean (default = true ) — false ne crée pas de tampon de profondeur ni de tampon de modèle, true crée un tampon de profondeur et de modèle. Pour l'application AIR 3.2 (ou une version ultérieure) compilée avec le fichier SWF version 15 ou ultérieure, si l'élément renderMode dans le fichier descripteur de l'application est direct , l'élément depthAndStencil dans le fichier descripteur de l'application doit avoir la même valeur que cet argument. Par défaut, la valeur de l'élément depthAndStencil est false .
| |||||||||
wantsBestResolution:Boolean (default = false ) — true indique que si le périphérique prend en charge les écrans HiDPI, il tente d’allouer une plus grande mémoire tampon de sauvegarde que celle indiquée avec les paramètres de largeur et de hauteur. Etant donné que ce paramètre augmente la quantité de pixels et peut modifier le résultat des opérations de shader, il est par défaut désactivé. Utilisez Stage.contentsScaleFactor pour déterminer la valeur d’augmentation de la taille de la mémoire tampon de sauvegarde native.
| |||||||||
wantsBestResolutionOnBrowserZoom:Boolean (default = false ) — true indique que la taille de la mémoire tampon d’arrière-plan doit augmenter proportionnellement à l’augmentation du facteur de zoom du navigateur. Le paramétrage de cette valeur est constant entre les zooms de différents navigateurs. La valeur par défaut du paramètre est false . Définissez les propriétés maxBackBufferWidth et maxBackBufferHeight pour limiter l’augmentation de la taille de la mémoire tampon d’arrière-plan. Utilisez backBufferWidth et backBufferHeight pour déterminer la taille actuelle de la mémoire tampon d’arrière-plan.
|
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Taille d’entrée incorrecte : la valeur des paramètres de largeur ou de hauteur est inférieure à la taille minimale autorisée de la mémoire tampon d’arrière-plan ou supérieure à la taille maximale de la mémoire tampon d’arrière-plan.
| |
Error — 3709 : l’indicateur depthAndStencil dans le descripteur de l’application doit correspondre à la valeur booléenne enableDepthAndStencil transmise à configureBackBuffer() sur l’objet Context3D.
|
createCubeTexture | () | méthode |
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Crée un objet CubeTexture.
Utilisez un objet CubeTexture pour télécharger les bitmaps de texture de cube dans le contexte de rendu et pour référencer une texture de cube lors du rendu. Un texture de cube se compose de six textures carrées de taille égale organisées dans une topologie cubique ; elle permet notamment de décrire les textures d’environnement.
Vous ne pouvez pas créer d’objets CubeTexture avec un constructeur CubeTexture ; utilisez plutôt la méthode suivante. Après la création d’un objet CubeTexture, téléchargez les données bitmap de la texture à l’aide de la méthode uploadFromBitmapData()
, uploadFromByteArray()
ou uploadCompressedTextureFromByteArray()
de CubeTexture.
Paramètres
size:int — Longueur de la bordure de la texture, en texels.
| |
format:String — Format texel de la liste numérotée de Context3DTextureFormat.
La compression de texture permet d’enregistrer des images de texture au format compressé directement sur le GPU en vue d’économiser la mémoire GPU et la bande passante. En règle générale, les textures sont compressées hors ligne et téléchargées vers le GPU sous forme compressée à l’aide de la méthode Texture.uploadCompressedTextureFromByteArray. Sur les plates-formes de bureau, Flash Player 11.4 et AIR 3.4 offrent la prise en charge de la compression de texture à l’exécution, ce qui peut être pratique dans certains cas, par exemple la création de textures dynamiques à partir d’illustrations vectorielles. Notez que cette fonction n’est actuellement pas disponible sur les plates-formes mobiles et qu’une erreur ArgumentError (discordance du format de texture) sera renvoyée. Pour utiliser la compression de texture à l’exécution, procédez comme suit : 1. Créez l’objet de texture en appelant la méthode Context3D.createCubeTexture(), et en transmettant flash.display3D.Context3DTextureFormat.COMPRESSED ou flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA en tant que paramètre de format. 2. Avec l’instance flash.display3D.textures.Texture renvoyée par createCubeTexture(), appelez flash.display3D.textures.CubeTexture.uploadFromBitmapData() ou flash.display3D.textures.CubeTexture.uploadFromByteArray() pour télécharger et compresser la texture en une étape. | |
optimizeForRenderToTexture:Boolean — Choisissez true s’il est probable que la texture soit utilisée comme cible de rendu.
| |
streamingLevels:int (default = 0 ) — Niveau mipmap devant être chargé avant le rendu de l’image. La diffusion de texture offre la possibilité de charger et d’afficher les plus petits niveaux mip d’abord, puis d’afficher progressivement des images de plus haute qualité au cours du chargement des textures. Les utilisateurs finaux peuvent afficher les images de faible qualité dans une application alors que les images de meilleure qualité sont en cours de chargement.
Par défaut, la valeur de streamingLevels est 0, ce qui signifie que l’image de qualité plus élevée dans le mipmap doit être chargée avant le rendu de l’image. Ce paramètre a été ajouté dans Flash Player 11.3 et AIR 3.3. L’utilisation de la valeur par défaut conserve le comportement des versions antérieures de Flash Player et AIR. Définissez Remarque : définir cette propriété sur une valeur > 0 peut avoir une incidence sur l’utilisation et les performances de la mémoire. |
flash.display3D.textures:CubeTexture |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop d'objets de texture sont créés ou si la quantité de mémoire allouée aux textures est dépassée.
| |
ArgumentError — Texture de profondeur non implémentée : si vous tentez de créer une texture de profondeur.
| |
ArgumentError — La taille de la texture est de zéro : si le paramètre size n'est pas supérieur à zéro.
| |
ArgumentError — La texture n'est pas une puissance de deux : si le paramètre size n'est pas une puissance de deux.
| |
ArgumentError — Texture trop grande : si le paramètre size est supérieur à 1024.
| |
Error — Échec de la création de la texture : si l’objet CubeTexture n’a pas pu être créé par le contexte de rendu (et qu’aucune information sur la raison de l’échec n’est disponible).
| |
ArgumentError — Niveau de diffusion non valide : si streamingLevels est supérieure ou égale à log2(taille).
|
Eléments de l’API associés
createIndexBuffer | () | méthode |
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Crée un objet IndexBuffer3D.
Utilisez un objet IndexBuffer3D pour télécharger un ensemble d’index de triangle dans le contexte de rendu et référencer cet ensemble d’index pour le rendu. Chaque index dans le tampon d’index fait référence à un sommet correspondant dans un tampon de sommets. Chaque ensemble de trois index identifie un triangle. Transmettez l’objet IndexBuffer3D à la méthode drawTriangles()
pour effectuer le rendu d’un ou de plusieurs triangles définis dans le tampon d’index.
Vous ne pouvez pas créer d’objets IndexBuffer3D avec le constructeur de la classe IndexBuffer3D ; utilisez plutôt la méthode suivante. Après la création d’un objet IndexBuffer3D, téléchargez les index à l’aide de la méthode uploadFromVector()
ou uploadFromByteArray()
de l’objet IndexBuffer3D.
Paramètres
numIndices:int — Nombre de sommets à stocker dans la mémoire tampon.
| |
bufferUsage:String (default = "staticDraw ") — Utilisation du tampon attendue. Utilisez l’une des constantes définies dans Context3DBufferUsage . Le pilote matériel peut effectuer l’optimisation appropriée si vous la définissez correctement. Ce paramètre n’est disponible qu’à partir de Flash 12/AIR 4.
|
IndexBuffer3D |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop de tampons d'index sont créés ou si la quantité de mémoire allouée aux tampons d'index est dépassée.
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
| |
ArgumentError — Tampon trop grand : lorsquenumIndices est supérieur ou égal à 0xf0000.
|
Eléments de l’API associés
createProgram | () | méthode |
public function createProgram():Program3D
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Crée un objet Program3D.
Utilisez un objet Program3D pour télécharger les programmes de shaders dans le contexte de rendu et référencer les programmes téléchargés lors du rendu. Un objet Program3D stocke deux programmes, un programme de sommets et un programme de fragments (également connu sous le nom programme de pixels). Les programmes sont écrits dans langage binaire d’assemblage de shaders.
Vous ne pouvez pas créer d’objets Program3D avec un constructeur Program3D ; utilisez plutôt la méthode suivante. Après la création d’un objet Program3D, téléchargez les programmes à l’aide de la méthode upload()
de l’objet Program3D.
Program3D |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Le nombre de programmes dépasse 4 096 ou la mémoire totale dépasse 16 Mo (utilisez dispose pour libérer les ressources de l’objet Program3D).
|
Eléments de l’API associés
Exemple ( Comment utiliser cet exemple )
renderContext
est une occurrence de la classe Context3D. Les programmes de l'exemple sont écrits en langage Adobe Graphics Assembly (AGAL).
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
createRectangleTexture | () | méthode |
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11.8, AIR 3.8 |
Crée un objet RectangleTexture.
Utilisez un objet RectangleTexture pour télécharger les bitmaps de texture dans le contexte de rendu et pour référencer une texture lors du rendu.
Il est impossible de créer des objets RectangleTexture avec un constructeur RectangleTexture ; utilisez plutôt cette méthode. Après la création d’un objet RectangleTexture, téléchargez les bitmaps de texture à l’aide de la méthode uploadFromBitmapData()
ou uploadFromByteArray()
.
Notez que les textures d’entier 32 bits sont stockées dans un format BGRA compressé pour qu’elles correspondent au format BitmapData
de Flash. Les textures à virgule flottante utilisent un format RGBA conventionnel.
Les textures Rectangle Texture sont différentes des textures 2D ordinaires car il n’est pas nécessaire que leur largeur et leur hauteur soient des puissances de deux. En outre, elles ne contiennent pas de mipmaps. Elles sont particulièrement utiles lors du rendu de textures. Si une texture de rectangle est utilisée avec un échantillonneur qui fait appel au filtrage mipmap ou à l’habillage à répétition, l’appel drawTriangles échoue. Par ailleurs, la texture de rectangle n’autorise pas la diffusion en continu. Les seuls formats de texture pris en charge par RectangleTexture sont BGRA, BGR_PACKED et BGRA_PACKED. Les formats de texture compressés ne sont pas pris en charge par RectangleTexture.
Paramètres
width:int — Largeur de la texture, en texels.
| |
height:int — Hauteur de la texture, en texels.
| |
format:String — Format texel de la liste numérotée de Context3DTextureFormat.
| |
optimizeForRenderToTexture:Boolean — Choisissez true s’il est probable que la texture soit utilisée comme cible de rendu.
|
flash.display3D.textures:RectangleTexture |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop d'objets de texture sont créés ou si la quantité de mémoire allouée aux textures est dépassée.
| |
ArgumentError — La taille de la texture est de zéro : si les paramètres width et height ne sont pas supérieurs à zéro.
| |
ArgumentError — Texture trop grande : si le paramètre width ou height est supérieur à 2048.
| |
Error — Echec de la création de la texture : si l'objet Texture n'a pas pu être créé par le contexte de rendu (et qu'aucune information sur la raison de l'échec n'est disponible).
| |
Error — Nécessite un profil de ligne de base ou supérieur : si la texture rectangulaire est créée avec le profil limité par ligne de base.
|
Eléments de l’API associés
createTexture | () | méthode |
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Crée un objet Texture.
Utilisez un objet Texture pour télécharger les bitmaps de texture dans le contexte de rendu et pour référencer une texture lors du rendu.
Vous ne pouvez pas créer d’objets Texture avec un constructeur Texture ; utilisez plutôt la méthode suivante. Après la création d’un objet Texture, téléchargez les bitmaps de texture à l’aide de la méthode uploadFromBitmapData()
, uploadFromByteArray()
ou uploadCompressedTextureFromByteArray()
de l’objet Texture.
Notez que les textures d’entier 32 bits sont stockées dans un format BGRA compressé pour qu’elles correspondent au format BitmapData
de Flash. Les textures à virgule flottante utilisent un format RGBA conventionnel.
Paramètres
width:int — Largeur de la texture, en texels.
| |
height:int — Hauteur de la texture, en texels.
| |
format:String — Format texel de la liste numérotée de Context3DTextureFormat.
La compression de texture permet d’enregistrer des images de texture au format compressé directement sur le GPU en vue d’économiser la mémoire GPU et la bande passante. En règle générale, les textures sont compressées hors ligne et téléchargées vers le GPU sous forme compressée à l’aide de la méthode Texture.uploadCompressedTextureFromByteArray. Sur les plates-formes de bureau, Flash Player 11.4 et AIR 3.4 offrent la prise en charge de la compression de texture à l’exécution, ce qui peut être pratique dans certains cas, par exemple la création de textures dynamiques à partir d’illustrations vectorielles. Notez que cette fonction n’est actuellement pas disponible sur les plates-formes mobiles et qu’une erreur ArgumentError (discordance du format de texture) sera renvoyée. Pour utiliser la compression de texture à l’exécution, procédez comme suit : 1. Créez l’objet de texture en appelant la méthode Context3D.createTexture(), et en transmettant flash.display3D.Context3DTextureFormat.COMPRESSED ou flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA en tant que paramètre de format. 2. Avec l’instance flash.display3D.textures.Texture renvoyée par createCubeTexture(), appelez flash.display3D.textures.Texture.uploadFromBitmapData() ou flash.display3D.textures.Texture.uploadFromByteArray() pour télécharger et compresser la texture en une étape. | |
optimizeForRenderToTexture:Boolean — Choisissez true s’il est probable que la texture soit utilisée comme cible de rendu.
| |
streamingLevels:int (default = 0 ) — Niveau mipmap devant être chargé avant le rendu de l’image. La diffusion de texture offre la possibilité de charger et d’afficher les plus petits niveaux mip d’abord, puis d’afficher progressivement des images de plus haute qualité au cours du chargement des textures. Les utilisateurs finaux peuvent afficher les images de faible qualité dans une application alors que les images de meilleure qualité sont en cours de chargement.
Par défaut, la valeur de streamingLevels est 0, ce qui signifie que l’image de qualité plus élevée dans le mipmap doit être chargée avant le rendu de l’image. Ce paramètre a été ajouté dans Flash Player 11.3 et AIR 3.3. L’utilisation de la valeur par défaut conserve le comportement des versions antérieures de Flash Player et AIR. Définissez Remarque : définir cette propriété sur une valeur > 0 peut avoir une incidence sur l’utilisation et les performances de la mémoire. |
flash.display3D.textures:Texture |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop d'objets de texture sont créés ou si la quantité de mémoire allouée aux textures est dépassée.
| |
ArgumentError — Texture de profondeur non implémentée : si vous tentez de créer une texture de profondeur.
| |
ArgumentError — La taille de la texture est de zéro : si les paramètres width et height ne sont pas supérieurs à zéro.
| |
ArgumentError — La texture n'est pas une puissance de deux : si les paramètres width et height ne sont pas une puissance de deux.
| |
ArgumentError — Texture trop grande : si le paramètre width ou height est supérieur à 2048 pour la ligne de base et le profil limité par ligne de base ou si le paramètre width ouheight est supérieur à 4096 pour la ligne de base de profil prolongée et au_delà.
| |
Error — Échec de la création de la texture : si l’objet Texture n’a pas pu être créé par le contexte de rendu (et qu’aucune information sur la raison de l’échec n’est disponible).
| |
ArgumentError — Niveau de diffusion non valide : si streamingLevels est supérieure ou égale à log2(min(width,height)).
|
Eléments de l’API associés
createVertexBuffer | () | méthode |
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Crée un objet VertexBuffer3D.
Utilisez un objet VertexBuffer3D pour télécharger un ensemble de données de sommet dans le contexte de rendu. Un tampon de sommets contient les données nécessaires pour rendre chaque point dans la géométrie de la scène. Les attributs de données associés à chaque sommet comprennent généralement la position, la couleur et les coordonnées de texture, et servent d’entrée dans le programme de shaders de sommets. Identifiez les valeurs de données qui correspondent à l’une des entrées du programme de sommets à l’aide de la méthode setVertexBufferAt()
. Vous pouvez définir jusqu’à 64 valeurs 32 bits pour chaque sommet.
Vous ne pouvez pas créer d’objets VertexBuffer3D avec un constructeur VertexBuffer3D ; utilisez plutôt la méthode suivante. Après la création d’un objet VertexBuffer3D, téléchargez les index à l’aide de la méthode uploadFromVector()
ou uploadFromByteArray()
de l’objet VertexBuffer3D.
Paramètres
numVertices:int — Nombre de sommets à stocker dans la mémoire tampon. Le nombre maximal de sommets dans une mémoire tampon est de 65535.
| |
data32PerVertex:int — nombre de valeurs de données 32 bits (4 octets) associé à chaque sommet. Le nombre maximal d’éléments de données 32 bits par sommet est de 64 (ou 256 octets). Notez que seuls huit registres d’attribut sont accessibles via un programme de shaders de sommets à un moment donné. Utilisez SetVertextBufferAt() pour sélectionner les attributs à partir d’un tampon de sommets.
| |
bufferUsage:String (default = "staticDraw ") — Utilisation du tampon attendue. Utilisez l’une des constantes définies dans Context3DBufferUsage . Le pilote matériel peut effectuer l’optimisation appropriée si vous la définissez correctement. Ce paramètre n’est disponible qu’à partir de Flash 12/AIR 4.
|
VertexBuffer3D |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop d'objets de tampons de sommets sont créés ou si la quantité de mémoire allouée aux tampons de sommets est dépassée.
| |
ArgumentError — Tampon trop grand : lorsque numVertices est supérieur à 0x10000 ou data32PerVertex est supérieur à 64.
| |
ArgumentError — Le tampon a une taille de zéro : lorsque numVertices est égal à zéro ou data32PerVertex est égal à zéro.
| |
ArgumentError — Echec de la création du tampon : si l'objet VertexBuffer3D n'a pas pu être créé par le contexte de rendu (et qu'aucune information sur la raison de l'échec n'est disponible).
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
|
Eléments de l’API associés
Exemple ( Comment utiliser cet exemple )
setVertexBufferAt()
pour spécifier que les trois premiers points de données sont transmis au programme de sommets en tant que 3 valeurs à virgule flottante dans va0 et que les trois points de données suivants sont transmis comme va1. Un programme de sommets peut avoir jusqu'à 8 entrées, également appelées registres d'attributs de sommets, définis de la façon suivante.
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
createVertexBufferForInstances | () | méthode |
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 20.0 |
Crée un objet VertexBuffer3D pour les données d’instances.
Utilisez un objet VertexBuffer3D pour télécharger un jeu de données d’instances dans le contexte de rendu. Un tampon de sommets contient les données nécessaires pour rendre chaque instance dans la géométrie de la scène. Les tampons de sommets avec données d’instance fournissent des attributs communs à tous les sommets d’une instance et servent de mode d’entrée au programme de nuanceur de sommets. Identifiez les valeurs de données qui correspondent à l’une des entrées du programme de sommets à l’aide de la méthode setVertexBufferAt()
. Vous pouvez spécifier jusqu’à soixante quatre valeurs à 32 bits pour chaque élément de tampon de sommet.
Vous ne pouvez pas créer d’objets VertexBuffer3D avec un constructeur VertexBuffer3D ; utilisez plutôt la méthode suivante. Après la création d’un objet VertexBuffer3D, téléchargez les index à l’aide de la méthode uploadFromVector()
ou uploadFromByteArray()
de l’objet VertexBuffer3D.
Paramètres
numVertices:int — le nombre d’éléments à stocker dans le tampon. Le nombre maximal d’éléments dans un tampon unique est 65535.
| |
data32PerVertex:int — le nombre de valeurs de données 32-bit(4-byte) associées à chaque élément. Le nombre maximal d’éléments de données 32 bits par sommet est de 64 (ou 256 octets).
| |
instancesPerElement:int — le nombre d’instances allant utiliser un élément du tampon de sommets.
| |
bufferUsage:String (default = "staticDraw ") — Utilisation du tampon attendue. Utilisez l’une des constantes définies dans Context3DBufferUsage . Le pilote matériel peut effectuer l’optimisation appropriée si vous la définissez correctement. Ce paramètre n’est disponible qu’à partir de Flash 12/AIR 4.
|
VertexBuffer3D |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop d'objets de tampons de sommets sont créés ou si la quantité de mémoire allouée aux tampons de sommets est dépassée.
| |
ArgumentError — Tampon trop grand : lorsque numVertices est supérieur à 0x10000 ou data32PerVertex est supérieur à 64.
| |
ArgumentError — Le tampon a une taille de zéro : lorsque numVertices est égal à zéro ou data32PerVertex est égal à zéro.
| |
ArgumentError — Echec de la création du tampon : si l'objet VertexBuffer3D n'a pas pu être créé par le contexte de rendu (et qu'aucune information sur la raison de l'échec n'est disponible).
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
| |
Error — Requiert un profil étendu standard ou supérieur : si cette méthode est appelée lorsque le profil demandé est inférieur au profil d’extension standard.
| |
Error — Instances non valides par élément : si instancesPerElement n’est pas supérieur à zéro.
|
Eléments de l’API associés
createVideoTexture | () | méthode |
public function createVideoTexture():flash.display3D.textures:VideoTexture
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 17.0, Flash Player 18.0 |
Crée un objet VideoTexture.
Utilisez un objet VideoTexture pour obtenir des images vidéo comme texture d’objet NetStream ou Camera et pour télécharger les images vidéo dans le contexte de rendu.
Impossible de créer l’objet VideoTexture avec le constructeur VideoTexture ; utilisez plutôt la méthode suivante. Après avoir créé un objet VideoTexture, affectez-lui l’objet NetStream ou Camera pour obtenir les images vidéo avec les méthodes attachNetStream()
ou attachCamera()
.
Remarque : cette méthode renvoie null si le système ne prend pas en charge cette fonctionnalité.
L’objet VideoTexture ne contient pas les mipmaps. Si VideoTexture est utilisé avec un échantillonneur qui fait appel au filtrage mipmap ou à l’habillage à répétition, l’appel drawTriangles échoue. Les shaders peuvent traiter VideoTexture comme texture BGRA. La tentative d’instanciation de l’objet VideoTexture échoue si l’objet Context3D a été sollicité avec le mode de rendu de logiciel.
4 objets VideoTexture au maximum sont disponibles par instance Context3D. Sur mobile, le nombre réel d’objets VideoTexture pris en charge peut être inférieur à 4 en raison des limites liées à la plate-forme.
Valeur renvoyéeflash.display3D.textures:VideoTexture |
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Dépassement de la limite de ressources : si trop d'objets de texture sont créés ou si la quantité de mémoire allouée aux textures est dépassée.
| |
Error — Échec de la création de la texture : si l’objet Texture n’a pas pu être créé par le contexte de rendu (et qu’aucune information sur la raison de l’échec n’est disponible).
|
dispose | () | méthode |
public function dispose(recreate:Boolean = true):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Libère toutes les ressources et le stockage interne associés à cet objet Context3D.
Les tampons d’index, tampons de sommets, textures et programmes ayant été créés à l’aide de cet objet Context3D sont éliminés, comme si vous appeliez la méthode dispose()
sur chacun d’entre eux. L’objet Context3D lui-même est par ailleurs éliminé et libère toutes les mémoires tampon temporaires et la mémoire tampon d’arrière-plan. Si vous appelez configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer(), ou drawToBitmapData() après l’appel de la méthode dispose(), le moteur d’exécution renvoie une exception.
Avertissement : Appeler dispose() sur un Context3D alors qu’un écouteur d’événement pour Events.CONTEXT3D_CREATE est toujours défini sur l’objet Stage3D associé entraîne la simulation d’une perte de périphérique. Un nouvel objet Context3D est créé sur Stage3D et l’événement Events.CONTEXT3D_CREATE est à nouveau distribué. Si cela n’est pas souhaité, retirez l’écouteur d’événement de l’objet Stage3D avant d’appeler dispose() ou de définir le paramètre recreate sur false.
Paramètres
recreate:Boolean (default = true )
|
Eléments de l’API associés
flash.display.Stage3D
drawToBitmapData | () | méthode |
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 3 |
Trace le tampon de rendu en cours sur une image bitmap.
Le contenu actuel de la mémoire tampon de rendu d’arrière-plan est copié dans un objet BitmapData. Il s’agit d’une opération potentiellement lente pouvant prendre jusqu’à une seconde. Utilisez-la avec soin. Notez que cette fonction ne copie pas la mémoire tampon de rendu d’avant plan (celle affichée sur la scène), mais celle étant représentée. Pour capturer l’image rendue telle qu’elle apparaît sur la scène, appelez drawToBitmapData()
immédiatement avant d’appeler present()
.
À partir d’AIR 25, deux nouveaux paramètres ont été ajoutés à l’API drawToBitmapData()
. Cette API accepte désormais trois paramètres. Le premier est le paramètre existant destination:BitmapData
. Le second paramètre est srcRect:Rectangle
, qui est le rectangle cible sur stage3D. Le troisième paramètre est destPoint:Point
, qui indique les coordonnées du bitmap de destination. srcRect et destPoint sont facultatifs. Ce sont les paramètres par défaut de (0,0,bitmapWidth,bitmapHeight) et (0,0), respectivement.
Lorsque l’image est dessinée, elle n’est pas mise à l’échelle pour s’adapter à l’image bitmap. Au lieu de cela, le contenu est tronqué sur la taille du bitmap de destination.
Les objets BitmapData Flash stockent les couleurs déjà multipliées par le composant alpha. Par exemple, si les composants de couleurs rvb « purs » d’un pixel sont (0x0A, 0x12, 0XBB) et que le composant alpha est 0x7F (.5), le pixel est stocké dans l’objet BitmapData avec les valeurs rvba : (0x05, 0x09, 0x5D, 0x7F). Vous pouvez définir les facteurs de fusion de façon à ce que les couleurs rendues dans la mémoire tampon soient multipliées par alpha, ou effectuer cette opération dans le shader de fragments. Le contexte de rendu ne valide pas le fait que les couleurs sont stockées au format prémultiplié.
Paramètres
destination:BitmapData | |
srcRect:Rectangle (default = null )
| |
destPoint:Point (default = null )
|
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
| |
Error — 3802 : si l’un ou l’autre des paramètres destPoint:Point ou srcRect:Rectangle est en dehors des limites de coordonnées du bitmap/stage3D, ou si les valeurs non-Numeric (NaN) sont transmises en tant qu’entrée.
|
Exemple ( Comment utiliser cet exemple )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.filters.DropShadowFilter; public class Context3D_drawToBitmapData extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var bitmap:Bitmap; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_drawToBitmapData() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 0; stage3D.y = 0; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Clear required before first drawTriangles() call renderContext.clear( .3,.3,.3 ); //Draw the 2 triangles renderContext.drawTriangles( indexList, 0, 2 ); var renderedBitmapData:BitmapData = new BitmapData( viewWidth, viewHeight, true ); renderContext.drawToBitmapData( renderedBitmapData ); renderContext.present(); //Add to stage bitmap = new Bitmap( renderedBitmapData ); this.addChild( bitmap ); bitmap.x = 55; bitmap.y = 25; bitmap.filters = [new DropShadowFilter( 8, 235, .4 )]; } } }
drawTriangles | () | méthode |
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Effectuez le rendu des triangles spécifiés à l’aide de l’état et des tampons actuels de cet objet Context3D.
Pour chaque triangle, les sommets du triangle sont traités par le programme de shaders de sommets et la surface du triangle est traitée par le programme de shaders de pixels. La couleur de sortie du programme de pixels pour chaque pixel est représentée à la cible du rendu selon les opérations de modèle, le test de profondeur, la propriété alpha source et de destination, et le mode de fusion en cours. La destination du rendu peut être le tampon de rendu principal ou une texture.
Si la fonction d’élimination est activée (avec la méthode setCulling()
), les triangles peuvent être supprimés de la séquence avant l’exécution du programme de pixels. Si le test de modèle et le test de profondeur sont activés, il est possible d’ignorer la sortie des pixels à partir du programme de pixels sans mettre à jour la destination du moteur de rendu. En outre, le programme de pixels peut décider de ne pas afficher de couleur pour un pixel.
Les triangles rendus n’apparaissent pas dans la fenêtre d’affichage tant que vous n’appelez pas la méthode present()
. Après chaque appel de la méthode present()
, la méthode clear()
doit être appelée avant le premier appel de drawTriangles()
ou le rendu échoue.
Lorsque enableErrorChecking
est false
, cette fonction est immédiatement renvoyée, n’attend pas les résultats et renvoie des exceptions uniquement si la valeur de cette occurrence de Context3D a été éliminée ou dans le cas d’appels de dessin trop nombreux. Si l’état du contexte de rendu n’est pas valide, le rendu échoue silencieusement. Lorsque la propriété enableErrorChecking
est définie sur true
, cette fonction est renvoyée une fois les triangles tracés, puis renvoie des exceptions pour toute erreur de dessin ou d’état de contexte non valide.
Paramètres
indexBuffer:IndexBuffer3D — Ensemble d’index de sommets qui référence les sommets à rendre.
| |
firstIndex:int (default = 0 ) — Index du premier index de sommets sélectionné pour le rendu. La valeur par défaut est 0.
| |
numTriangles:int (default = -1 ) — Nombre de triangles à rendre. Chaque triangle consomme trois index. Transmettez -1 pour tracer tous les triangles dans le tampon de l’index. La valeur par défaut est -1.
|
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Si cette méthode est appelée trop souvent entre les appels sur present() . Le nombre maximum d’appels est 32 768.
Les erreurs suivantes sont uniquement renvoyées lorsque la propriété | |
Error — Effacement nécessaire avant le dessin : si la mémoire tampon n’a pas été effacée depuis le dernier appel de present() .
| |
Error — Si un objet Program3D valide n’est pas défini.
| |
Error — Pas de tampon valide défini : si un objet IndexBuffer3D n’est pas défini.
| |
Error — Echec du test de validité des paramètres : lorsque le nombre de triangles à tracer ou la propriété firstIndex dépasse les valeurs autorisées.
| |
RangeError — Pas assez d’index dans ce tampon : lorsque la mémoire tampon ne contient pas suffisamment d’index pour définir le nombre de triangles à tracer.
| |
Error — Echantillon lié à une texture également lié au rendu : lorsque la cible du rendu est une texture et lorsque cette texture est attribuée à une entrée de texture du programme de fragments en cours.
| |
Error — Echantillon lié à une texture non valide : une texture non valide est spécifiée comme entrée dans le programme de fragments en cours.
| |
Error — Le format de l’échantillonneur ne correspond pas au format de la texture : lorsque le format de la texture attribuée en tant qu’entrée dans le programme de fragments en cours est différent de celui spécifié pour le registre de l’échantillonneur. Par exemple, une texture 2D est attribuée à un échantillonneur de texture de cube.
| |
Error — Echantillon lié à une texture non définie : le programme de fragments en cours accède à un registre de texture qui n’a pas été configuré (à l’aide setTextureAt() ).
| |
Error — Même texture nécessite même paramètres d’échantillonneur : si une texture est utilisée pour plusieurs registres d’échantillonneur, tous les échantillonneurs doivent avoir les mêmes paramètres. Par exemple, vous ne pouvez pas configurer un échantillonneur pour verrouiller et un autre pour envelopper.
| |
Error — Texture liée mais non utilisée : une texture est définie comme entrée de shader, mais elle n’est pas utilisée.
| |
Error — Flux non utilisé : un tampon de sommets est attribué à une entrée d’attribut de sommet, mais le programme de sommets ne fait pas référence au registre correspondant.
| |
Error — Flux non valide : un objet VertexBuffer3D attribué à une entrée de programme de sommets n’est pas un objet valide.
| |
RangeError — Flux ne disposant pas de suffisamment de sommets : un tampon de sommets qui fournit des données pour tracer les triangles spécifiés ne dispose pas de suffisamment de données.
| |
RangeError — Décalage du sommet du flux hors limites : le décalage spécifié dans un appel de setVertexBufferAt() est négatif ou se trouve au-delà de la fin de la mémoire tampon.
| |
Error — Flux lu mais non défini : un attribut de sommet utilisé par le programme de sommets en cours n’est pas défini (à l’aide setVertexBufferAt() ).
|
Eléments de l’API associés
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Exemple ( Comment utiliser cet exemple )
Les triangles sont définis à l’aide du tampon de sommets et du tampon d’index. Le tampon de sommets contient des informations sur la position et la couleur de chaque sommet du triangle. Le tampon d’index contient les index dans le tampon de sommets. Trois index définissent un triangle. Par exemple, un triangle qui était constitué des trois premiers points dans le tampon de sommets est répertorié comme 0,1,2 dans le tampon d’index.
Dans cet exemple simple, aucune transformation 3D n’est effectuée. Seuls les objets à l'intérieur de la zone d'affichage canonique (unité de volume 2x2x1) peuvent être affichés et les coordonnées des triangles sont définies de manière à être à l'intérieur de cette zone. Toutefois, lors du rendu d’une séquence 3D type, vous projetez les objets à rendre à partir du système de coordonnées « monde » dans cette zone d’affichage au moyen d’une perspective ou d’une projection orthographique.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; public class Context3D_drawTriangles extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_drawTriangles() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Clear required before first drawTriangles() call renderContext.clear( .3,.3,.3 ); //Draw the 2 triangles renderContext.drawTriangles( indexList, 0, 2 ); //Show the frame renderContext.present(); } } }
drawTrianglesInstanced | () | méthode |
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 20.0 |
Effectuez le rendu des triangles d’instances spécifiés à l’aide des tampons et de l’état actuels de cet objet Context3D.
Pour chaque triangle de chaque instance, les sommets de triangle sont traités par le programme de shaders de sommets et la surface de triangle est traitée par le programme de shaders de pixels. La couleur de sortie du programme de pixels pour chaque pixel est représentée à la cible du rendu selon les opérations de modèle, le test de profondeur, la propriété alpha source et de destination, et le mode de fusion en cours. La destination du rendu peut être le tampon de rendu principal ou une texture.
Si la fonction d’élimination est activée (avec la méthode setCulling()
), les triangles peuvent être supprimés de la séquence avant l’exécution du programme de pixels. Si le test de modèle et le test de profondeur sont activés, il est possible d’ignorer la sortie des pixels à partir du programme de pixels sans mettre à jour la destination du moteur de rendu. En outre, le programme de pixels peut décider de ne pas afficher de couleur pour un pixel.
Les triangles d’instances rendus ne sont affichés dans la fenêtre qu’une fois que vous appelez la méthode present()
. Après chaque appel à present()
, la méthode clear()
doit être appelée avant l’échec du premier appel ou rendu drawTrianglesInstanced()
.
Lorsque enableErrorChecking
est false
, cette fonction est immédiatement renvoyée, n’attend pas les résultats et renvoie des exceptions uniquement si la valeur de cette occurrence de Context3D a été éliminée ou dans le cas d’appels de dessin trop nombreux. Si l’état du contexte de rendu n’est pas valide, le rendu échoue silencieusement. Lorsque la propriété enableErrorChecking
est définie sur true
, cette fonction est renvoyée une fois les triangles tracés, puis renvoie des exceptions pour toute erreur de dessin ou d’état de contexte non valide.
Cette méthode peut renvoyer une exception si la mémoire tampon n’est pas correctement séquencée avec SetVertexAt()
. Avec Direct3D 9, par exemple, les données de géométrie indexées et le nombre d’occurrences à dessiner doivent toujours être définis dans le flux initial avec l’API SetStreamSourceFreq()
.
Cela signifie que le tampon de sommets créé avec CreateVertexBufferForInstance()
ne doit pas être défini avec le numéro d’index minimal lorsqu’il est organisé avec SetVertexBufferAt()
en tant qu’entrée dans le programme de shaders de sommets. Le tampon de sommets généré avec CreateVertexBuffer ()
doit être défini avec un plus petit numéro d’index que celui défini pour CreateVertexBufferForInstance()
. En règle générale, les données de géométrie doivent être définies avant les données par instance, avec SetVertexBufferAt()
.
Paramètres
indexBuffer:IndexBuffer3D — Ensemble d’index de sommets qui référence les sommets à rendre.
| |
numInstances:int — nombre d’occurrences à rendre.
| |
firstIndex:int (default = 0 ) — Index du premier index de sommets sélectionné pour le rendu. La valeur par défaut est 0.
| |
numTriangles:int (default = -1 ) — Nombre de triangles à rendre. Chaque triangle consomme trois index. Transmettez -1 pour tracer tous les triangles dans le tampon de l’index. La valeur par défaut est -1.
|
Valeur émise
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
| |
Error — Si cette méthode est appelée trop souvent entre les appels sur present() . Le nombre maximum d’appels est 32 768.
| |
Error — Requiert un profil étendu standard ou supérieur : si cette méthode est appelée lorsque le profil demandé est inférieur au profil d’extension standard.
| |
Error — Si cette méthode est appelée avec des instances numInstances négatives.
Les erreurs suivantes sont uniquement renvoyées lorsque la propriété | |
Error — Effacement nécessaire avant le dessin : si la mémoire tampon n’a pas été effacée depuis le dernier appel de present() .
| |
Error — Si un objet Program3D valide n’est pas défini.
| |
Error — Pas de tampon valide défini : si un objet IndexBuffer3D n’est pas défini.
| |
Error — Echec du test de validité des paramètres : lorsque le nombre de triangles à tracer ou la propriété firstIndex dépasse les valeurs autorisées.
| |
RangeError — Pas assez d’index dans ce tampon : lorsque la mémoire tampon ne contient pas suffisamment d’index pour définir le nombre de triangles à tracer.
| |
Error — Echantillon lié à une texture également lié au rendu : lorsque la cible du rendu est une texture et lorsque cette texture est attribuée à une entrée de texture du programme de fragments en cours.
| |
Error — Echantillon lié à une texture non valide : une texture non valide est spécifiée comme entrée dans le programme de fragments en cours.
| |
Error — Le format de l’échantillonneur ne correspond pas au format de la texture : lorsque le format de la texture attribuée en tant qu’entrée dans le programme de fragments en cours est différent de celui spécifié pour le registre de l’échantillonneur. Par exemple, une texture 2D est attribuée à un échantillonneur de texture de cube.
| |
Error — Echantillon lié à une texture non définie : le programme de fragments en cours accède à un registre de texture qui n’a pas été configuré (à l’aide setTextureAt() ).
| |
Error — Même texture nécessite même paramètres d’échantillonneur : si une texture est utilisée pour plusieurs registres d’échantillonneur, tous les échantillonneurs doivent avoir les mêmes paramètres. Par exemple, vous ne pouvez pas configurer un échantillonneur pour verrouiller et un autre pour envelopper.
| |
Error — Texture liée mais non utilisée : une texture est définie comme entrée de shader, mais elle n’est pas utilisée.
| |
Error — Flux non utilisé : un tampon de sommets est attribué à une entrée d’attribut de sommet, mais le programme de sommets ne fait pas référence au registre correspondant.
| |
Error — Flux non valide : un objet VertexBuffer3D attribué à une entrée de programme de sommets n’est pas un objet valide.
| |
RangeError — Flux ne disposant pas de suffisamment de sommets : un tampon de sommets qui fournit des données pour tracer les triangles spécifiés ne dispose pas de suffisamment de données.
| |
RangeError — Décalage du sommet du flux hors limites : le décalage spécifié dans un appel de setVertexBufferAt() est négatif ou se trouve au-delà de la fin de la mémoire tampon.
| |
Error — Flux lu mais non défini : un attribut de sommet utilisé par le programme de sommets en cours n’est pas défini (à l’aide setVertexBufferAt() ).
| |
Error — Le flux de tampon de sommets ne contient pas assez d’éléments pour les instances : Si un flux de tampon de sommets ne contient pas assez d’éléments pour le nombre d’instances.
| |
Error — Le flux de tampon de sommets pour les instances n’est pas correctement défini avec le registre d’attributs minimal d’index : si le tampon de sommets généré avec CreateVertexBuffer() se voit affecter un plus grand numéro d’index que pour le tampon de sommets généré avec CreateVertexBufferForInstance() .
|
Eléments de l’API associés
VertexBuffer3D.upload()
IndexBuffer3D.upload()
flash.display3D.textures.Texture
Program3D
Exemple ( Comment utiliser cet exemple )
package { import com.adobe.utils.v3.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.geom.Matrix3D; import flash.utils.ByteArray; public class Context3D_HelloInstancedDrawing extends Sprite { private var W:int; private var H:int; private var renderContext:Context3D; private var program:Program3D; private var vertexBuffer:VertexBuffer3D; private var instanceBufferColor:VertexBuffer3D; private var instanceBufferTranslation:VertexBuffer3D; private var indexBuffer:IndexBuffer3D; private var m:Matrix3D; private var vertexShader:ByteArray; private var fragmentShader:ByteArray; public function Context3D_HelloInstancedDrawing() { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); W = stage.stageWidth; H = stage.stageHeight; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated); //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile. stage.stage3Ds[0].requestContext3D("auto","standardExtended"); } //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process. private function contextCreated( event:Event ):void { var t:Stage3D = event.target as Stage3D; renderContext = t.context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; renderContext.configureBackBuffer( W, H, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //create vertex buffer for geometry information of the instances (same geometry of the instances) vertexBuffer = renderContext.createVertexBuffer(3, 3); //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information. //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1); instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1); //create index buffer for the triangle indexBuffer = renderContext.createIndexBuffer(3); //create and compile program program = renderContext.createProgram(); var assembler:AGALMiniAssembler = new AGALMiniAssembler(); // VERTEX SHADER var code:String = ""; //The vertex shader code runs for every vertex of each instance. //The vertex buffers uploaded for instance data (va1,va2) are used when the vertex shader for that particular instance is being executed. code += "add vt0, va0, va2\n"; code += "mov op, vt0\n"; code += "mov v0, va1\n"; vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code); //FRAGMENT SHADER code = "mov oc, v0\n"; // Compile the agal code into bytecode using agalminiassembler fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code); //upload program to gpu program.upload(vertexShader, fragmentShader); //geometry data for the instances var vertexData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0, // - 1st vertex x,y,z 0, 0.3, 1, // - 2nd vertex x,y,z 0.3, -0.3, 0 // - 3rd vertex x,y,z ]); //per instance color data var instanceColorData:Vector.<Number>=Vector.<Number>([ 1.0, 0.0, 0.0, // - 1st instance r,g,b 0.0, 1.0, 0.0, // - 2nd instance r,g,b 1.0, 1.0, 1.0, // - 3rd instance r,g,b 0.7, 0.0, 1.0 // - 4th instance r,g,b ]); //per instance translation data var instanceTranslationData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0.0, // - 1st instance x,y,z 0.3, 0.3, 0.0, // - 2nd instance x,y,z -0.3, 0.3, 0.0, // - 3rd instance x,y,z 0.3, -0.3, 0.0 // - 4th instance x,y,z ]); vertexBuffer.uploadFromVector(vertexData, 0, 3); instanceBufferColor.uploadFromVector(instanceColorData, 0, 4); indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3); instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4); //pass data to program renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3); //set active program renderContext.setProgram(program); renderContext.enableErrorChecking = true; addEventListener(Event.ENTER_FRAME, render); } private function render( event:Event ):void { renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>. renderContext.drawTrianglesInstanced(indexBuffer,4); renderContext.present(); // render the backbuffer on screen. } } }
package { import com.adobe.utils.v3.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.geom.Matrix3D; import flash.utils.ByteArray; public class Context3D_HelloInstanceIdRegister extends Sprite { private var W:int; private var H:int; private var renderContext:Context3D; private var program:Program3D; private var vertexBuffer:VertexBuffer3D; private var instanceBufferColor:VertexBuffer3D; private var instanceBufferTranslation:VertexBuffer3D; private var indexBuffer:IndexBuffer3D; private var m:Matrix3D; private var vertexShader:ByteArray; private var fragmentShader:ByteArray; public function Context3D_HelloInstanceIdRegister() { if (hasEventListener(Event.ADDED_TO_STAGE)) removeEventListener(Event.ADDED_TO_STAGE, init); W = stage.stageWidth; H = stage.stageHeight; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated); //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile. stage.stage3Ds[0].requestContext3D("auto","standardExtended"); } //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process. private function contextCreated( event:Event ):void { var t:Stage3D = event.target as Stage3D; renderContext = t.context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; renderContext.configureBackBuffer( W, H, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //create vertex buffer for geometry information of the instances (same geometry of the instances) vertexBuffer = renderContext.createVertexBuffer(3, 3); //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information. //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1); instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1); //create index buffer for the triangle indexBuffer = renderContext.createIndexBuffer(3); //create and compile program program = renderContext.createProgram(); //Note : for instance id support , use the latest AgalMiniAssembler from github - https://github.com/adobe-flash/graphicscorelib/blob/master/src/com/adobe/utils/v3/AGALMiniAssembler.as var assembler:AGALMiniAssembler = new AGALMiniAssembler(); // VERTEX SHADER var code:String = ""; //the vertex shader code will run for every vertex of every instance , //the vertex buffers uploaded for instance data (va1,va2) will be used when vertex shader for that particular instance is being executed //the vertex shader code below indexes the program constants matrix using iid.x. iid is a new register introduced in vertex shader for instanced drawing //it is a read only register , iid.x gives the current instance id whose shader is being executed code += "add vt0, va0, va2\n"; code += "mul vt1, vt0, vc[iid.x]\n" code += "mov op, vt1\n"; code += "mov v0, va1\n"; vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code, 3); //FRAGMENT SHADER code = "mov oc, v0\n"; // Compile the agal code into bytecode using agalminiassembler fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code, 3); //upload program to gpu program.upload(vertexShader, fragmentShader); //geometry data for the instances var vertexData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0, // - 1st vertex x,y,z 0, 0.3, 1, // - 2nd vertex x,y,z 0.3, -0.3, 0 // - 3rd vertex x,y,z ]); //per instance color data var instanceColorData:Vector.<Number>=Vector.<Number>([ 1.0, 0.0, 0.0, // - 1st instance r,g,b 0.0, 1.0, 0.0, // - 2nd instance r,g,b 1.0, 1.0, 1.0, // - 3rd instance r,g,b 0.7, 0.0, 1.0 // - 4th instance r,g,b ]); //per instance translation data var instanceTranslationData:Vector.<Number>=Vector.<Number>([ -0.3, -0.3, 0.0, // - 1st instance x,y,z 0.3, 0.3, 0.0, // - 2nd instance x,y,z -0.3, 0.3, 0.0, // - 3rd instance x,y,z 0.3, -0.3, 0.0 // - 4th instance x,y,z ]); vertexBuffer.uploadFromVector(vertexData, 0, 3); instanceBufferColor.uploadFromVector(instanceColorData, 0, 4); indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3); instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4); //pass data to program renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3); renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3); //set active program renderContext.setProgram(program); renderContext.enableErrorChecking = true; addEventListener(Event.ENTER_FRAME, render); } private function render( event:Event ):void { renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color var instanceScalingData:Vector.<Number>=Vector.<Number>([ 1.0, 1.0, 1.0, 1.0, // - 1st instance x,y,z,w 1.4, 1.4, 1.4, 1.0, // - 2nd instance x,y,z,w 0.6, 0.6, 0.6, 1.0, // - 3rd instance x,y,z,w 0.6, 0.6, 0.6, 1.0 ]); var m:Matrix3D = new Matrix3D(); m.copyRawDataFrom(instanceScalingData); renderContext.setProgramConstantsFromMatrix("vertex",0,m,false); //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>. renderContext.drawTrianglesInstanced(indexBuffer,4); renderContext.present(); // render the backbuffer on screen. } } }
present | () | méthode |
public function present():void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Affiche la mémoire tampon de rendu d’arrière-plan.
L’appel de la méthode present()
rend visibles les résultats de toutes les opérations de rendu depuis le dernier appel de present()
et lance un nouveau cycle de rendu. Après l’appel de present
, vous devez appeler clear()
avant de procéder à un autre appel de drawTriangles()
. Dans le cas contraire, cette fonction efface la mémoire tampon de rendu en jaune et vert ; si enableErrorChecking
a été définie sur true
, une exception est renvoyée.
L’appel de la méthode present()
réinitialise également la cible du rendu, à l’instar de l’appel de la méthode setRenderToBackBuffer()
.
Valeur émise
Error — Effacement requis avant le dessin : si la méthode clear() n’a pas été appelée depuis le dernier appel à present() . (Deux appels consécutifs de la méthode present() ne sont pas autorisés sans appeler clear() entre les deux.)
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
|
setBlendFactors | () | méthode |
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Spécifie les facteurs utilisés pour fusionner la couleur de sortie d’une opération de dessin avec la couleur existante.
La couleur de sortie (source) du programme de shaders du pixel est combinée avec la couleur existante (de destination) de ce pixel, conformément à la formule suivante :
couleur finale = (couleur source * sourceFactor) + (couleur de destination * destinationFactor)
La couleur de destination est la couleur actuelle dans la mémoire tampon de rendu de ce pixel. Il s’agit donc du résultat du dernier appel de clear()
et de tout appel de drawTriangles()
.
Utilisez setBlendFactors()
pour définir les facteurs utilisés pour multiplier la couleur source et de destination avant qu’elles ne soient additionnées. Les facteurs de fusion par défaut sont les suivants : sourceFactor = Context3DBlendFactor.ONE
et destinationFactor = Context3DBlendFactor.ZERO
; par conséquent, la couleur source remplace la couleur de destination (en d’autres termes, aucune fusion des deux couleurs ne se produit). Pour une fusion alpha normale, utilisez sourceFactor = Context3DBlendFactor.SOURCE_ALPHA
et destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA
.
Utilisez les constantes définies dans la classe Context3DBlendFactor pour définir les paramètres de cette fonction.
Paramètres
sourceFactor:String — Facteur avec lequel multiplier la couleur source. La valeur par défaut est Context3DBlendFactor.ONE .
| |
destinationFactor:String — Facteur avec multiplier la couleur de destination. La valeur par défaut est Context3DBlendFactor.ZERO .
|
Valeur émise
Error — Enum non valide : lorsque sourceFactor ou destinationFactor n’est pas l’une des valeurs reconnues, qui sont définies dans la classe Context3DBlendFactor.
|
Eléments de l’API associés
Exemple ( Comment utiliser cet exemple )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; public class Context3D_setBlendMode extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; private var sourceFactor:int = 6; private var destinationFactor:int = 4; private var blendFactors:Array = [Context3DBlendFactor.DESTINATION_ALPHA, Context3DBlendFactor.DESTINATION_COLOR, Context3DBlendFactor.ONE, Context3DBlendFactor.ONE_MINUS_DESTINATION_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_COLOR, Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.SOURCE_COLOR, Context3DBlendFactor.ZERO]; public function Context3D_setBlendMode() { this.stage.addEventListener( KeyboardEvent.KEY_DOWN, keyHandler ); stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3 , 2, 0, 1, 3, 6, 4, 5, 5, 7, 6, 10, 8, 9, 9, 11, 10, 12, 15, 14, 12, 13, 15, 16, 17, 19, 16, 19, 18 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 7; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b, a format -1, 1, 0, 1, 1, 1, .5, 0, 1, 0, 1, 1, 1, .5, -1, 0, 0, 1, 1, 1, .5, 0, 0, 0, 1, 1, 1, .5, 0, 1, 0, .8,.8,.8, .6, 1, 1, 0, .8,.8,.8, .6, 0, 0, 0, .8,.8,.8, .6, 1, 0, 0, .8,.8,.8, .6, -1, 0, 0, 1, 0, 0, .5, 0, 0, 0, 0, 1, 0, .5, -1,-1, 0, 0, 0, 1, .5, 0,-1, 0, 1, 0, 1, .5, 0, 0, 0, 0, 0, 0, .5, 1, 0, 0, 0, 0, 0, .5, 0,-1, 0, 0, 0, 0, .5, 1,-1, 0, 0, 0, 0, .5, -.8,.8, 0, .6,.4,.2,.4, .8,.8, 0, .6,.4,.2,.4, -.8,-.8, 0, .6,.4,.2,.4, .8,-.8, 0, .6,.4,.2,.4 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_4 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); } private function render():void { //Clear required before first drawTriangles() call renderContext.clear( 1, 1, 1, 1 ); //Draw the back triangles renderContext.setBlendFactors( Context3DBlendFactor.ONE, Context3DBlendFactor.ZERO ); //No blending renderContext.drawTriangles( indexList, 0, 8 ); //Set blend renderContext.setBlendFactors( blendFactors[sourceFactor], blendFactors[destinationFactor] ); //Draw the front triangles renderContext.drawTriangles( indexList, 24, 2 ); //Show the frame renderContext.present(); } private function contextError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } private function keyHandler( event:KeyboardEvent ):void { switch ( event.keyCode ) { case Keyboard.NUMBER_1: if( --sourceFactor < 0 ) sourceFactor = blendFactors.length - 1; break; case Keyboard.NUMBER_2: if( ++sourceFactor > blendFactors.length - 1) sourceFactor = 0; break; case Keyboard.NUMBER_3: if( --destinationFactor < 0 ) destinationFactor = blendFactors.length - 1; break; case Keyboard.NUMBER_4: if( ++destinationFactor > blendFactors.length - 1) destinationFactor = 0; break; } trace( "Source blend factor: " + blendFactors[sourceFactor] + ", destination blend factor: " + blendFactors[destinationFactor] ); render(); } } }
setColorMask | () | méthode |
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit le masque utilisé lors de l’écriture des couleurs dans le tampon de rendu.
Seuls les composants de couleur pour lesquels le paramètre du masque de couleur correspondant est true
sont mis à jour lors de l’écriture d’une couleur dans le tampon de rendu. Par exemple, si vous appelez : setColorMask( true, false, false, false )
, seul le composant rouge d’une couleur est écrit dans le tampon jusqu’à ce que vous modifiiez à nouveau la couleur du masque. La couleur du masque n’a pas d’incidence sur le comportement de la méthode clear()
.
Paramètres
red:Boolean — définissez false pour verrouiller les modifications apportées au canal rouge.
| |
green:Boolean — définissez false pour verrouiller les modifications apportées au canal vert.
| |
blue:Boolean — définissez false pour verrouiller les modifications apportées au canal bleu.
| |
alpha:Boolean — définissez false pour verrouiller les modifications apportées au canal alpha.
|
Exemple ( Comment utiliser cet exemple )
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; public class Context3D_setColorMask extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_setColorMask() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,-1, 0, 1, 1, 1, -1,-1, 0, 1, 1, 1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); renderContext.clear( .3,.3,.3,1 ); renderContext.drawTriangles( indexList, 0, 1 ); //Top triangle draws all colors, so is white renderContext.setColorMask( true, false, false, false ); //Mask all but red channel renderContext.drawTriangles( indexList, 3, 1 ); //Bottom triangle only updates red //Show the frame renderContext.present(); } } }
setCulling | () | méthode |
public function setCulling(triangleFaceToCull:String):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit le mode d’élimination du triangle.
Il est possible d’exclure les triangles de la scène au début du processus de rendu en fonction de leur orientation par rapport au plan de vue. Spécifiez l’ordre des sommets de façon cohérente (dans le sens des aiguilles d’une montre ou dans le sens inverse des aiguilles d’une montre), depuis l’extérieur du modèle, afin de procéder correctement à l’élimination.
Paramètres
triangleFaceToCull:String — Mode d’élimination. Utilisez l’une des constantes définies dans la classe Context3DTriangleFace.
|
Valeur émise
Error — Erreur d'énumération non valide : lorsque triangleFaceToCull n'est pas l'une des valeurs définies dans la classe Context3DTriangleFace.
|
Eléments de l’API associés
setDepthTest | () | méthode |
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit le type de comparaison utilisé pour le test de profondeur.
La profondeur de la sortie du pixel source du programme de shaders de pixels est comparée à la valeur actuelle dans le tampon de profondeur. Si la comparaison renvoie false
, le pixel source est supprimé. Si elle renvoie true
, le pixel source est traité à l’étape suivante du processus de rendu, c’est-à-dire le test du modèle. En outre, le tampon de profondeur est mis à jour avec la profondeur du pixel source, à condition que le paramètre depthMask
soit défini sur true
.
Définit le test utilisé pour comparer les valeurs de profondeur des pixels source et de destination. Le pixel source est combiné avec le pixel de destination lorsque la comparaison est définie sur true. L’opérateur de comparaison est appliqué comme opérateur infixe entre les valeurs des pixels source et de destination, dans cet ordre.
Paramètres
depthMask:Boolean — La valeur de profondeur de destination sera mise à jour à partir du pixel source lorsque la valeur est true.
| |
passCompareMode:String — Profondeur du test de comparaison. L’une des valeurs de Context3DCompareMode.
|
Eléments de l’API associés
setFillMode | () | méthode |
public function setFillMode(fillMode:String):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 16 |
Réglez le mode de remplissage utilisé pour le rendu. L’interface est uniquement disponible dans AIR (bureau).
Paramètres
fillMode:String — si la valeur est STRUCTURE FILAIRE, l’objet s’affiche dans un réseau de lignes. si la valeur est UNI, l’objet s’affiche dans des polygones ombrés unis.
|
Eléments de l’API associés
setProgram | () | méthode |
public function setProgram(program:Program3D):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit le programme de sommets et le programme de fragments à utiliser pour le prochain rendu.
Paramètres
program:Program3D — objet Program3D représentant le programme de sommets et le programme de fragments à utiliser.
|
Eléments de l’API associés
Exemple ( Comment utiliser cet exemple )
renderContext
est une occurrence de la classe Context3D. Les programmes de l'exemple sont écrits en langage Adobe Graphics Assembly (AGAL).
//A simple vertex program in AGAL const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + "mov v0, va1"; //A simple fragment (or pixel) program in AGAL const FRAGMENT_SHADER:String = "mov oc, v0"; var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); var programPair:Program3D; //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair );
setProgramConstantsFromByteArray | () | méthode |
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11.1, AIR 3.1 |
Définissez les constantes à utiliser par programme de shaders en utilisant les valeurs stockées dans un objet ByteArray
.
Définit constantes accessibles à partir du programme de sommets ou de fragments.
Paramètres
programType:String — L’un des objets Context3DProgramType.
| |
firstRegister:int — Index de la première constante de programme de shaders à définir.
| |
numRegisters:int — nombre de registres à définir. Tous les registres sont lus en tant que quatre valeurs à virgule flottante.
| |
data:ByteArray — source de l'objet ByteArray
| |
byteArrayOffset:uint — décalage dans l'objet ByteArray pour la lecture.
|
Valeur émise
TypeError — kNullPointerError lorsque data est null.
| |
RangeError — kConstantRegisterOutOfBounds lors d’une tentative de définition d’un nombre de constantes de shader supérieur au nombre maximal autorisé.
| |
RangeError — kBadInputSize si byteArrayOffset est supérieur ou égal à la longueur de data ou non. des éléments dans data - byteArrayOffset est inférieur à numRegisters *16
|
Eléments de l’API associés
setProgramConstantsFromMatrix | () | méthode |
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit les constantes à utiliser par les programmes de shaders à l’aide des valeurs stockées dans un objet Matrix3D
.
Utilisez cette fonction pour transmettre une matrice à un programme de shaders. Cette fonction définit 4 registres de constantes utilisés par le programme de sommets ou le programme de fragments. La matrice est attribuée aux registres ligne par ligne. Le premier registre de constantes est attribué à la ligne supérieure de la matrice. Vous pouvez définir 128 registres pour un programme de sommets et 28 pour un programme de fragments.
Paramètres
programType:String — Type de programme de shaders, Context3DProgramType.SOMMET ou Context3DProgramType.FRAGMENT .
| |
firstRegister:int — index du premier registre de constantes à définir. Etant donné qu’un objet Matrix3D a 16 valeurs, quatre registres sont définis.
| |
matrix:Matrix3D — matrice contenant les valeurs de constante.
| |
transposedMatrix:Boolean (default = false ) — si true , les entrées de la matrice sont copiées dans les registres dans l’ordre transposé. La valeur par défaut est false .
|
Valeur émise
TypeError — Erreur de pointeur nulle : lorsque matrix est null.
| |
RangeError — Registre de constantes hors limites : lorsque vous tentez de définir un nombre de registres de constantes de shaders supérieur au nombre autorisé.
|
Informations complémentaires
Eléments de l’API associés
setProgramConstantsFromVector | () | méthode |
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit les entrées de constante pour les programmes de shaders.
Définit un tableau de constantes auquel doit accéder un programme de shaders de sommets ou de fragments. Les constantes définies dans Program3D sont accessibles à l’intérieur des programmes de shaders en tant que registres de constantes. Chaque registre de constantes est composé de 4 valeurs à virgule flottante (x, y, z, w). Par conséquent, chaque registre nécessite 4 entrées dans le vecteur data. Le nombre de registres que vous pouvez définir pour le programme de sommets et le programme de fragments dépend du Context3DProfile
.
Paramètres
programType:String — Type de programme de shaders, Context3DProgramType.SOMMET ou Context3DProgramType.FRAGMENT .
| |
firstRegister:int — index du premier registre de constantes à définir.
| |
data:Vector.<Number> — Les valeur de la constante à virgule flottante. Il doit y avoir au moins numRegisters 4 éléments dans data .
| |
numRegisters:int (default = -1 ) — Nombre de constantes à définir. Spécifiez -1 (valeur par défaut) pour définir suffisamment de registres pour utiliser toutes les données disponibles.
|
Valeur émise
TypeError — Erreur de pointeur nulle : lorsque data est null .
| |
RangeError — Registre de constantes hors limites : lorsque vous tentez de définir un nombre de registres de constantes de shaders supérieur au nombre autorisé.
| |
RangeError — Taille d’entrée incorrecte : Lorsque le nombre d’éléments dans les données est moins que les numRegisters * 4
|
Informations complémentaires
Eléments de l’API associés
setRenderToBackBuffer | () | méthode |
public function setRenderToBackBuffer():void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit la mémoire tampon de rendu d’arrière-plan en tant que cible du rendu. Les appels suivants à drawTriangles()
et clear()
entraînent des mises à jour de la mémoire tampon d’arrière-plan. Utilisez cette méthode pour reprendre le rendu normal après l’utilisation de la méthode setRenderToTexture()
.
setRenderToTexture | () | méthode |
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit la texture spécifiée en tant que cible du rendu.
Les appels suivants des méthodes drawTriangles()
et clear()
mettent à jour la texture spécifiée et non la mémoire tampon d’arrière-plan. Les mipmaps sont créés automatiquement. Utilisez la méthode setRenderToBackBuffer()
reprendre le rendu normal sur la mémoire tampon d’arrière-plan.
Il n’est pas nécessaire d’effacer avant de dessiner. Si aucune opération d’effacement n’est effectuée, le contenu du rendu est conservé. Le tampon de profondeur et le tampon de modèle ne sont pas supprimés non plus. Par contre, l’effacement est forcé lors du premier dessin. L’appel de la méthode present()
réinitialise la cible sur la mémoire tampon d’arrière-plan.
Paramètres
texture:flash.display3D.textures:TextureBase — texture cible sur laquelle effectuer le rendu. Définissez-la sur null pour reprendre le rendu dans la mémoire tampon d’arrière-plan (setRenderToBackBuffer() et present définissent également la cible sur le tampon d’arrière-plan).
| |
enableDepthAndStencil:Boolean (default = false ) — si la valeur est true , les tests de profondeur et de modèle sont disponibles. si la valeur est false , les états de la profondeur et du modèle sont ignorés pour les opérations de dessin suivantes.
| |
antiAlias:int (default = 0 ) — qualité de l’anticrènelage. Utilisez 0 pour désactiver l’anticrènelage ; des valeurs plus élevées améliorent la qualité de l’anticrènelage, mais nécessitent davantage de calculs. La valeur est actuellement ignorée par la plate-forme mobile et le contexte de rendu logiciel.
| |
surfaceSelector:int (default = 0 ) — spécifie l’élément de la texture à mettre à jour. Les objets Texture disposent d’une surface. Par conséquent, vous devez spécifier 0 (valeur par défaut). Les objets CubeTexture disposent de six surfaces. Vous pouvez par conséquent indiquer un entier compris entre 0 et 5.
| |
colorOutputIndex:int (default = 0 ) — Registre de la couleur de sortie. Doit être 0 pour le mode limité ou ligne de base. Dans le cas contraire, détermine le registre de la couleur de sortie.
|
Valeur émise
ArgumentError — pour un paramètre surfaceSelector non concordant. La valeur doit être 0 pour des textures 2D et 0...5 pour les cubes.
| |
ArgumentError — texture n’est pas dérivée de la classe TextureBase (classe Texture ou CubeTexture).
| |
ArgumentError — colorOutputIndex doit être un chiffre entier compris entre 0 et 3.
| |
ArgumentError — cet appel nécessite un Context3D créé avec le profil standard ou supérieur.
|
Eléments de l’API associés
setSamplerStateAt | () | méthode |
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11.6, AIR 3.6 |
Remplace manuellement l’état d’échantillonneur de texture.
L’état de l’échantillonnage de texture est généralement défini lors de l’appel de setProgram
. Vous pouvez cependant remplacer l’état de l’échantillonneur de texture à l’aide de cette fonction. Si vous ne voulez pas que le programme modifie l’état de l’échantillonneur, définissez le bit ignoresampler
en AGAL et utilisez cette fonction.
Paramètres
sampler:int — échantillonneur Registre de l’échantillonneur à utiliser. Correspond au registre de l’échantillonneur dans AGAL.
| |
wrap:String — Mode d’enveloppe. Défini dans Context3DWrapMode . La valeur par défaut est repeat.
| |
filter:String — Mode de filtrage de textures. Défini dans Context3DTextureFilter . La valeur par défaut est nearest.
| |
mipfilter:String — Filtre mip-map. Défini dans Context3DMipFilter . La valeur par défaut est none.
|
Valeur émise
Error — échantillonneur hors plage
| |
Error — habillage, filtre, filtre mip bad enum
| |
Error — Objet éliminé : si cet objet Context3D a été éliminé par un appel à dispose() ou suite à la perte du matériel de rendu sous-jacent.
|
Eléments de l’API associés
setScissorRectangle | () | méthode |
public function setScissorRectangle(rectangle:Rectangle):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit un rectangle symétrique, qui est un type de masque de dessin. Le moteur de rendu dessine uniquement dans la zone située à l’intérieur du rectangle symétrique. Le découpage n’a pas d’incidence sur les opérations d’effacement.
Transmettez la valeur null
pour désactiver le découpage.
Paramètres
rectangle:Rectangle — Rectangle dans lequel tracer. Spécifiez la position et les dimensions du rectangle, en pixels. L’origine du système de coordonnées est le coin supérieur gauche de la fenêtre d’affichage, dont les valeurs positives augmentent vers le bas et vers la droite (de même que le système de coordonnées d’affichage Flash standard).
|
Exemple ( Comment utiliser cet exemple )
Les triangles sont définis à l’aide du tampon de sommets et du tampon d’index. Le tampon de sommets contient des informations sur la position et la couleur de chaque sommet du triangle. Le tampon d’index contient les index dans le tampon de sommets. Trois index définissent un triangle. Par exemple, un triangle qui était constitué des trois premiers points dans le tampon de sommets est répertorié comme 0,1,2 dans le tampon d’index.
Dans cet exemple simple, aucune transformation 3D n’est effectuée. Seuls les objets au sein de la zone d’affichage canonique (un cube de volume 2 x 2 x 2 centré sur l’origine) s’affichent. Toutefois, lors du rendu d’une séquence 3D type, vous projetez les objets à rendre dans cette zone d’affichage au moyen d’une perspective ou d’une projection orthographique.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.ui.Keyboard; import flash.utils.Timer; public class Context3D_ScissorRectangle extends Sprite { public const viewWidth:Number = 640; public const viewHeight:Number = 480; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; private var scissorOn:Boolean = false; private var toggler:Timer = new Timer( 750 ); public function Context3D_ScissorRectangle() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); //Set up timer to turn scissoring on and off toggler.addEventListener( TimerEvent.TIMER, toggleScissor ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3 , 2, 0, 1, 3 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b, a format -1, 1, 0, 1,0,0, 1, 1, 0, 0,0,1, -1,-1, 0, 0,1,0, 1,-1, 0, 1,0,1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); toggler.start(); } private function render():void { //Clear required before first drawTriangles() call renderContext.clear(); //Sciss a region excluding the outer 100 pixels of the viewport var scissor:Rectangle = new Rectangle( 100, 100, viewWidth - 200, viewHeight - 200 ); if( scissorOn ) renderContext.setScissorRectangle( scissor ); //on else renderContext.setScissorRectangle( null ); //off //Draw the triangles renderContext.drawTriangles( indexList, 0, 2 ); //Show the frame renderContext.present(); } private function toggleScissor( event:Event ):void { scissorOn = !scissorOn; render(); } } }
setStencilActions | () | méthode |
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit le mode et l’opération de création de modèle.
Il est possible d’associer la valeur de référence d’un modèle 8 bits à chaque appel de dessin. Au cours du rendu, il est possible de tester la valeur de référence par rapport aux valeurs stockées précédemment dans le tampon d’image. Le résultat du test peut contrôler l’action de dessin, et indiquer si la valeur du modèle enregistrée est mise à jour et de quelle manière. En outre, le test de profondeur indique si le test du modèle est effectué. Il est également possible d’utiliser un test de profondeur ayant échoué pour contrôler l’action prise sur le tampon du modèle.
Au cours du processus de traitement des pixels, le test de profondeur est effectué en premier. Si le test de profondeur échoue, une action de mise à jour du tampon du modèle peut être prise, mais aucune autre évaluation de la mémoire tampon du modèle ne peut être effectuée. Si le test de profondeur aboutit, le test du modèle est effectué. D’autres actions peuvent être prises selon les résultats du test du modèle.
La valeur de référence du modèle est définie à l’aide de setStencilReferenceValue()
.
Paramètres
triangleFace:String (default = "frontAndBack ") — Orientations du triangle autorisées à contribuer à l’opération de création de modèle. L’un des objets Context3DTriangleFace.
| |
compareMode:String (default = "always ") — Opérateur de test utilisé pour comparer la valeur de référence du modèle actuel à la valeur du modèle du pixel de destination. La mise à jour de la profondeur et de la couleur du pixel de destination s’effectue lorsque la comparaison est true. Les actions de création de modèle sont exécutées comme indiqué dans les paramètres d’action suivants. L’opérateur de comparaison est appliqué comme opérateur infixe entre la valeur de référence actuelle et la valeur de référence de destination, dans cet ordre (en pseudo-code : si stencilReference OPERATOR stencilbuffer, la valeur est transmise ). Utilisez l’une des constantes définies dans la classe Context3DCompareMode.
| |
actionOnBothPass:String (default = "keep ") — Action à exécuter lors de la réussite des comparaisons de profondeur et de modèle. Utilisez l’une des constantes définies dans la classe Context3DStencilAction.
| |
actionOnDepthFail:String (default = "keep ") — Action à exécuter lors de l’échec de la comparaison de profondeur. Utilisez l’une des constantes définies dans la classe Context3DStencilAction.
| |
actionOnDepthPassStencilFail:String (default = "keep ") — Action à exécuter lors de la réussite de la comparaison de profondeur et lors de l’échec de la comparaison de modèle. Utilisez l’une des constantes définies dans la classe Context3DStencilAction.
|
Valeur émise
Error — Erreur d'énumération non valide : lorsque triangleFace n'est pas l'une des valeurs définies dans la classe Context3DTriangleFace.
| |
Error — Erreur d'énumération non valide : lorsque compareMode n'est pas l'une des valeurs définies dans la classe Context3DCompareMode.
| |
Error — Erreur d'énumération non valide : lorsque actionOnBothPass , actionOnDepthFail ou actionOnDepthPassStencilFail n'est pas l'une des valeurs définies dans la classe context3DStencilAction.
|
Eléments de l’API associés
Exemple ( Comment utiliser cet exemple )
- Videz et remettez à 0 le tampon du modèle.
- Définissez une action de modèle qui incrémente lorsque le test de modèle réussit.
- Définition de la valeur de référence du modèle sur 0.
- Définition d'un masque triangulaire. Quel que soit l'emplacement de dessin du triangle, le test de modèle réussit, car le tampon du modèle a été réinitialisé à 0 et la valeur de référence est de 0. Par conséquent, la mémoire tampon du modèle est incrémentée de 1 à l'emplacement de dessin du masque de triangle.
- Modifiez l'action du modèle afin que les opérations de dessin ne modifient pas le tampon du modèle.
- Tracez un rectangle plein écran (multicolore). Etant donné que la valeur de référence du modèle est de 0, le test de modèle échoue dans la zone masquée. Par conséquent, le rectangle est tracé partout sauf dans la zone masquée.
- Modifiez la valeur de référence du modèle sur 1.
- Tracez un autre rectangle plein écran (rouge). A présent, le test du modèle échoue partout sauf sur la zone masquée, qui a été incrémentée de 1. Par conséquent, le rectangle est tracé uniquement dans la zone masquée.
Survolez l'exemple à l'aide de la souris pour afficher les principales étapes dans la séquence.
package { import com.adobe.utils.AGALMiniAssembler; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DBlendFactor; import flash.display3D.Context3DCompareMode; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DStencilAction; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFormat; import flash.ui.Keyboard; import flash.utils.Timer; public class Context3D_Stencil extends Sprite { public const viewWidth:Number = 350; public const viewHeight:Number = 240; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private const VERTEX_SHADER:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3D_Stencil() { stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); non3DSetup(); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, true ); //Create vertex index list for the triangles var triangles:Vector.<uint> = Vector.<uint>( [ 0, 3, 2, 0, 1, 3, 4, 7, 6, 4, 5, 7, 8, 9, 10 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ //x, y, z r,g,b format -1, 1, 0, 1,0,0, 1, 1, 0, 0,0,1, -1,-1, 0, 0,1,0, 1,-1, 0, 1,0,1, -1, 1, 0, .5,0,0, 1, 1, 0, .5,0,0, -1,-1, 0, .5,0,0, 1,-1, 0, .5,0,0, 0, .7,.1, 0,0,0, -.7,-.7,.1, 0,0,0, .7,-.7,.1, 0,0,0 ]); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); render(); } private function render():void { //Clear, setting stencil to 0 renderContext.clear( .3, .3, .3, 1, 1, 0 ); //Draw stencil, incrementing the stencil buffer value renderContext.setStencilReferenceValue( 0 ); renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, Context3DCompareMode.EQUAL, Context3DStencilAction.INCREMENT_SATURATE ); if( state > 0 ) renderContext.drawTriangles( indexList, 12, 1 ); //Change stencil action when stencil passes so stencil buffer is not changed renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, Context3DCompareMode.EQUAL, Context3DStencilAction.KEEP ); //Draw quad -- doesn't draw where stencil has already drawn if( state > 1 ) renderContext.drawTriangles( indexList, 0, 2 ); //Change the reference to 1 so this quad only draws into stenciled area renderContext.setStencilReferenceValue( 1 ); if( state > 2 ) renderContext.drawTriangles( indexList, 6, 2 ); //Show the frame renderContext.present(); } //The rest of the code is for the example UI and timer private function doState( event:TimerEvent ):void { switch (state) { case 0: description.text = "Draw triangle with stencil action == increment"; state = 1; break; case 1: description.text = "Draw the first plane where stencil == 0"; state = 2; break; case 2: description.text = "Draw second plane where stencil == 1"; state = 3; break; case 3: description.text = "Clear, setting stencil to 0"; state = 0; break; default: description.text = ""; state = 0; } render(); } private var state:int = 3; private var stateTimer:Timer = new Timer( 1250 ); private var description:TextField = new TextField(); private function non3DSetup():void { //Setup timer to animate the stages of drawing the scene stateTimer.addEventListener( TimerEvent.TIMER, doState ); this.stage.addEventListener( MouseEvent.MOUSE_OVER, function(event:Event):void{stateTimer.start()} ); this.stage.addEventListener( MouseEvent.MOUSE_OUT, function(event:Event):void{stateTimer.stop()} ); description.height = 30; description.width = viewWidth; this.addChild( description ); description.y = viewHeight + 15; description.defaultTextFormat = new TextFormat( null, 18, 0xffffff ); description.text = "Mouse over to view."; //Allows mouse-over events var coverSprite:Sprite = new Sprite(); coverSprite.graphics.beginFill( 0, .01 ) coverSprite.graphics.lineTo( stage.stageWidth, 0 ); coverSprite.graphics.lineTo( stage.stageWidth, stage.stageHeight ); coverSprite.graphics.lineTo( 0, stage.stageHeight ); coverSprite.graphics.lineTo( 0, 0 ); this.addChild( coverSprite ); } } }
setStencilReferenceValue | () | méthode |
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Définit la valeur de comparaison du modèle utilisée pour tester les modèles.
Seuls les 8 bits inférieurs de la valeur de référence sont utilisés. La valeur du tampon du modèle est également de 8 bits de long. Utilisez readMask
et writeMask
pour faire appel au tampon du modèle comme champ binaire.
Paramètres
referenceValue:uint — Valeur de référence de 8 bits utilisée lors des tests de comparaison des valeurs de référence.
| |
readMask:uint (default = 255 ) — un masque de 8 bits appliqué à la valeur du tampon du modèle actuel et la valeur de référence avant la comparaison.
| |
writeMask:uint (default = 255 ) — un masque de 8 bits appliqué à la valeur de référence avant la mise à jour du tampon du modèle.
|
Eléments de l’API associés
setTextureAt | () | méthode |
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Spécifie la texture à utiliser pour le registre d’entrée de texture d’un programme de fragments.
Un programme de fragments peut lire les informations de huit objets Texture maximum. Utilisez cette fonction pour attribuer un objet Texture ou CubeTexture à l’un des registres d’échantillonneur utilisé par le programme de fragments.
Remarque : si vous remplacez le programme de fragments en cours (avec setProgram
) par un shader qui utilise moins de textures, définissez les registres inutilisés sur null
:
setTextureAt( 7, null );
Paramètres
sampler:int — l’index de registre de l’échantillonneur, une valeur comprise entre 0 et 7.
| |
texture:flash.display3D.textures:TextureBase — l’objet Texture à rendre disponible, c.-à-d. une occurrence de Texture ou une occurrence de CubeTexture.
|
Informations complémentaires
Eléments de l’API associés
CubeTexture
setVertexBufferAt | () | méthode |
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Spécifie les composants de données de sommets correspondant à une seule entrée de programme de shader de sommets.
Utilisez la méthode setVertexBufferAt
pour identifier les composants des données définies pour chaque sommet dans un tampon VertexBuffer3D qui appartiennent aux entrées du programme de sommets. Le développeur du programme de sommets détermine la quantité de données nécessaire par sommet. Ces données sont mappées à partir de 1 ou plusieurs flux VertexBuffer3D
sur les registres d’attribut du programment de shaders de sommets.
La plus petite unité de données consommée par le shader de sommets est une donnée de 32 bits. Les décalages dans le flux de sommets sont spécifiés en multiples de 32 bits.
Par exemple, un programmeur peut définir chaque sommet avec les données suivantes :position: x float32 y float32 z float32 color: r unsigned byte g unsigned byte b unsigned byte a unsigned byteEn supposant que le sommet a été défini dans un objet VertexBuffer3D appelé
buffer
, il peut être affecté à un shader de sommets avec le code suivant :
setVertexBufferAt( 0, buffer, 0, Context3DVertexBufferFormat.FLOAT_3 ); // attribute #0 will contain the position information setVertexBufferAt( 1, buffer, 3, Context3DVertexBufferFormat.BYTES_4 ); // attribute #1 will contain the color information
Paramètres
index:int — index du registre d’attribut dans shader de sommets (0 à 7).
| |
buffer:VertexBuffer3D — Mémoire tampon qui contient les données du sommet source permettant d’alimenter le shader de sommets.
| |
bufferOffset:int (default = 0 ) — décalage depuis le début des données d’un sommet unique à partir duquel commencer la lecture de cet attribut. Dans l’exemple ci-dessus, les données de position ont un décalage de 0, car il s’agit du premier attribut ; la couleur possède un décalage de 3, car l’attribut de couleur suit les valeurs de position de 32 bits. Le décalage est spécifié en unités de 32 bits.
| |
format:String (default = "float4 ") — valeur de la classe Context3DVertexBufferFormat spécifiant le type de données de cet attribut.
|
Valeur émise
Error — Enum non valide : lorsque le format n’est pas l’une des valeurs définies dans la classe Context3DVertexBufferFormat.
| |
RangeError — Registre d’attributs hors limites : lorsque le paramètre index est en dehors de la plage comprise entre 0 et 7. (Huit registres d’attributs de sommets maximum peuvent être utilisés par un shader.)
|
Informations complémentaires
Eléments de l’API associés
package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.PerspectiveMatrix3D; import flash.display.Sprite; import flash.display.Stage3D; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display3D.Context3D; import flash.display3D.Context3DProgramType; import flash.display3D.Context3DRenderMode; import flash.display3D.Context3DTriangleFace; import flash.display3D.Context3DVertexBufferFormat; import flash.display3D.IndexBuffer3D; import flash.display3D.Program3D; import flash.display3D.VertexBuffer3D; import flash.events.ErrorEvent; import flash.events.Event; import flash.geom.Matrix3D; import flash.geom.Vector3D; public class Context3DExample extends Sprite { public const viewWidth:Number = 320; public const viewHeight:Number = 200; public const zNear:Number = 1; public const zFar:Number = 500; public const fov:Number = 45; private var stage3D:Stage3D; private var renderContext:Context3D; private var indexList:IndexBuffer3D; private var vertexes:VertexBuffer3D; private var projection:PerspectiveMatrix3D = new PerspectiveMatrix3D(); private var model:Matrix3D = new Matrix3D(); private var view:Matrix3D = new Matrix3D(); private var finalTransform:Matrix3D = new Matrix3D(); //For rotating the cube private const pivot:Vector3D = new Vector3D(); private const VERTEX_SHADER:String = "m44 op, va0, vc0 \n" + // 4x4 matrix transform "mov v0, va1"; //copy color to varying variable v0 private const FRAGMENT_SHADER:String = "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler(); private var programPair:Program3D; public function Context3DExample() { this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP_LEFT; this.stage.nativeWindow.activate(); //AIR only stage3D = this.stage.stage3Ds[0]; stage3D.x = 10; stage3D.y = 10; //Add event listener before requesting the context stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated ); stage3D.addEventListener( ErrorEvent.ERROR, contextCreationError ); stage3D.requestContext3D( Context3DRenderMode.AUTO ); //Compile shaders vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false ); fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false ); } //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process private function contextCreated( event:Event ):void { renderContext = Stage3D( event.target ).context3D; trace( "3D driver: " + renderContext.driverInfo ); setupScene(); } private function setupScene():void { renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false ); renderContext.setCulling( Context3DTriangleFace.BACK ); //Create vertex index list for the triangles forming a cube var triangles:Vector.<uint> = Vector.<uint>( [ 2,1,0, //front face 3,2,0, 4,7,5, //bottom face 7,6,5, 8,11,9, //back face 9,11,10, 12,15,13, //top face 13,15,14, 16,19,17, //left face 17,19,18, 20,23,21, //right face 21,23,22 ] ); indexList = renderContext.createIndexBuffer( triangles.length ); indexList.uploadFromVector( triangles, 0, triangles.length ); //Create vertexes - cube faces do not share vertexes const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x,y,z r,g,b format 0,0,0, 1,0,0, //front face 0,1,0, 1,0,0, 1,1,0, 1,0,0, 1,0,0, 1,0,0, 0,0,0, 0,1,0, //bottom face 1,0,0, 0,1,0, 1,0,1, 0,1,0, 0,0,1, 0,1,0, 0,0,1, 1,0,0, //back face 1,0,1, 1,0,0, 1,1,1, 1,0,0, 0,1,1, 1,0,0, 0,1,1, 0,1,0, //top face 1,1,1, 0,1,0, 1,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,1, 0,0,1, //left face 0,1,0, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 1,1,0, 0,0,1, //right face 1,1,1, 0,0,1, 1,0,1, 0,0,1, 1,0,0, 0,0,1 ] ); vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color //Upload programs to render context programPair = renderContext.createProgram(); programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode ); renderContext.setProgram( programPair ); //Set up 3D transforms projection.perspectiveFieldOfViewRH( fov, viewWidth/viewHeight, zNear, zFar ); view.appendTranslation( 0, 0, -2 ); //Move view back model.appendTranslation( -.5, -.5, -.5 ); //center cube on origin this.stage.addEventListener( Event.ENTER_FRAME, render ); } private function render( event:Event ):void { //Rotate model on each frame model.appendRotation( .5, Vector3D.Z_AXIS, pivot ); model.appendRotation( .5, Vector3D.Y_AXIS, pivot ); model.appendRotation( .5, Vector3D.X_AXIS, pivot ); //Combine transforms finalTransform.identity(); finalTransform.append( model ); finalTransform.append( view ); finalTransform.append( projection ); //Pass the final transform to the vertex shader as program constant, vc0 renderContext.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX, 0, finalTransform, true ); //Clear is required before drawTriangles on each frame renderContext.clear( .3,.3,.3 ); //Draw the 12 triangles that make up the cube renderContext.drawTriangles( indexList, 0, 12 ); //Show the frame renderContext.present(); } private function contextCreationError( error:ErrorEvent ):void { trace( error.errorID + ": " + error.text ); } } }
Tue Jun 12 2018, 09:30 AM Z