Guide de référence ActionScript® 3.0 pour la plate-forme Adobe® Flash®
Accueil  |  Masquer la liste des packages et des classes |  Packages  |  Classes  |  Nouveautés  |  Index  |  Annexes  |  Pourquoi existe-t-il du contenu en anglais ?
Filtres : AIR 30.0 et versions antérieures, Flash Player 30.0 et versions antérieures, Flash Lite 4
Flex 4.6 et versions antérieures, Flash Pro CS6 et versions antérieures
Masquer les filtres
flash.display3D 

Context3D  - AS3

Packagesx

Niveau supérieur
adobe.utils
air.desktop
air.net
air.update
air.update.events
coldfusion.air
coldfusion.air.errors
coldfusion.air.events
coldfusion.service
coldfusion.service.events
coldfusion.service.mxml
com.adobe.acm.solutions.authoring.domain.extensions
com.adobe.acm.solutions.ccr.domain.extensions
com.adobe.consulting.pst.vo
com.adobe.dct.component
com.adobe.dct.component.datadictionary
com.adobe.dct.component.datadictionaryElement
com.adobe.dct.component.dataElementsPanel
com.adobe.dct.component.toolbars
com.adobe.dct.event
com.adobe.dct.exp
com.adobe.dct.model
com.adobe.dct.service
com.adobe.dct.service.provider
com.adobe.dct.transfer
com.adobe.dct.util
com.adobe.dct.view
com.adobe.ep.taskmanagement.domain
com.adobe.ep.taskmanagement.event
com.adobe.ep.taskmanagement.filter
com.adobe.ep.taskmanagement.services
com.adobe.ep.taskmanagement.util
com.adobe.ep.ux.attachmentlist.component
com.adobe.ep.ux.attachmentlist.domain
com.adobe.ep.ux.attachmentlist.domain.events
com.adobe.ep.ux.attachmentlist.domain.renderers
com.adobe.ep.ux.attachmentlist.skin
com.adobe.ep.ux.attachmentlist.skin.renderers
com.adobe.ep.ux.content.event
com.adobe.ep.ux.content.factory
com.adobe.ep.ux.content.handlers
com.adobe.ep.ux.content.managers
com.adobe.ep.ux.content.model.asset
com.adobe.ep.ux.content.model.preview
com.adobe.ep.ux.content.model.relation
com.adobe.ep.ux.content.model.search
com.adobe.ep.ux.content.model.toolbar
com.adobe.ep.ux.content.search
com.adobe.ep.ux.content.services
com.adobe.ep.ux.content.services.load
com.adobe.ep.ux.content.services.permissions
com.adobe.ep.ux.content.services.preview
com.adobe.ep.ux.content.services.providers
com.adobe.ep.ux.content.services.query
com.adobe.ep.ux.content.services.relationships
com.adobe.ep.ux.content.services.search.lccontent
com.adobe.ep.ux.content.services.version
com.adobe.ep.ux.content.view
com.adobe.ep.ux.content.view.components.activate
com.adobe.ep.ux.content.view.components.grid
com.adobe.ep.ux.content.view.components.grid.hover
com.adobe.ep.ux.content.view.components.grid.hover.component
com.adobe.ep.ux.content.view.components.grid.renderers
com.adobe.ep.ux.content.view.components.relationships
com.adobe.ep.ux.content.view.components.review
com.adobe.ep.ux.content.view.components.search.renderers
com.adobe.ep.ux.content.view.components.searchpod
com.adobe.ep.ux.content.view.components.toolbar
com.adobe.ep.ux.content.view.components.toolbar.controlRenderers
com.adobe.ep.ux.content.view.components.version
com.adobe.ep.ux.documentsubmit.component
com.adobe.ep.ux.documentsubmit.domain
com.adobe.ep.ux.documentsubmit.skin
com.adobe.ep.ux.taskaction.component
com.adobe.ep.ux.taskaction.domain
com.adobe.ep.ux.taskaction.domain.events
com.adobe.ep.ux.taskaction.skin
com.adobe.ep.ux.taskdetails.component
com.adobe.ep.ux.taskdetails.domain
com.adobe.ep.ux.taskdetails.skin
com.adobe.ep.ux.tasklist.component
com.adobe.ep.ux.tasklist.domain
com.adobe.ep.ux.tasklist.skin
com.adobe.ep.ux.webdocumentviewer.domain
com.adobe.exm.expression
com.adobe.exm.expression.error
com.adobe.exm.expression.event
com.adobe.exm.expression.impl
com.adobe.fiber.runtime.lib
com.adobe.fiber.services
com.adobe.fiber.services.wrapper
com.adobe.fiber.styles
com.adobe.fiber.util
com.adobe.fiber.valueobjects
com.adobe.gravity.binding
com.adobe.gravity.context
com.adobe.gravity.flex.bundleloader
com.adobe.gravity.flex.progress
com.adobe.gravity.flex.serviceloader
com.adobe.gravity.framework
com.adobe.gravity.init
com.adobe.gravity.service.bundleloader
com.adobe.gravity.service.logging
com.adobe.gravity.service.manifest
com.adobe.gravity.service.progress
com.adobe.gravity.tracker
com.adobe.gravity.ui
com.adobe.gravity.utility
com.adobe.gravity.utility.async
com.adobe.gravity.utility.error
com.adobe.gravity.utility.events
com.adobe.gravity.utility.factory
com.adobe.gravity.utility.flex.async
com.adobe.gravity.utility.logging
com.adobe.gravity.utility.message
com.adobe.gravity.utility.sequence
com.adobe.gravity.utility.url
com.adobe.guides.control
com.adobe.guides.domain
com.adobe.guides.i18n
com.adobe.guides.spark.components.skins
com.adobe.guides.spark.components.skins.mx
com.adobe.guides.spark.headers.components
com.adobe.guides.spark.headers.skins
com.adobe.guides.spark.layouts.components
com.adobe.guides.spark.layouts.skins
com.adobe.guides.spark.navigators.components
com.adobe.guides.spark.navigators.renderers
com.adobe.guides.spark.navigators.skins
com.adobe.guides.spark.util
com.adobe.guides.spark.wrappers.components
com.adobe.guides.spark.wrappers.skins
com.adobe.guides.submit
com.adobe.icc.dc.domain
com.adobe.icc.dc.domain.factory
com.adobe.icc.editors.events
com.adobe.icc.editors.handlers
com.adobe.icc.editors.managers
com.adobe.icc.editors.model
com.adobe.icc.editors.model.config
com.adobe.icc.editors.model.el
com.adobe.icc.editors.model.el.operands
com.adobe.icc.editors.model.el.operators
com.adobe.icc.enum
com.adobe.icc.external.dc
com.adobe.icc.obj
com.adobe.icc.services
com.adobe.icc.services.category
com.adobe.icc.services.config
com.adobe.icc.services.download
com.adobe.icc.services.export
com.adobe.icc.services.external
com.adobe.icc.services.formbridge
com.adobe.icc.services.fragmentlayout
com.adobe.icc.services.layout
com.adobe.icc.services.letter
com.adobe.icc.services.locator
com.adobe.icc.services.module
com.adobe.icc.services.render
com.adobe.icc.services.submit
com.adobe.icc.services.user
com.adobe.icc.token
com.adobe.icc.vo
com.adobe.icc.vo.render
com.adobe.icomm.assetplacement.controller
com.adobe.icomm.assetplacement.controller.utils
com.adobe.icomm.assetplacement.data
com.adobe.icomm.assetplacement.model
com.adobe.livecycle.assetmanager.client
com.adobe.livecycle.assetmanager.client.event
com.adobe.livecycle.assetmanager.client.handler
com.adobe.livecycle.assetmanager.client.managers
com.adobe.livecycle.assetmanager.client.model
com.adobe.livecycle.assetmanager.client.model.cms
com.adobe.livecycle.assetmanager.client.service
com.adobe.livecycle.assetmanager.client.service.search
com.adobe.livecycle.assetmanager.client.service.search.cms
com.adobe.livecycle.assetmanager.client.utils
com.adobe.livecycle.content
com.adobe.livecycle.rca.model
com.adobe.livecycle.rca.model.constant
com.adobe.livecycle.rca.model.document
com.adobe.livecycle.rca.model.participant
com.adobe.livecycle.rca.model.reminder
com.adobe.livecycle.rca.model.stage
com.adobe.livecycle.rca.service
com.adobe.livecycle.rca.service.core
com.adobe.livecycle.rca.service.core.delegate
com.adobe.livecycle.rca.service.process
com.adobe.livecycle.rca.service.process.delegate
com.adobe.livecycle.rca.token
com.adobe.livecycle.ria.security.api
com.adobe.livecycle.ria.security.service
com.adobe.mosaic.layouts
com.adobe.mosaic.layouts.dragAndDrop
com.adobe.mosaic.layouts.interfaces
com.adobe.mosaic.mxml
com.adobe.mosaic.om.constants
com.adobe.mosaic.om.events
com.adobe.mosaic.om.impl
com.adobe.mosaic.om.interfaces
com.adobe.mosaic.skinning
com.adobe.mosaic.sparklib.editors
com.adobe.mosaic.sparklib.optionMenu
com.adobe.mosaic.sparklib.scrollableMenu
com.adobe.mosaic.sparklib.scrollableMenu.skins
com.adobe.mosaic.sparklib.tabLayout
com.adobe.mosaic.sparklib.tabLayout.events
com.adobe.mosaic.sparklib.tabLayout.layouts
com.adobe.mosaic.sparklib.tabLayout.skins
com.adobe.mosaic.sparklib.text
com.adobe.mosaic.sparklib.util
com.adobe.solutions.acm.authoring.presentation
com.adobe.solutions.acm.authoring.presentation.actionbar
com.adobe.solutions.acm.authoring.presentation.common
com.adobe.solutions.acm.authoring.presentation.events
com.adobe.solutions.acm.authoring.presentation.fragment
com.adobe.solutions.acm.authoring.presentation.letter
com.adobe.solutions.acm.authoring.presentation.letter.data
com.adobe.solutions.acm.authoring.presentation.preview
com.adobe.solutions.acm.authoring.presentation.rte
com.adobe.solutions.acm.ccr.presentation
com.adobe.solutions.acm.ccr.presentation.contentcapture
com.adobe.solutions.acm.ccr.presentation.contentcapture.events
com.adobe.solutions.acm.ccr.presentation.contentcapture.preview
com.adobe.solutions.acm.ccr.presentation.datacapture
com.adobe.solutions.acm.ccr.presentation.datacapture.renderers
com.adobe.solutions.acm.ccr.presentation.pdf
com.adobe.solutions.exm
com.adobe.solutions.exm.authoring
com.adobe.solutions.exm.authoring.components.controls
com.adobe.solutions.exm.authoring.components.toolbars
com.adobe.solutions.exm.authoring.domain
com.adobe.solutions.exm.authoring.domain.expression
com.adobe.solutions.exm.authoring.domain.impl
com.adobe.solutions.exm.authoring.domain.method
com.adobe.solutions.exm.authoring.domain.variable
com.adobe.solutions.exm.authoring.enum
com.adobe.solutions.exm.authoring.events
com.adobe.solutions.exm.authoring.model
com.adobe.solutions.exm.authoring.renderer
com.adobe.solutions.exm.authoring.view
com.adobe.solutions.exm.expression
com.adobe.solutions.exm.impl
com.adobe.solutions.exm.impl.method
com.adobe.solutions.exm.method
com.adobe.solutions.exm.mock
com.adobe.solutions.exm.mock.method
com.adobe.solutions.exm.runtime
com.adobe.solutions.exm.runtime.impl
com.adobe.solutions.exm.variable
com.adobe.solutions.prm.constant
com.adobe.solutions.prm.domain
com.adobe.solutions.prm.domain.factory
com.adobe.solutions.prm.domain.impl
com.adobe.solutions.prm.domain.manager
com.adobe.solutions.prm.presentation.asset
com.adobe.solutions.prm.presentation.constant
com.adobe.solutions.prm.presentation.document
com.adobe.solutions.prm.presentation.event
com.adobe.solutions.prm.presentation.file
com.adobe.solutions.prm.presentation.project
com.adobe.solutions.prm.presentation.team
com.adobe.solutions.prm.presentation.util
com.adobe.solutions.prm.service
com.adobe.solutions.prm.services.impl
com.adobe.solutions.prm.vo
com.adobe.solutions.rca.constant
com.adobe.solutions.rca.domain
com.adobe.solutions.rca.domain.common
com.adobe.solutions.rca.domain.factory
com.adobe.solutions.rca.domain.impl
com.adobe.solutions.rca.domain.impl.manager
com.adobe.solutions.rca.domain.manager
com.adobe.solutions.rca.presentation
com.adobe.solutions.rca.presentation.comment
com.adobe.solutions.rca.presentation.constant
com.adobe.solutions.rca.presentation.event
com.adobe.solutions.rca.presentation.gantt
com.adobe.solutions.rca.presentation.gantt.ruler
com.adobe.solutions.rca.presentation.template
com.adobe.solutions.rca.presentation.template.audit
com.adobe.solutions.rca.presentation.template.definition
com.adobe.solutions.rca.presentation.template.documents
com.adobe.solutions.rca.presentation.template.stages
com.adobe.solutions.rca.presentation.util
com.adobe.solutions.rca.service
com.adobe.solutions.rca.services.impl
com.adobe.solutions.rca.vo
com.adobe.solutions.rca.vo.um
com.adobe.viewsource
fl.accessibility
fl.containers
fl.controls
fl.controls.dataGridClasses
fl.controls.listClasses
fl.controls.progressBarClasses
fl.core
fl.data
fl.display
fl.events
fl.ik
fl.lang
fl.livepreview
fl.managers
fl.motion
fl.motion.easing
fl.rsl
fl.text
fl.transitions
fl.transitions.easing
fl.video
flash.accessibility
flash.concurrent
flash.crypto
flash.data
flash.desktop
flash.display
flash.display3D
flash.display3D.textures
flash.errors
flash.events
flash.external
flash.filesystem
flash.filters
flash.geom
flash.globalization
flash.html
flash.media
flash.net
flash.net.dns
flash.net.drm
flash.notifications
flash.permissions
flash.printing
flash.profiler
flash.sampler
flash.security
flash.sensors
flash.system
flash.text
flash.text.engine
flash.text.ime
flash.ui
flash.utils
flash.xml
flashx.textLayout
flashx.textLayout.compose
flashx.textLayout.container
flashx.textLayout.conversion
flashx.textLayout.edit
flashx.textLayout.elements
flashx.textLayout.events
flashx.textLayout.factory
flashx.textLayout.formats
flashx.textLayout.operations
flashx.textLayout.utils
flashx.undo
ga.controls
ga.layouts
ga.model
ga.uiComponents
ga.util
ga.views
ga.wrappers
lc.foundation
lc.foundation.domain
lc.foundation.events
lc.foundation.ui
lc.foundation.util
lc.preloader
lc.procmgmt
lc.procmgmt.commands
lc.procmgmt.domain
lc.procmgmt.events
lc.procmgmt.formbridge
lc.procmgmt.impl
lc.procmgmt.ui.attachments
lc.procmgmt.ui.controls
lc.procmgmt.ui.controls.card
lc.procmgmt.ui.controls.renderer
lc.procmgmt.ui.help
lc.procmgmt.ui.layout
lc.procmgmt.ui.presentationmodel
lc.procmgmt.ui.process
lc.procmgmt.ui.search
lc.procmgmt.ui.startpoint
lc.procmgmt.ui.task
lc.procmgmt.ui.task.form
lc.procmgmt.ui.task.form.commands
lc.procmgmt.ui.tracking
mx.accessibility
mx.automation
mx.automation.air
mx.automation.delegates
mx.automation.delegates.advancedDataGrid
mx.automation.delegates.charts
mx.automation.delegates.containers
mx.automation.delegates.controls
mx.automation.delegates.controls.dataGridClasses
mx.automation.delegates.controls.fileSystemClasses
mx.automation.delegates.core
mx.automation.delegates.flashflexkit
mx.automation.events
mx.binding
mx.binding.utils
mx.charts
mx.charts.chartClasses
mx.charts.effects
mx.charts.effects.effectClasses
mx.charts.events
mx.charts.renderers
mx.charts.series
mx.charts.series.items
mx.charts.series.renderData
mx.charts.styles
mx.collections
mx.collections.errors
mx.containers
mx.containers.accordionClasses
mx.containers.dividedBoxClasses
mx.containers.errors
mx.containers.utilityClasses
mx.controls
mx.controls.advancedDataGridClasses
mx.controls.dataGridClasses
mx.controls.listClasses
mx.controls.menuClasses
mx.controls.olapDataGridClasses
mx.controls.scrollClasses
mx.controls.sliderClasses
mx.controls.textClasses
mx.controls.treeClasses
mx.controls.videoClasses
mx.core
mx.core.windowClasses
mx.data
mx.data.crypto
mx.data.errors
mx.data.events
mx.data.messages
mx.data.mxml
mx.data.offline.errors
mx.data.utils
mx.effects
mx.effects.easing
mx.effects.effectClasses
mx.events
mx.filters
mx.flash
mx.formatters
mx.geom
mx.graphics
mx.graphics.codec
mx.graphics.shaderClasses
mx.logging
mx.logging.errors
mx.logging.targets
mx.managers
mx.messaging
mx.messaging.channels
mx.messaging.config
mx.messaging.errors
mx.messaging.events
mx.messaging.management
mx.messaging.messages
mx.modules
mx.netmon
mx.olap
mx.olap.aggregators
mx.preloaders
mx.printing
mx.resources
mx.rpc
mx.rpc.events
mx.rpc.http
mx.rpc.http.mxml
mx.rpc.livecycle
mx.rpc.mxml
mx.rpc.remoting
mx.rpc.remoting.mxml
mx.rpc.soap
mx.rpc.soap.mxml
mx.rpc.wsdl
mx.rpc.xml
mx.skins
mx.skins.halo
mx.skins.spark
mx.skins.wireframe
mx.skins.wireframe.windowChrome
mx.states
mx.styles
mx.utils
mx.validators
org.osmf.containers
org.osmf.display
org.osmf.elements
org.osmf.events
org.osmf.layout
org.osmf.logging
org.osmf.media
org.osmf.metadata
org.osmf.net
org.osmf.net.dvr
org.osmf.net.httpstreaming
org.osmf.net.metrics
org.osmf.net.qos
org.osmf.net.rtmpstreaming
org.osmf.net.rules
org.osmf.traits
org.osmf.utils
spark.accessibility
spark.automation.delegates
spark.automation.delegates.components
spark.automation.delegates.components.gridClasses
spark.automation.delegates.components.mediaClasses
spark.automation.delegates.components.supportClasses
spark.automation.delegates.skins.spark
spark.automation.events
spark.collections
spark.components
spark.components.calendarClasses
spark.components.gridClasses
spark.components.mediaClasses
spark.components.supportClasses
spark.components.windowClasses
spark.core
spark.effects
spark.effects.animation
spark.effects.easing
spark.effects.interpolation
spark.effects.supportClasses
spark.events
spark.filters
spark.formatters
spark.formatters.supportClasses
spark.globalization
spark.globalization.supportClasses
spark.layouts
spark.layouts.supportClasses
spark.managers
spark.modules
spark.preloaders
spark.primitives
spark.primitives.supportClasses
spark.skins
spark.skins.mobile
spark.skins.mobile.supportClasses
spark.skins.spark
spark.skins.spark.mediaClasses.fullScreen
spark.skins.spark.mediaClasses.normal
spark.skins.spark.windowChrome
spark.skins.wireframe
spark.skins.wireframe.mediaClasses
spark.skins.wireframe.mediaClasses.fullScreen
spark.transitions
spark.utils
spark.validators
spark.validators.supportClasses
xd.core.axm.enterprise.view.components
xd.core.axm.enterprise.view.skins
xd.core.axm.view.components
xd.core.axm.view.components.support

Eléments du langage

Constantes globales
Fonctions globales
Opérateurs
Instructions, mots clés et directives
Types spéciaux

Annexes

Nouveautés
Erreurs de compilation
Avertissements du compilateur
Erreurs d’exécution
Migration vers ActionScript 3
Jeux de caractères pris en charge
Balises MXML uniquement
Eléments XML de mouvement
Balises Timed Text
Liste des éléments déconseillés
Constantes d’implémentation d’accessibilité
Utilisation des exemples de code ActionScript
Informations juridiques
Packageflash.display3D
Classepublic final class Context3D
HéritageContext3D Inheritance EventDispatcher Inheritance Object

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 11, AIR 3

La classe Context3D fournit un contexte pour le rendu géométrique des graphiques définis.

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 :

  1. Configurez les attributs du tampon de l’affichage principal en appelant configureBackBuffer().
  2. 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.
  3. 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 :

RessourceNombre autoriséMémoire totale
Tampons de sommets 4096256 Mo
Tampons d’index 4096128 Mo
Programmes 409616 Mo
Textures 4096128 Mo
Textures de cube 4096256 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 :

TextureTaille maximaleMémoire totale du processeur graphique (GPU)
Texture normale (sous la ligne de base étendue) 2 048 x 2 048512 Mo
Texture normale (ligne de base prolongée et au-delà) 4 096 x 4 096512 Mo
Texture rectangulaire (sous la ligne de base étendue) 2 048 x 2 048512 Mo
Texture rectangulaire (ligne de base étendue et au-delà) 4 096 x 4 096512 Mo
Texture de cube 1 024 x 1024256 Mo

Limites de texture pour AIR 64 bits (bureau) :

TextureTaille maximaleMémoire totale du processeur graphique (GPU)
Texture normale (sous la ligne de base étendue) 2 048 x 2 048512 Mo
Texture normale (ligne de base étendue à standard) 4 096 x 4 096512 Mo
Texture normale (ligne de base étendue et au-delà) 4096 x 40962 048 Mo
Texture rectangulaire (sous la ligne de base étendue) 2 048 x 2 048512 Mo
Texture rectangulaire (ligne de base étendue à standard) 4 096 x 4 096512 Mo
Texture rectangulaire (ligne de base étendue et au-delà) 4096 x 40962 048 Mo
Texture de cube 1 024 x 1024256 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.

Consulter les exemples

Informations complémentaires

Eléments de l’API associés



Propriétés publiques
 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
 Inheritedconstructor : 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éthodes publiques
 MéthodeDéfini par
 Inherited
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
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
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
 Inherited
Distribue un événement dans le flux d’événements.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Libère toutes les ressources et le stockage interne associés à cet objet Context3D.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Trace le tampon de rendu en cours sur une image bitmap.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
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
 Inherited
Vérifie si des écouteurs sont enregistrés auprès de l’objet EventDispatcher pour un type spécifique d’événement.
EventDispatcher
 Inherited
Indique si la propriété spécifiée d’un objet est définie.
Object
 Inherited
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre.
Object
  
Affiche la mémoire tampon de rendu d’arrière-plan.
Context3D
 Inherited
Indique si la propriété spécifiée existe et est énumérable.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Supprime un écouteur de l’objet EventDispatcher.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Spécifie les facteurs utilisés pour fusionner la couleur de sortie d’une opération de dessin avec la couleur existante.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Définit le masque utilisé lors de l’écriture des couleurs dans le tampon de rendu.
Context3D
  
setCulling(triangleFaceToCull:String):void
Définit le mode d’élimination du triangle.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Définit le type de comparaison utilisé pour le test de profondeur.
Context3D
  
    setFillMode(fillMode:String):void
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
 Inherited
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
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
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
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
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
 Inherited
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur.
Object
 Inherited
Renvoie la représentation sous forme de chaîne de l’objet spécifié.
Object
 Inherited
Renvoie la valeur primitive de l’objet spécifié.
Object
 Inherited
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
Evénements
 Evénement Synthèse Défini par
 Inherited[Evénement de diffusion] Distribué lorsque l’application Flash Player obtient le focus du système d’exploitation et devient active.EventDispatcher
 Inherited[Evénement de diffusion] Distribué lorsque l’application Flash Player ou AIR perd le focus du système d’exploitation et devient inactive.EventDispatcher
Détails de la propriété

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é 
profile:String  [lecture seule]

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: Flash Player 12, AIR 4

Profil de prise en charge de fonction utilisé par cet objet Context3D.



Implémentation
    public function get profile():String

Eléments de l’API associés

supportsVideoTexture

propriété 
supportsVideoTexture:Boolean  [lecture seule]

Version du langage: ActionScript 3.0
Versions du moteur d’exécution: AIR 17.0, Flash Player 18.0

Indique si les objets Context3D prennent en charge la texture vidéo.



Implémentation
    public static function get supportsVideoTexture():Boolean

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

Cette API peut être utilisée lorsque la version SWF est 32 ou version ultérieure.



Implémentation
    public function get totalGPUMemory():Number
Détails de la méthode

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.
0Pas d’anticrènelage
2Anticrènelage minimal.
4Anticrènelage de grande qualité.
16Anticrènelage de très grande qualité.
 
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 streamingLevels sur une valeur comprise entre 1 et le nombre d’images dans le mipmap pour activer la diffusion de texture. Par exemple, vous disposez d’un mipmap qui comprend une image principale de 64x64 pixels à la plus haute qualité. Les images de qualité inférieure dans le mipmap sont de 32x32, 16x16, 8x8, 4x4, 2x2 et 1x1 pixels, pour 7 images au total, soit 7 niveaux. Le niveau 0 représente la meilleure qualité d’image. La valeur maximale de cette propriété est log2(min(width,height)). Par conséquent, pour une image principale de 64 x 64 pixels, la valeur maximale de streamingLevels est de 7. Définissez cette propriété sur 3 pour rendre l’image après le chargement de l’image de 8x8 pixels.

Remarque : définir cette propriété sur une valeur > 0 peut avoir une incidence sur l’utilisation et les performances de la mémoire.

Valeur renvoyée
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.

Valeur renvoyée
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.

Valeur renvoyée
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 )

Cet exemple illustre comment créer, télécharger et activer une paire de programmes de sommets et de pixels sur un contexte de rendu. Notez que l'objet 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.

Valeur renvoyée
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 streamingLevels sur une valeur comprise entre 1 et le nombre d’images dans le mipmap pour activer la diffusion de texture. Par exemple, vous disposez d’un mipmap qui comprend une image principale de 64x64 pixels à la plus haute qualité. Les images de qualité inférieure dans le mipmap sont de 32x32, 16x16, 8x8, 4x4, 2x2 et 1x1 pixels, pour 7 images au total, soit 7 niveaux. Le niveau 0 représente la meilleure qualité d’image. La valeur maximale de cette propriété est log2(min(width,height)). Par conséquent, pour une image principale de 64 x 64 pixels, la valeur maximale de streamingLevels est de 7. Définissez cette propriété sur 3 pour rendre l’image après le chargement de l’image de 8x8 pixels.

Remarque : définir cette propriété sur une valeur > 0 peut avoir une incidence sur l’utilisation et les performances de la mémoire.

Valeur renvoyée
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.

Valeur renvoyée
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 )

L'exemple suivant explique comment créer et charger un tampon de données de sommets. Dans l'exemple, la mémoire tampon contient deux types de données pour chaque sommet : la position (coordonnées x, y, z) et la couleur (composants rvb). Après la création du tampon de sommets, l'exemple appelle la méthode 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.

Valeur renvoyée
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ée
flash.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

    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 )

L'exemple suivant rend deux triangles dans la mémoire de rendu normale et dans un objet BitmapData. L’objet BitmapData est affiché à l’aide d’un objet Bitmap ajouté à la liste d’affichage normale. Un filtre d'ombre portée est appliqué au rendu bitmap.
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é enableErrorChecking est définie sur true :

 
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


Exemple  ( Comment utiliser cet exemple )

La classe suivante dessine deux triangles sur une fenêtre d'affichage Stage3D de la scène. Les triangles partagent un sommet, situé à l’origine (0,0,0).

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é enableErrorChecking est définie sur true :

 
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


Exemple  ( Comment utiliser cet exemple )

La classe suivante dessine trois triangles à l'aide de la fonction de traçage en instance avec un appel de dessin unique au lieu de plusieurs appels de dessin.
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.
        }    
    }
}

La classe suivante dessine trois triangles à l'aide de la fonction de traçage en instance avec un appel de dessin unique au lieu de plusieurs appels de dessin.
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 )

La classe suivante illustre les divers facteurs de fusion. L'exemple trace quatre rectangles colorés différents dans le tampon de rendu. Cet ensemble de rectangles est la « destination » de fusion. Les modes de fusion de la source et de la destination sont ensuite définis, puis un rectangle plus grand, la « source » de fusion, est tracé. Utilisez les touches 1 et 2 pour passer en revue les modes de fusion sources. Utilisez les touches 3 et 4 pour passer en revue les modes de fusion de destination.
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 )

L'exemple suivant illustre l'effet obtenu suite à la définition du masque de couleur. L'exemple trace deux triangles ayant la même couleur. Le triangle supérieur est tracé avant que le masque ne soit défini ; il est donc rendu en blanc. Le triangle inférieur est tracé après que tous les canaux, à l'exception du canal rouge, sont inclus au masque. Étant donné que seul le canal rouge peut être mis à jour, le triangle blanc est rendu en rouge.
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 )

Cet exemple illustre comment créer, télécharger et activer une paire de programmes de sommets et de pixels sur un contexte de rendu. Notez que l'objet 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 )

La classe suivante dessine deux triangles sur une fenêtre d’affichage de 640 x 480 pixels sur la scène. Les triangles partagent un sommet, situé à l’origine (0,0,0).

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 )

La classe suivante illustre comment tracer un modèle et l'utiliser comme masque pour les opérations de dessin suivantes. Cet exemple suit la procédure ci-dessous :
  • 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

Texture
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 byte
En 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

Context3DExample.as

La classe suivante trace un cube qui pivote à l'aide d'une projection de perspective.
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 );
        }
    }
}




[ X ]Pourquoi existe-t-il du contenu en anglais ?
Certaines parties du Guide de référence ActionScript 3.0 sont en anglais

Tout le contenu du Guide de référence ActionScript 3.0 n’a pas été traduit dans toutes les langues. Si un élément de langage n’est pas traduit, il s’affiche en anglais. Par exemple, la classe ga.controls.HelpBox n’est traduite dans aucune langue. Ainsi, dans la version française du guide de référence, la classe ga.controls.HelpBox apparaît en anglais.