Package | flash.display3D |
Classe | public final class Program3D |
Héritage | Program3D Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 2 |
Les programmes gérés par un objet Program3D permettent de contrôler l’intégralité du rendu de triangles au cours d’un appel de drawTriangles()
de Context3D. Téléchargez le pseudo-code binaire dans le contexte de rendu à l’aide de la méthode upload
. (Une fois le téléchargement effectué, le programme dans le tableau d’octets d’origine n’est plus référencé ; la modification ou la suppression du tableau d’octets source ne modifie pas la liste de triangles.)
Les programmes sont toujours composés de deux parties liées : un programme de sommets et un programme de fragments.
- Le programme de sommets opère sur les données définies dans les objets VertexBuffer3D, et est chargé de projeter les sommets en espace de clip et de transmettre toutes les données de sommets requises, telles que la couleur, au shader de fragments.
- Le shader de fragments opère sur les attributs qui lui sont transmis par le programme de sommets, et produit une couleur pour chaque fragment rastérisé d’un triangle, ce qui résulte en couleurs de pixel. Notez que les programmes de fragments disposent de plusieurs noms dans la documentation de programmation 3D, notamment shaders de fragments et shaders de pixels.
Désignez la paire de programmes à utiliser pour les opérations de rendu suivantes en transmettant l’occurrence de Program3D correspondante à la méthode setProgram()
de Context3D.
Vous ne pouvez pas créer d’objet Program3D directement ; utilisez plutôt la méthode createProgram()
de Context3D.
Eléments de l’API associés
Méthode | Défini par | ||
---|---|---|---|
Libérez toutes les ressources associées à cet objet. | Program3D | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Télécharge une paire de programmes de rendu exprimés en pseudo-code binaire AGAL (Adobe Graphics Assembly Language). | Program3D | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
dispose | () | méthode |
public function dispose():void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Libérez toutes les ressources associées à cet objet. Après la suppression d’un objet Program3D, l’appel de la méthode upload() et le rendu à l’aide cet objet échouent.
upload | () | méthode |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 11, AIR 3 |
Télécharge une paire de programmes de rendu exprimés en pseudo-code binaire AGAL (Adobe Graphics Assembly Language).
Le pseudo-code du programme peut être créé à l’aide des outils 3D hors ligne de Pixel Bender. Il peut également être créé de façon dynamique. La classe AGALMiniAssembler est une classe d’utilitaire qui compile les programmes de langage d’assemblage AGAL en pseudo-code binaire AGAL. Cette classe ne fait pas partie du moteur d’exécution. Lorsque vous téléchargez les programmes de shader, le pseudo-code binaire est compilé en langage de shader natif pour le périphérique actif (par exemple, OpenGL ou Direct3D). Le moteur d’exécution valide le pseudo-code binaire lors du téléchargement.
Les programmes s’exécutent chaque fois que la méthode drawTriangles()
de Context3D est invoquée. Le programme de sommets est exécuté une fois pour chaque sommet de la liste des triangles à tracer. Le programme de fragments est exécuté une fois pour chaque pixel sur une surface du triangle.
Les "variables" utilisées par un programme de shaders sont appelées registres. Les registres suivants sont définis :
Nom | Nombre par programme de fragments | Nombre par programme de sommets | Rôle |
---|---|---|---|
Attribut | sans objet | 8 | Entrée de shader de sommets ; à lire à partir d’un tampon de sommets spécifié à l’aide de Context3D.setVertexBufferAt(). |
Constante | 28 | 128 | Entrée de shader ; à définir à l’aide de la famille de fonctions Context3D.setProgramConstants(). |
Temporaire | 8 | 8 | Registre temporaire pour le calcul, non accessible en dehors du programme. |
Sortie | 1 | 1 | Sortie de shader : dans un programme de sommets, la sortie correspond à la position de l’espace du clip ; dans un programme de fragments, la sortie est une couleur. |
Variation | 8 | 8 | Transférez les données interpolées entre les shaders de sommets et de fragments. Les registres de variables du programme de sommets sont appliqués en tant qu’entrée au programme de fragments. Les valeurs sont interpolées en fonction de la distance par rapport aux sommets du triangle. |
Echantillonneur | 8 | sans objet | Entrée de shader de fragments ; à lire à partir d’une texture spécifiée à l’aide de Context3D.setTextureAt() |
Un programme de sommets reçoit l’entrée à partir de deux sources : les tampons de sommets et les registres de constantes. Spécifiez les données de sommet à utiliser pour le registre d’attributs d’un sommet particulier à l’aide de la méthode setVertexBufferAt()
de Context3D. Vous pouvez définir jusqu’à huit registres d’entrée pour les attributs de sommet. Les valeurs d’attributs de sommet sont lues à partir du tampon de sommets pour chaque sommet dans la liste de triangles et placées dans le registre d’attributs. Spécifiez les registres de constantes à l’aide de la méthode setProgramConstantsFromMatrix()
ou setProgramConstantsFromVector()
de Context3D. Les registres de constantes conservent la même valeur pour chaque sommet dans la liste de triangles. (Vous pouvez uniquement modifier les valeurs de constante entre les appels à drawTriangles()
.)
Le programme de sommets est chargé de projeter les sommets du triangle dans l’espace de clip (zone d’affichage canonique entre ±1 sur les axes x et y et 0-1 sur l’axe z) et de placer les coordonnées transformées dans son registre de sortie. (En règle générale, la matrice de projection appropriée est fournie au shader dans un ensemble de registres de constantes.) Le programme de sommets doit également copier tous les attributs de sommet ou les valeurs calculées requis par le programme de fragments dans un jeu spécial de variables appelé registre de variables. Lorsqu’un shader de fragments s’exécute, la valeur fournie dans un registre de variables est interpolée de façon linéaire en fonction de la distance du fragment en cours à partir de chaque sommet du triangle.
Un programme de fragments reçoit l’entrée à partir des registres de variables et à partir d’un jeu de registres de constantes indépendant (défini avec setProgramConstantsFromMatrix()
ou setProgramConstantsFromVector()
). Il est également possible de lire les données de texture téléchargées à partir du contexte de rendu à l’aide des registres de l’échantillonneur. Spécifiez la texture à laquelle accéder avec un registre d’échantillonneur particulier à l’aide de la méthode setTextureAt()
de Context3D. Le programme de fragments est chargé de définir son registre sur une valeur de couleur.
Paramètres
vertexProgram:ByteArray — Pseudo-code AGAL pour le programme de sommets. L’objet ByteArray doit utiliser le format petit-boutiste.
| |
fragmentProgram:ByteArray — Pseudo-code AGAL pour le programme de fragments. L’objet ByteArray doit utiliser le format petit-boutiste.
|
Valeur émise
TypeError — Erreur de pointeur nul : si vertexProgram ou fragmentProgram est null.
| |
Error — Objet supprimé : si l'objet Program3D a été supprimé, soit directement par un appel à dispose() , soit indirectement en appelant la méthode dispose() de l'objet Context3D, soit parce que le contexte de rendu a été supprimé en raison d'une perte de périphérique.
| |
ArgumentError — Programme AGAL trop petit : lorsque la longueur de l'un ou l'autre tableau de codes de programme est inférieure à 31 octets. Il s'agit de la taille du pseudo-code binaire du shader d'un programme à une instruction.
| |
ArgumentError — Le programme doit être petit-boutiste : si l'un ou l'autre des tableaux d'octets de code de programme n'est pas petit-boutiste.
| |
Error — Echec de la compilation du shader natif : si la sortie du traducteur AGAL n'est pas un programme de langage de shader natif compilable. Cette erreur est uniquement renvoyée dans les lecteurs commercialisés.
| |
Error — Echec de la compilation du shader natif OpenGL : lorsque la sortie du traducteur AGAL n’est pas un programme de langage de shader OpengGL compilable, et inclut des diagnostics de compilation. Cette erreur est uniquement renvoyée dans les lecteurs de débogage.
| |
Error — Echec de la compilation du shader D3D9 : lorsque la sortie du traducteur AGAL n’est pas un programme de langage de shader Direct3D compilable, et inclut des diagnostics de compilation. Cette erreur est uniquement renvoyée dans les lecteurs de débogage.
Les erreurs suivantes sont renvoyées lors de l’échec de la validation du pseudo-code AGAL : | |
Error — Pas un programme Agal : si l’en-tête "magic byte" est erroné. Le premier octet du pseudo-code binaire doit être 0xa0. Cette erreur peut indiquer que le tableau d’octets est défini sur le mauvais ordre endian.
| |
Error — Version Agal incorrecte : si la version AGAL n’est pas prise en charge par la version SWF actuelle. La version AGAL doit être définie sur 1 pour la version 13 du fichier SWF.
| |
Error — Type de programme Agal incorrect : si l’identificateur de type de programme AGAL n’est pas valide. Le troisième octet dans le code binaire doit être 0xa1. Cette erreur peut indiquer que le tableau d’octets est défini sur le mauvais ordre endian.
| |
Error — Type de shader Agal incorrect : si le code du type de shader n’est pas un fragment ni un sommet (1 ou 0).
| |
Error — Code d’op. Agal non valide en dehors de la plage : si un code d’opération non valide est détecté dans le flux du jeton.
| |
Error — Code d’op. Agal non valide non implémenté : si un code d’opération non valide est détecté dans le flux du jeton.
| |
Error — Code d’op. Agal uniquement autorisé dans le programme de fragments : si un code d’opération est détecté dans le flux du jeton du programme de sommets qui n’est autorisé que dans les programmes de fragments tels que KIL ou TEX.
| |
Error — Opérandes sources Agal incorrects : si les deux opérandes sources sont des registres de constante. Vous devez calculer le résultat à l’extérieur du programme de shaders et le transmettre en utilisant un seul registre de constante.
| |
Error — Les deux opérandes sont des lectures indirectes : si les deux opérandes sont des lectures indirectes.
| |
Error — Destination code d’op. doit être zéro : si un jeton avec un code d’opération (tel que KIL) qui n’a aucune destination définit une valeur non nulle pour le registre de destination.
| |
Error — Destination code d’op. doit utiliser un masque : si un code d’opération qui produit uniquement un résultat de composant 3 est utilisé sans masquage.
| |
Error — Trop de jetons : s’il existe un trop grand nombre de jetons (plus de 200) dans un programme AGAL.
| |
Error — Type de shader de fragments : si le type de programme de fragments (octet 6 du paramètre fragmentProgram) n’est pas défini sur 1.
| |
Error — Type de shader de sommets : si le type de programme de sommets (octet 6 du paramètre vertexProgram) n’est pas défini sur 0.
| |
Error — Variable lue mais pas écrite : si le shader de fragments lit un registre de variables qui n’a jamais été écrit par le shader de sommets.
| |
Error — Variable partiellement écrite : si un registre de variables n’est que partiellement écrit. Tous les composants d’un registre de variables doivent être écrits.
| |
Error — Fragment écrit tous les composants : si la sortie de couleur d’un fragment n’est que partiellement écrite. Les quatre composants de la sortie couleur doivent être écrits.
| |
Error — Sommet écrit tous les composants : si la sortie de l’espace de clip d’un sommet n’est que partiellement écrite. Tous les composants de la sortie espace du clip de sommets doivent être écrits.
| |
Error — Opérande non utilisé : si un opérande inutilisé dans un jeton n’est pas défini sur zéro.
| |
Error — Registre de l'échantillonneur uniquement dans un fragment : si le registre d'un échantillonneur de texture est utilisé dans un programme de sommets.
| |
Error — Registre de l'échantillonneur deuxième opérande : si un registre de l'échantillonneur est utilisé comme destination ou premier opérande d'un jeton AGAL.
| |
Error — Indirect autorisé uniquement dans un sommet : si l'adressage indirect est utilisé dans un programme de fragments.
| |
Error — Indirect uniquement dans un registre de constantes : si l'adressage indirect est utilisé dans un registre sans constante.
| |
Error — Type de source indirect : si le type de source indirect n'est pas un attribut, une constante ou un registre temporaire.
| |
Error — Les champs d'adressage indirect doivent être définis sur zéro : si tous les champs d'adressage indirect ne sont pas définis sur zéro pour l'adressage direct.
| |
Error — Registres de variables uniquement lus dans un fragment : si un registre de variables est lu dans un programme de sommets. Les registres de variables peuvent uniquement être écrits dans des programmes de sommets et lus dans des programmes de fragments.
| |
Error — Registres d'attributs uniquement lus dans un sommet : si un registre d'attributs est lu dans un programme de fragments. Les registres d'attributs peuvent uniquement être lus dans des programmes de sommets.
| |
Error — Impossible de lire le registre de sortie : si un registre de sortie (position ou couleur) est lu. Le registre de sortie peut uniquement être écrit, pas lu.
| |
Error — Registre temporaire lu sans être écrit : si un registre temporaire est lu sans qu'il n'ait été écrit.
| |
Error — Composant de registre temporaire lu sans être écrit : si le composant d'un registre temporaire spécifique est lu sans qu'il n'ait été écrit.
| |
Error — Registre de l'échantillonneur ne peut pas être écrit : si un registre de l'échantillonneur est écrit. Les registres de l'échantillonneur peuvent uniquement être lus, pas écrits.
| |
Error — Ecriture du registre de variables : si un registre de variables est écrit dans un programme de fragments. Les registres de variables peuvent uniquement être écrits dans des programmes de sommets et lus dans des programmes de fragments.
| |
Error — Les registres d'attributs ne peuvent pas être écrits : si un registre d'attributs est écrit. Les registres d'attributs sont en lecture seule.
| |
Error — Impossible d'écrire sur le registre de constantes : si un registre de constantes est écrit à l'intérieur d'un programme de shaders.
| |
Error — Masque d'écriture de la destination égale à zéro : si le masque d'écriture de la destination est défini sur zéro. Tous les composants d'un registre de sortie doivent être définis.
| |
Error — Les bits réservés d'AGAL doivent être définis sur zéro : si l'un des bits réservés dans un jeton n'est pas égal à zéro. Cela indique une erreur lors de la création du pseudo-code binaire (ou un pseudo-code binaire incorrectement formé).
| |
Error — Type de registre inconnu : si un index de type de registre incorrect est utilisé.
| |
Error — Registre de l'échantillonneur hors limites : si un index de registre de l'échantillonneur incorrect est utilisé.
| |
Error — Registre de variables hors limites : si un index de registre de variables incorrect est utilisé.
| |
Error — Registre d'attributs hors limites : si un index de registre d'attributs incorrect est utilisé.
| |
Error — Registre de constantes hors limites : si un index de registre de constantes incorrect est utilisé.
| |
Error — Registre de sortie hors limites : si un index de registre de sortie incorrect est utilisé.
| |
Error — Registre temporaire hors limites : si un index de registre temporaire incorrect est utilisé.
| |
Error — L'échantillonneur de mappage de cubes doit utiliser le verrouillage : si un échantillonneur de mappage de cubes ne définit pas le mode d'habillage à verrouiller.
| |
Error — Dimension d'échantillonneur inconnue : si un échantillon utilise une dimension d'échantillonneur inconnue. (Seules les textures 2D et les textures de cube sont prises en charge.)
| |
Error — Mode de filtre inconnu : si un échantillonneur fait appel à un mode de filtre inconnu. (Seuls les modes voisin le plus proche et filtrage linéaire sont pris en charge.)
| |
Error — Mode mipmap inconnu : si un échantillonneur utilise un mode mipmap inconnu. (Seuls les modes aucun, voisin le plus proche et mipmap linéaire sont pris en charge.)
| |
Error — Mode d'enveloppe inconnu : si un échantillonneur utilise un mode d'enveloppe inconnu. (Seuls les mode d'enveloppe verrouillage et répétition d'enveloppement sont pris en charge.)
| |
Error — Indicateur spécial inconnu : si un échantillonneur utilise un indicateur spécial inconnu.
| |
Error — Couleur de sortie non masquable : vous ne pouvez pas masquer la couleur du registre de sortie dans un programme de fragments. Tous les composants du registre de couleur doivent être définis.
| |
Error — Le deuxième opérande doit être le registre de l'échantillonneur : l'opcode tex AGAL doit avoir un échantillonneur comme second opérande source.
| |
Error — Indirect non autorisé : adressage indirect utilisé lorsque cela n'est pas autorisé.
| |
Error — Le réagencement doit être scalaire : erreur de réagencement.
| |
Error — Réagencement de la 2e source impossible : erreur de réagencement.
| |
Error — Deuxième utilisation de l'échantillonneur doit avoir les mêmes paramètres : tous les échantillonneurs qui accèdent à la même texture doivent utiliser les mêmes dimension, habillage, filtre, et paramètres mipmap.
| |
Error — 3768 : l’API Stage3D ne peut pas être utilisée lors d’une exécution en arrière-plan.
|
Informations complémentaires
Eléments de l’API associés
Tue Jun 12 2018, 09:30 AM Z