Guida di riferimento di ActionScript® 3.0 per la piattaforma Adobe® Flash®
Home  |  Nascondi elenco pacchetti e classi |  Pacchetti  |  Classi  |  Novità  |  Indice  |  Appendici  |  Perché in inglese?
Filtri: AIR 30.0 e versioni precedenti, Flash Player 30.0 e versioni precedenti, Flash Lite 4
Flex 4.6 e versioni precedenti, Flash Pro CS6 e versioni precedenti
Nascondi filtri
flash.display3D 

Context3D  - AS3

Pacchettix

Primo livello
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

Elementi del linguaggio

Costanti globali
Funzioni globali
Operatori
Istruzioni, parole chiave e direttive
Tipi speciali

Appendici

Novità
Errori del compilatore
Avvisi del compilatore
Errori runtime
Migrazione a ActionScript 3
Set di caratteri supportati
Tag solo di MXML
Elementi XML di Motion
Tag Timed Text
Elenco degli elementi obsoleti
Costanti di implementazione dell’accessibilità
Utilizzare gli esempi ActionScript
Note legali
Pacchettoflash.display3D
Classepublic final class Context3D
EreditarietàContext3D Inheritance EventDispatcher Inheritance Object

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

La classe Context3D fornisce un contesto per il rendering della grafica definita in modo geometrico.

Un contesto di rendering include una superficie di disegno, nonché le risorse e lo stato associati. Se possibile, il contesto di rendering utilizza l'unità di elaborazione grafica (GPU) hardware. In caso contrario, il contesto di rendering utilizza il software. (Se su una piattaforma il rendering tramite Context3D non è supportato, la proprietà stage3Ds dell'oggetto Stage contiene un elenco vuoto).

Il contesto di rendering Context3D è una pipeline programmabile molto simile a OpenGL ES 2. Essendo tuttavia astratto, è compatibile con una gamma di interfacce hardware e GPU. Pur essendo progettata per la grafica 3D, la pipeline di rendering non esegue obbligatoriamente il rendering in tre dimensioni. Di conseguenza, potete creare un renderer 2D specificando i programmi di frammenti, vertici e pixel appropriati. Sia nel caso di rendering 3D che 2D, la sola primitiva geometrica supportata è il triangolo.

Potete ottenere un'istanza della classe Context3D chiamando il metodo requestContext3D() di un oggetto Stage3D. Per ogni stage può essere presente un numero limitato di oggetti Context3D, uno per ogni oggetto Stage3D nell'elenco Stage.stage3Ds. Quando viene creato il contesto, l'oggetto Stage3D invia un evento context3DCreate. Un contesto di rendering può essere eliminato e ricreato in qualsiasi momento, ad esempio quando viene attivata un'altra applicazione che utilizza la GPU. Nel codice dovreste prevedere di ricevere più eventi context3DCreate. Posiziona l'area di rendering sullo stage utilizzando le proprietà x e y dell'istanza Stage3D associata.

Per il rendering e la visualizzazione di una scena (dopo aver ottenuto un oggetto Context3D), è in genere necessario procedere come segue:

  1. Configurate gli attributi del buffer di visualizzazione principale chiamando configureBackBuffer().
  2. Create e inizializzate le risorse di rendering, incluse le seguenti:
    • Buffer di vertici e di indici che definiscono la geometria della scena
    • Programmi di vertici e di pixel (shader) per il rendering della scena
    • Texture
  3. Eseguite il rendering di un fotogramma:
    • Impostate lo stato di rendering appropriato per un oggetto o un insieme di oggetti nella scena.
    • Chiamate il metodo drawTriangles() per eseguire il rendering di un set di triangoli.
    • Modificate lo stato di rendering del successivo gruppo di oggetti.
    • Chiamate drawTriangles() per disegnare i triangoli che definiscono gli oggetti.
    • Ripetete la procedura fino a completare il rendering della scena.
    • Chiamate il metodo present() per visualizzare la scena di cui è stato eseguito il rendering.

Di seguito sono elencati i limiti del rendering:

Limiti delle risorse:

RisorsaNumero consentitoMemoria totale
Buffer di vertici 4096256 MB
Buffer di indici 4096128 MB
Programmi 409616 MB
Texture 4096128 MB
Texture cubiche 4096256 MB

Limiti AGAL: 200 opcode per programma.

Limiti delle chiamate a draw: 32.768 chiamate a drawTriangles() per ogni chiamata a present().

Di seguito sono elencati i limiti relativi alle texture:

Limiti di texture per AIR 32 bit:

TextureDimensioni massimeMemoria GPU totale
Texture normale (sotto la linea di base estesa) 2048x2048512 MB
Texture normale (sulla linea di base estesa e sopra di essa) 4096x4096512 MB
Texture rettangolare (sotto la linea di base estesa) 2048x2048512 MB
Texture rettangolare (sulla linea di base estesa e sopra di essa) 4096x4096512 MB
Texture cubica 1024x1024256 MB

Limiti di texture per AIR 64 bit (desktop):

TextureDimensioni massimeMemoria GPU totale
Texture normale (sotto la linea di base estesa) 2048x2048512 MB
Texture normale (da linea di base estesa a standard) 4096x4096512 MB
Texture normale (standard estesa e superiore) 4096x40962048 MB
Texture rettangolare (sotto la linea di base estesa) 2048x2048512 MB
Texture rettangolare (linea di base estesa a standard) 4096x4096512 MB
Texture rettangolare (standard estesa e superiore) 4096x40962048 MB
Texture cubica 1024x1024256 MB

512 MB è il limite assoluto per le texture e include la memoria texture richiesta per le mipmap. Tuttavia, il limite di memoria per le texture cubiche è di 256 MB.

Non è possibile creare oggetti Context3D con la funzione di costruzione Context3D. Viene costruito ed è disponibile come proprietà di un'istanza Stage3D. La classe Context3D può essere utilizzata sulle piattaforme mobili e desktop, sia in Flash Player sia in AIR.

Vedere gli esempi

Altre informazioni

Elementi API correlati



Proprietà pubbliche
 ProprietàDefinito da
  backBufferHeight : int
[sola lettura] Specifica l’altezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer().
Context3D
  backBufferWidth : int
[sola lettura] Specifica la larghezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer().
Context3D
 Inheritedconstructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto.
Object
  driverInfo : String
[sola lettura] Il tipo di driver di libreria grafica utilizzato da questo contesto di rendering.
Context3D
  enableErrorChecking : Boolean
Specifica se gli errori rilevati dal renderer vengono segnalati all'applicazione.
Context3D
  maxBackBufferHeight : int
Specifica l’altezza massima del back buffer.
Context3D
  maxBackBufferWidth : int
Specifica la larghezza massima del back buffer.
Context3D
  profile : String
[sola lettura] Il profilo di supporto delle funzionalità utilizzato da questo oggetto Context3D.
Context3D
  supportsVideoTexture : Boolean
[statico] [sola lettura] Indica se Context3D supporta la texture video.
Context3D
  totalGPUMemory : Number
[sola lettura] Restituisce la memoria GPU totale assegnata mediante le strutture di dati Stage3D di un'applicazione. Ogni volta che viene creato un oggetto della risorsa GPU, la memoria utilizzata viene memorizzata in Context3D.
Context3D
Metodi pubblici
 MetodoDefinito da
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un oggetto listener di eventi con un oggetto EventDispatcher, in modo che il listener riceva la notifica di un evento.
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
Cancella i buffer del colore, della profondità e di stencil associati a questo oggetto Context3D e li riempie con i valori specificati.
Context3D
  
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Imposta le dimensioni del riquadro di visualizzazione e altri attributi del buffer di rendering.
Context3D
  
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Crea un oggetto CubeTexture.
Context3D
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Crea un oggetto IndexBuffer3D.
Context3D
  
Crea un oggetto Program3D.
Context3D
  
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Crea un oggetto RectangleTexture.
Context3D
  
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Crea un oggetto Texture.
Context3D
  
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un oggetto VertexBuffer3D.
Context3D
  
    createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un oggetto VertexBuffer3D per i dati delle istanze.
Context3D
  
Crea un oggetto VideoTexture.
Context3D
 Inherited
Invia un evento nel flusso di eventi.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Libera tutte le risorse e l'archiviazione interna associate a questo oggetto Context3D.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Disegna il buffer di rendering corrente su una bitmap.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Eseguite il rendering dei triangoli specificati tramite i buffer e lo stato attuali di questo oggetto Context3D.
Context3D
  
    drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Eseguite il rendering delle istanze dei triangoli specificate tramite i buffer e lo stato attuali di questo oggetto Context3D.
Context3D
 Inherited
Verifica se per l'oggetto EventDispatcher sono presenti listener registrati per un tipo specifico di evento.
EventDispatcher
 Inherited
Indica se per un oggetto è definita una proprietà specifica.
Object
 Inherited
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro.
Object
  
Visualizza il back buffer di rendering.
Context3D
 Inherited
Indica se la proprietà specificata esiste ed è enumerabile.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Rimuove un listener dall'oggetto EventDispatcher.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Specifica i fattori utilizzati per fondere il colore di output di un'operazione di disegno con il colore esistente.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Imposta la maschera utilizzata per la scrittura dei colori nel buffer di rendering.
Context3D
  
setCulling(triangleFaceToCull:String):void
Imposta la modalità di culling dei triangoli.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Imposta il tipo di confronto utilizzato per il test di profondità.
Context3D
  
    setFillMode(fillMode:String):void
Imposta la modalità di riempimento usata per il rendering.
Context3D
  
Imposta i programmi shader di vertici e di frammenti da utilizzare per il successivo rendering.
Context3D
  
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto ByteArray.
Context3D
  
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto Matrix3D.
Context3D
  
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Imposta gli input di costanti per i programmi shader.
Context3D
 Inherited
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche.
Object
  
Imposta il back buffer di rendering come destinazione di rendering.
Context3D
  
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Imposta la texture specificata come destinazione di rendering.
Context3D
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Sostituisce manualmente lo stato del campionatore di texture.
Context3D
  
Imposta un rettangolo scissor, che è un tipo di maschera di disegno.
Context3D
  
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Imposta l'operazione e la modalità stencil.
Context3D
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Imposta il valore di confronto stencil utilizzato per il test di stencil.
Context3D
  
Specifica la texture da utilizzare per un registro di input texture di un programma di frammenti.
Context3D
  
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Specifica quali componenti dati di vertice corrispondono a un singolo input di programma shader di vertici.
Context3D
 Inherited
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate.
Object
 Inherited
Restituisce la rappresentazione in formato stringa dell'oggetto specificato.
Object
 Inherited
Restituisce il valore di base dell'oggetto specificato.
Object
 Inherited
Verifica se un listener di eventi è registrato con questo oggetto EventDispatcher o qualsiasi suo antenato per il tipo di evento specificato.
EventDispatcher
Eventi
 Evento Riepilogo Definito da
 Inherited[evento di trasmissione] Inviato quando Flash Player o l'applicazione AIR ottiene lo stato di attivazione del sistema operativo ed entra nello stato attivo.EventDispatcher
 Inherited[evento di trasmissione] Inviato quando Flash Player o l'applicazione AIR perde l'attivazione del sistema operativo e sta entrando nello stato inattivo.EventDispatcher
Descrizione delle proprietà

backBufferHeight

proprietà
backBufferHeight:int  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 15, AIR 15

Specifica l’altezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer(). È possibile modificare l’altezza quando cambia il fattore di zoom del browser se wantsBestResolutionOnBrowserZoom è impostato su true nell’ultima chiamata corretta al metodo configureBackBuffer(). È possibile rilevare la modifica dell’altezza registrando un listener di eventi per l’evento di modifica dello zoom del browser.



Implementazione
    public function get backBufferHeight():int

Elementi API correlati

backBufferWidth

proprietà 
backBufferWidth:int  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 15, AIR 15

Specifica la larghezza del back buffer, che è possibile modificare con una chiamata corretta al metodo configureBackBuffer(). È possibile modificare la larghezza quando cambia il fattore di zoom del browser se wantsBestResolutionOnBrowserZoom è impostato su true nell’ultima chiamata corretta al metodo configureBackBuffer(). È possibile rilevare la modifica della larghezza registrando un listener di eventi per l’evento di modifica dello zoom del browser.



Implementazione
    public function get backBufferWidth():int

Elementi API correlati

driverInfo

proprietà 
driverInfo:String  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Il tipo di driver di libreria grafica utilizzato da questo contesto di rendering. Indica se per il rendering viene utilizzato un software, un driver DirectX o un driver OpenGL. Indica anche se il rendering hardware ha avuto esito negativo. Se il rendering hardware non riesce, Flash Player usa il rendering software per Stage3D e driverInfo contiene uno dei valori seguenti:

  • "Software Hw_disabled=userDisabled" - La casella di controllo Attiva accelerazione hardware nelle Impostazioni di Adobe Flash Player non è selezionata.
  • "Software Hw_disabled=oldDriver" - Problema del driver grafico hardware. L’aggiornamento del driver grafico potrebbe risolvere il problema.
  • "Software Hw_disabled=unavailable" - Problema del driver grafico hardware o errore di inizializzazione della grafica hardware.
  • "Software Hw_disabled=explicit" - Il contenuto ha richiesto esplicitamente il rendering software mediante requestContext3D.
  • "Software Hw_disabled=domainMemory" - Il contenuto utilizza domainMemory, che richiede una licenza quando è utilizzato con il rendering hardware Stage3D. Visitate adobe.com/go/fpl_it.



Implementazione
    public function get driverInfo():String

enableErrorChecking

proprietà 
enableErrorChecking:Boolean

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Specifica se gli errori rilevati dal renderer vengono segnalati all'applicazione.

Quando enableErrorChecking è true, i metodi clear() e drawTriangles() sono sincroni e possono generare errori. Quando enableErrorChecking è false (impostazione predefinita), i metodi clear() e drawTriangles() sono asincroni e gli errori non vengono segnalati. L'abilitazione del controllo errori riduce le prestazioni di rendering. È consigliabile abilitare il controllo errori solo durante il debug.



Implementazione
    public function get enableErrorChecking():Boolean
    public function set enableErrorChecking(value:Boolean):void

Elementi API correlati

maxBackBufferHeight

proprietà 
maxBackBufferHeight:int

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 15, AIR 15

Specifica l’altezza massima del back buffer. Il valore iniziale è il limite di sistema nella piattaforma. La proprietà può essere impostata su un valore minore o uguale, ma non maggiore, al limite di sistema. La proprietà può essere impostata su un valore maggiore o uguale, ma non minore, al limite minimo. Il limite minimo è un valore costante, 32, quando il back buffer non è configurato. Il limite minimo sarà il valore del parametro height nell’ultima chiamata corretta al metodo configureBackBuffer() dopo la configurazione del back buffer.



Implementazione
    public function get maxBackBufferHeight():int
    public function set maxBackBufferHeight(value:int):void

maxBackBufferWidth

proprietà 
maxBackBufferWidth:int

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 15, AIR 15

Specifica la larghezza massima del back buffer. Il valore iniziale è il limite di sistema nella piattaforma. La proprietà può essere impostata su un valore minore o uguale, ma non maggiore, al limite di sistema. La proprietà può essere impostata su un valore maggiore o uguale, ma non minore, al limite minimo. Il limite minimo è un valore costante, 32, quando il back buffer non è configurato. Il limite minimo sarà il valore del parametro width dell’ultima chiamata corretta al metodo configureBackBuffer() dopo la configurazione del back buffer.



Implementazione
    public function get maxBackBufferWidth():int
    public function set maxBackBufferWidth(value:int):void

profile

proprietà 
profile:String  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 12, AIR 4

Il profilo di supporto delle funzionalità utilizzato da questo oggetto Context3D.



Implementazione
    public function get profile():String

Elementi API correlati

supportsVideoTexture

proprietà 
supportsVideoTexture:Boolean  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 17.0, Flash Player 18.0

Indica se Context3D supporta la texture video.



Implementazione
    public static function get supportsVideoTexture():Boolean

totalGPUMemory

proprietà 
totalGPUMemory:Number  [sola lettura]

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 21, AIR 21

Restituisce la memoria GPU totale assegnata mediante le strutture di dati Stage3D di un'applicazione.

Ogni volta che viene creato un oggetto della risorsa GPU, la memoria utilizzata viene memorizzata in Context3D. Questa memoria include i buffer di indici, buffer di vertici, le texture (tranne le video texture) e i programmi creati mediante questo Context3D.

L'API totalGPUMemory restituisce all'utente la memoria totale utilizzata dalle risorse di cui sopra. Il valore predefinito restituito è 0. La memoria GPU totale restituita è espressa in byte. Informazioni sono disponibili solo in modalità Diretta su telefoni cellulari e in modalità Diretta e GPU sul desktop. (Sul desktop, se utilizzate <renderMode>gpu</renderMode> verrà eseguito il fallback a <renderMode>direct</renderMode>)

Questa API può essere utilizzata con SWF versione 32 o successiva.



Implementazione
    public function get totalGPUMemory():Number
Descrizione dei metodi

clear

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

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Cancella i buffer del colore, della profondità e di stencil associati a questo oggetto Context3D e li riempie con i valori specificati.

Impostate il parametro mask per specificare i buffer da cancellare. Utilizzate le costanti definite nella classe Context3DClearMask per impostare il parametro mask. Utilizzate l'operatore OR bit a bit, "|", per aggiungere più buffer alla maschera (o utilizzate Context3DClearMask.ALL). Quando si esegue il rendering sul back buffer, il metodo configureBackBuffer() deve essere chiamato prima di qualsiasi chiamata clear().

Nota: se specificate il valore di un parametro al di fuori dell'intervallo consentito, i valori del parametro Numeric vengono fissati all'intervallo da zero a uno senza visualizzare messaggi. Analogamente, se stencil è maggiore di 0xff, viene impostato su 0xff.

Parametri

red:Number (default = 0.0) — il componente rosso del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno.
 
green:Number (default = 0.0) — il componente verde del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno.
 
blue:Number (default = 0.0) — il componente blu del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno.
 
alpha:Number (default = 1.0) — il componente alfa del colore con cui cancellare il buffer del colore, compreso in un intervallo da zero a uno. La componente alfa non viene utilizzata per la fusione. Viene scritta direttamente nel buffer alfa.
 
depth:Number (default = 1.0) — il valore con cui cancellare il buffer della profondità, compreso in un intervallo da zero a uno.
 
stencil:uint (default = 0) — il valore di 8 bit con cui cancellare il buffer di stencil, compreso in un intervallo da 0x00 a 0xff.
 
mask:uint (default = 0xffffffff) — specifica i buffer da cancellare.


Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.

Elementi API correlati

configureBackBuffer

()metodo 
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta le dimensioni del riquadro di visualizzazione e altri attributi del buffer di rendering.

Il rendering viene inserito in un doppio buffer. Il back buffer viene scambiato con il front buffer visibile quando si chiama il metodo present(). La dimensione minima del buffer è di 32x32 pixel. La dimensione massima del back buffer è limitata dalle potenzialità del dispositivo e può inoltre essere impostata dall’utente tramite le proprietà maxBackBufferWidth e maxBackBufferHeight. La configurazione del buffer è un'operazione lenta. Evitate di modificare la dimensione o gli attributi del buffer durante le normali operazioni di rendering.

Parametri

width:int — larghezza in pixel del buffer.
 
height:int — altezza in pixel del buffer.
 
antiAlias:int — Un valore intero che specifica la qualità di antialiasing richiesta. Il valore è correlato al numero di sottocampioni utilizzati durante l'antialiasing. L'uso di un maggior numero di sottocampioni richiede l'esecuzione di più calcoli, sebbene l'impatto relativo sulle prestazioni dipenda dallo specifico hardware di rendering. Il tipo di antialiasing e l'esecuzione o meno dell'antialiasing dipendono dal dispositivo e dalla modalità di rendering. L'antialiasing non è supportato dal contesto di rendering software.
0Nessun antialiasing
2Antialiasing minimo.
4Antialiasing di alta qualità.
16Antialiasing di altissima qualità.
 
enableDepthAndStencil:Boolean (default = true)false indica che non viene creato nessun buffer di profondità o di stencil, mentre true crea un buffer di profondità e un buffer di stencil. Per un'applicazione AIR 3.2 o successiva compilata con SWF versione 15 o successiva, se l'elemento renderMode nel file descrittore dell'applicazione è direct, allora l'elemento depthAndStencil nel file descrittore dell'applicazione deve avere lo stesso valore di questo argomento. Per impostazione predefinita, il valore dell'elemento depthAndStencil è false.
 
wantsBestResolution:Boolean (default = false)true indica che se il dispositivo supporta gli schermi HiDPI, esso tenta di assegnare un back buffer più grande di quanto indicato dai parametri width e height. Poiché in questo modo vengono aggiunti più pixel e potenzialmente viene modificato il risultato delle operazioni shader, questa opzione è disattivata per impostazione predefinita. Utilizzate Stage.contentsScaleFactor per determinare di quanto è stato ingrandito il back buffer nativo.
 
wantsBestResolutionOnBrowserZoom:Boolean (default = false)true indica che le dimensioni del back buffer devono aumentare in proporzione all’aumento del fattore di zoom del browser. L’impostazione di questo valore è persistente tra diversi zoom del browser. Il valore predefinito del parametro è false. Impostare le proprietà maxBackBufferWidth e maxBackBufferHeight per limitare l’aumento di dimensioni del back buffer. Utilizzare backBufferWidth e backBufferHeight per determinare le dimensioni correnti del back buffer.


Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Dimensione di input errata: il parametro width o height è minore delle dimensioni di back buffer minime consentite o maggiore delle dimensioni di back buffer massime consentite.
 
Error — 3709: Il flag depthAndStencil flag nel descrittore dell'applicazione deve corrispondere al valore booleano enableDepthAndStencil passato a configureBackBuffer() nell'oggetto Context3D.

createCubeTexture

()metodo 
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Crea un oggetto CubeTexture.

Utilizzate un oggetto CubeTexture per caricare bitmap di texture cubiche nel contesto di rendering e per fare riferimento a una texture cubica durante il rendering. Una texture cubica consiste di sei texture quadrate di uguali dimensioni, disposte secondo una topologia cubica; le texture cubiche sono utili per descrivere le mappe d'ambiente.

Non è possibile creare oggetti CubeTexture con una funzione di costruzione CubeTexture; utilizzate invece questo metodo. Dopo aver creato un oggetto CubeTexture, caricate i dati delle bitmap di texture utilizzando i metodi CubeTexture uploadFromBitmapData(), uploadFromByteArray() o uploadCompressedTextureFromByteArray().

Parametri

size:int — La lunghezza del bordo della texture in texel.
 
format:String — Il formato texel dell’elenco enumerato Context3DTextureFormat.

La compressione delle texture permette di memorizzare le immagini delle texture in formato compresso direttamente sulla GPU, risparmiando memoria GPU e larghezza di banda della memoria. In genere, i fotogrammi appiattiti sono compresse offline e vengono caricati nella GPU nel modulo convertita mediante il metodo di Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 e AIR 3.4 su piattaforme desktop supportano la compressione runtime delle texture, che risulta utile in determinate situazioni quale il rendering di texture dinamiche dalla grafica vettoriale. Questa funzione non è attualmente disponibile sulle piattaforme mobili e viene generato un ArgumentError (formato texture non corrispondente). Per utilizzare la compressione runtime delle texture, procedete nel modo seguente: 1. Create l’oggetto texture chiamando il metodo Context3D.createCubeTexture(), passando come parametro format flash.display3D.Context3DTextureFormat.COMPRESSED oppure flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Utilizzando l’istanza flash.display3D.textures.Texture restituita da createCubeTexture(), chiamate flash.display3D.textures.CubeTexture.uploadFromBitmapData() o flash.display3D.textures.CubeTexture.uploadFromByteArray() per caricare e comprimere la texture in un unico passaggio.

 
optimizeForRenderToTexture:Boolean — Impostato su true se la texture verrà probabilmente utilizzata come target di rendering.
 
streamingLevels:int (default = 0) — Il livello MIP map che deve essere caricato prima di eseguire il rendering dell’immagine. Lo streaming di texture offre la possibilità di caricare e visualizzare per primi i livelli mip più piccoli e quindi di visualizzare progressivamente immagini di qualità più elevata man mano che le texture vengono caricate. Gli utenti finali possono visualizzare in un’applicazione immagini di qualità inferiore mentre le immagini di qualità più elevata sono in fase di caricamento.

Per impostazione predefinita, streamingLevels è 0 e indica che è necessario caricare l’immagine di qualità più elevata nella mappa MIP prima di eseguire il rendering dell’immagine. Questo parametro è stato aggiunto in Flash Player 11.3 e AIR 3.3. Utilizzate il valore predefinito 0 per mantenere il comportamento delle versioni precedenti di Flash Player e AIR.

Impostate streamingLevels su un valore compreso tra 1 e il numero di immagini nella MIP map per abilitare lo streaming delle texture. Ad esempio, supponete di avere una MIP map che include al livello di qualità massimo un’immagine principale di 64 x 64 pixel. Le immagini di qualità inferiore nella MIP map sono 32x32, 16x16, 8x8, 4x4, 2x2 e 1x1 pixel, per 7 immagini in totale, o 7 livelli. Il livello 0 corrisponde all’immagine con la qualità massima. Il valore massimo di questa proprietà è log2(min(larghezza,altezza)). Di conseguenza, per un’immagine principale di 64x64 pixel, il valore massimo di streamingLevels è 7. Impostate questa proprietà su 3 per renderizzare l’immagine dopo il caricamento dell’immagine da 8x8 pixel.

Nota: l’impostazione della proprietà su un valore maggiore di 0 può incidere sull’utilizzo della memoria e sulle prestazioni.

Restituisce
flash.display3D.textures:CubeTexture

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
 
ArgumentError — Texture di profondità non implementata: se si tenta di creare una texture di profondità.
 
ArgumentError — Dimensione texture pari a zero: se il parametro size non è maggiore di zero.
 
ArgumentError — La texture non è una potenza di due: se il parametro size non è una potenza di due.
 
ArgumentError — Texture troppo grande: se il parametro size è maggiore di 1024.
 
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l’oggetto CubeTexture (ma non sono disponibili informazioni sulla causa).
 
ArgumentError — Livello di streaming non valido: se streamingLevels è maggiore o uguale a log2(dimensione).

Elementi API correlati

createIndexBuffer

()metodo 
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Crea un oggetto IndexBuffer3D.

Utilizzate un oggetto IndexBuffer3D per caricare una serie di indici di triangoli nel contesto di rendering e per fare riferimento a tale serie di indici per il rendering. Ogni indice nel buffer di indici fa riferimento a un vertice corrispondente nel buffer di vertici. Ogni serie di tre indici identifica un triangolo. Passate l'oggetto IndexBuffer3D al metodo drawTriangles() per eseguire il rendering di uno o più triangoli definiti nel buffer di indici.

Non è possibile creare oggetti IndexBuffer3D con la funzione di costruzione della classe IndexBuffer3D; utilizzate invece questo metodo. Dopo aver creato un oggetto IndexBuffer3D, caricate gli indici utilizzando il metodo IndexBuffer3D uploadFromVector() o uploadFromByteArray().

Parametri

numIndices:int — Il numero di vertici da memorizzare nel buffer.
 
bufferUsage:String (default = "staticDraw") — L’uso del buffer previsto. Utilizzate una delle costanti definite nella classe Context3DBufferUsage. Il driver hardware può eseguire un’ottimizzazione adeguata se viene impostato correttamente. Questo parametro è disponibile solo nelle versioni successive di Flash 12/AIR 4.

Restituisce
IndexBuffer3D

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti buffer di indici creati oppure la quantità di memoria allocata ai buffer di indici è stata superata.
 
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
 
ArgumentError — Buffer troppo grande: quando numIndices è maggiore o uguale a 0xf0000.

Elementi API correlati

createProgram

()metodo 
public function createProgram():Program3D

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Crea un oggetto Program3D.

Utilizzate un oggetto Program3D per caricare programmi shader nel contesto di rendering e per fare riferimento ai programmi caricati durante il rendering. Un oggetto Program3D memorizza due programmi: un programma di vertici e uno di frammenti (denominato anche programma di pixel). I programmi vengono scritti in linguaggio di assemblaggio shader binario.

Non è possibile creare oggetti Program3D con la funzione di costruzione Program3D; utilizzate invece questo metodo. Dopo aver creato un oggetto Program3D, caricate i programmi utilizzando il metodo Program3D upload().

Restituisce
Program3D

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Il numero di programmi è maggiore di 4096 o la dimensione totale della memoria è maggiore di 16 MB (utilizzate dispose per liberare risorse Program3D).

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

Questo esempio illustra come creare, caricare e attivare una coppia di programmi di vertici e pixel in un contesto di rendering. Notate che l'oggetto, renderContext, è un'istanza della classe Context3D. I programmi contenuti nell'esempio sono scritti nel linguaggio AGAL (Adobe Graphics Assembly Language).
//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

()metodo 
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11.8, AIR 3.8

Crea un oggetto RectangleTexture.

Utilizzate un oggetto RectangleTexture per caricare bitmap di texture nel contesto di rendering e per fare riferimento a una texture durante il rendering.

Non è possibile creare oggetti RectangleTexture con una funzione di costruzione RectangleTexture; utilizzate invece questo metodo. Dopo aver creato un oggetto Rectangle Texture, caricate i dati delle bitmap di texture utilizzando il metodo Texture uploadFromBitmapData() o uploadFromByteArray().

Tenete presente che le texture con intero a 32 bit vengono memorizzate in un formato di pacchetto BGRA per corrispondere al formato Flash BitmapData. Le texture a virgola mobile utilizzano un formato RGBA standard.

Le texture rettangolari si differenziano dalle normali texture 2D poiché la loro larghezza e altezza non devono essere una potenza di due. Inoltre, non contengono mip map. Sono particolarmente utili per i rendering su texture. Se una texture rettangolare viene utilizzata con un campionatore che utilizza il filtraggio delle mip map o il wrapping ripetuto, la chiamata drawTriangles non riesce. Inoltre, la texture rettangolare non supporta lo streaming. Gli unici formati texture supportati dalle texture rettangolari sono BGRA, BGR_PACKED, BGRA_PACKED. I formati texture compressi non sono supportati dalle texture rettangolari.

Parametri

width:int — La larghezza della texture in texel.
 
height:int — L’altezza della texture in texel.
 
format:String — Il formato texel dell’elenco enumerato Context3DTextureFormat.
 
optimizeForRenderToTexture:Boolean — Impostato su true se la texture verrà probabilmente utilizzata come target di rendering.

Restituisce
flash.display3D.textures:RectangleTexture

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
 
ArgumentError — Dimensione texture pari a zero: se il parametro width o height non è maggiore di zero.
 
ArgumentError — Texture troppo grande: se il parametro width o height è maggiore di 2048.
 
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l'oggetto Texture (ma non sono disponibili informazioni sulla causa).
 
Error — Richiede il profilo di base o superiore: se la texture rettangolare è creata con profilo vincolato di base.

Elementi API correlati

createTexture

()metodo 
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Crea un oggetto Texture.

Utilizzate un oggetto Texture per caricare bitmap di texture nel contesto di rendering e per fare riferimento a una texture durante il rendering.

Non è possibile creare oggetti Texture con una funzione di costruzione Texture; utilizzate invece questo metodo. Dopo aver creato un oggetto Texture, caricate i dati delle bitmap di texture utilizzando i metodi Texture uploadFromBitmapData(), uploadFromByteArray() o uploadCompressedTextureFromByteArray().

Tenete presente che le texture con intero a 32 bit vengono memorizzate in un formato di pacchetto BGRA per corrispondere al formato Flash BitmapData. Le texture a virgola mobile utilizzano un formato RGBA standard.

Parametri

width:int — La larghezza della texture in texel.
 
height:int — L’altezza della texture in texel.
 
format:String — Il formato texel dell’elenco enumerato Context3DTextureFormat.

La compressione delle texture permette di memorizzare le immagini delle texture in formato compresso direttamente sulla GPU, risparmiando memoria GPU e larghezza di banda della memoria. In genere, i fotogrammi appiattiti sono compresse offline e vengono caricati nella GPU nel modulo convertita mediante il metodo di Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 e AIR 3.4 su piattaforme desktop supportano la compressione runtime delle texture, che risulta utile in determinate situazioni quale il rendering di texture dinamiche dalla grafica vettoriale. Questa funzione non è attualmente disponibile sulle piattaforme mobili e viene generato un ArgumentError (formato texture non corrispondente). Per utilizzare la compressione runtime delle texture, procedete nel modo seguente: 1. Create l’oggetto texture con il metodo Context3D.createTexture(), passando come parametro format flash.display3D.Context3DTextureFormat.COMPRESSED oppure flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Utilizzando l’istanza flash.display3D.textures.Texture restituita da createTexture(), chiamate flash.display3D.textures.Texture.uploadFromBitmapData() o flash.display3D.textures.Texture.uploadFromByteArray() per caricare e comprimere la texture in un unico passaggio.

 
optimizeForRenderToTexture:Boolean — Impostato su true se la texture verrà probabilmente utilizzata come target di rendering.
 
streamingLevels:int (default = 0) — Il livello MIP map che deve essere caricato prima di eseguire il rendering dell’immagine. Lo streaming di texture offre la possibilità di caricare e visualizzare per primi i livelli mip più piccoli e quindi di visualizzare progressivamente immagini di qualità più elevata man mano che le texture vengono caricate. Gli utenti finali possono visualizzare in un’applicazione immagini di qualità inferiore mentre le immagini di qualità più elevata sono in fase di caricamento.

Per impostazione predefinita, streamingLevels è 0 e indica che è necessario caricare l’immagine di qualità più elevata nella mappa MIP prima di eseguire il rendering dell’immagine. Questo parametro è stato aggiunto in Flash Player 11.3 e AIR 3.3. Utilizzate il valore predefinito 0 per mantenere il comportamento delle versioni precedenti di Flash Player e AIR.

Impostate streamingLevels su un valore compreso tra 1 e il numero di immagini nella MIP map per abilitare lo streaming delle texture. Ad esempio, supponete di avere una MIP map che include al livello di qualità massimo un’immagine principale di 64 x 64 pixel. Le immagini di qualità inferiore nella MIP map sono 32x32, 16x16, 8x8, 4x4, 2x2 e 1x1 pixel, per 7 immagini in totale, o 7 livelli. Il livello 0 corrisponde all’immagine con la qualità massima. Il valore massimo di questa proprietà è log2(min(larghezza,altezza)). Di conseguenza, per un’immagine principale di 64x64 pixel, il valore massimo di streamingLevels è 7. Impostate questa proprietà su 3 per renderizzare l’immagine dopo il caricamento dell’immagine da 8x8 pixel.

Nota: l’impostazione della proprietà su un valore maggiore di 0 può incidere sull’utilizzo della memoria e sulle prestazioni.

Restituisce
flash.display3D.textures:Texture

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
 
ArgumentError — Texture di profondità non implementata: se si tenta di creare una texture di profondità.
 
ArgumentError — Dimensione texture pari a zero: se il parametro width o height non è maggiore di zero.
 
ArgumentError — La texture non è una potenza di due: se i parametri width e height non sono una potenza di due.
 
ArgumentError — Texture troppo grande: se il parametro width o height è maggiore di 2048 per la base e il profilo di base o se il parametro width o height è maggiore di 4096 per la base profilo estesa e superiore.
 
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l’oggetto Texture (ma non sono disponibili informazioni sulla causa).
 
ArgumentError — Livello di streaming non valido: se streamingLevels è maggiore o uguale a log2(min(larghezza,altezza)).

Elementi API correlati

createVertexBuffer

()metodo 
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Crea un oggetto VertexBuffer3D.

Utilizzate un oggetto VertexBuffer3D per caricare una serie di dati di vertici nel contesto di rendering. Un buffer di vertici contiene i dati necessari per eseguire il rendering di ciascun punto nella geometria della scena. Gli attributi dati associati a ciascun vertice includono solitamente le coordinate di posizione, colore e texture e fungono da input per il programma shader di vertici. Per identificare i valori dei dati che corrispondono a uno degli input del programma di vertici, utilizzate il metodo setVertexBufferAt(). È possibile specificare fino a 64 valori a 32 bit per ciascun vertice.

Non è possibile creare oggetti VertexBuffer3D con la funzione di costruzione VertexBuffer3D; utilizzate invece questo metodo. Dopo aver creato un oggetto VertexBuffer3D, caricate i dati dei vertici utilizzando il metodo VertexBuffer3D uploadFromVector() o uploadFromByteArray().

Parametri

numVertices:int — Il numero di vertici da memorizzare nel buffer. Il numero massimo di vertici in un singolo buffer è 65535.
 
data32PerVertex:int — Il numero di valori di dati a 32 bit (4 byte) associato a ciascun vertice. Il numero massimo di elementi dati a 32 bit per vertice è 64 (o 256 byte). Solo otto registri di attributo sono accessibili a un programma shader di vertici in un dato momento. Utilizzate SetVertextBufferAt() per seleziona gli attributi dall'interno di un buffer di vertici.
 
bufferUsage:String (default = "staticDraw") — L’uso del buffer previsto. Utilizzate una delle costanti definite nella classe Context3DBufferUsage. Il driver hardware può eseguire un’ottimizzazione adeguata se viene impostato correttamente. Questo parametro è disponibile solo nelle versioni successive di Flash 12/AIR 4.

Restituisce
VertexBuffer3D

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti buffer di vertici creati oppure la quantità di memoria allocata ai buffer di vertici è stata superata.
 
ArgumentError — Buffer troppo grande: numVertices è maggiore di 0x10000 o data32PerVertex è maggiore di 64.
 
ArgumentError — Dimensione buffer pari a zero: quando numVertices è zero o data32PerVertex è zero.
 
ArgumentError — Creazione buffer non riuscita: se il contesto di rendering non riesce a creare l'oggetto VertexBuffer3D (ma non sono disponibili informazioni aggiuntive sulla causa).
 
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

L'esempio seguente illustra come creare e caricare un buffer di dati di vertici. Il buffer nell'esempio contiene due tipi di dati per ciascun vertice: la posizione (come coordinate x, y e z) e il colore (come componenti RGB). Dopo che è stato creato il buffer di vertici, l'esempio crea il metodo setVertexBufferAt() per specificare che i primi tre punti dati vengano passati al programma di vertici come tre valori a virgola mobile in va0 e che i secondi tre punti dati vengano passati come va1. Un programma di vertici può avere fino a otto input (denominati anche registri attributi di vertici) definiti in questo modo.
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

()metodo 
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 20.0

Crea un oggetto VertexBuffer3D per i dati delle istanze.

Utilizzate un oggetto VertexBuffer3D per caricare una serie di dati di istanza nel contesto di rendering. Un buffer di vertici contiene i dati necessari per eseguire il rendering di ogni istanza nella geometria della scena. I buffer di vertici con dati di istanza forniscono attributi comuni a tutti i vertici di un’istanza e fungono da input per il programma di shader dei vertici. Per identificare i valori dei dati che corrispondono a uno degli input del programma di vertici, utilizzate il metodo setVertexBufferAt(). È possibile specificare fino a 64 valori a 32 bit per ciascun elemento del buffer di vertici.

Non è possibile creare oggetti VertexBuffer3D con la funzione di costruzione VertexBuffer3D; utilizzate invece questo metodo. Dopo aver creato un oggetto VertexBuffer3D, caricate i dati dei vertici utilizzando il metodo VertexBuffer3D uploadFromVector() o uploadFromByteArray().

Parametri

numVertices:int — il numero di elementi da memorizzare nel buffer. Il numero massimo di elementi in un singolo buffer è 65535.
 
data32PerVertex:int — il numero di valori di dati a 32 bit(4 byte) associato a ciascun elemento. Il numero massimo di elementi dati a 32 bit per vertice è 64 (o 256 byte).
 
instancesPerElement:int — il numero di istanze che utilizzeranno un elemento del buffer di vertici.
 
bufferUsage:String (default = "staticDraw") — L’uso del buffer previsto. Utilizzate una delle costanti definite nella classe Context3DBufferUsage. Il driver hardware può eseguire un’ottimizzazione adeguata se viene impostato correttamente. Questo parametro è disponibile solo nelle versioni successive di Flash 12/AIR 4.

Restituisce
VertexBuffer3D

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti buffer di vertici creati oppure la quantità di memoria allocata ai buffer di vertici è stata superata.
 
ArgumentError — Buffer troppo grande: numVertices è maggiore di 0x10000 o data32PerVertex è maggiore di 64.
 
ArgumentError — Dimensione buffer pari a zero: quando numVertices è zero o data32PerVertex è zero.
 
ArgumentError — Creazione buffer non riuscita: se il contesto di rendering non riesce a creare l'oggetto VertexBuffer3D (ma non sono disponibili informazioni aggiuntive sulla causa).
 
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
 
Error — Richiede profilo esteso standard o superiore: se questo metodo è utilizzato quando il profilo richiesto è inferiore al profilo esteso standard.
 
Error — Istanze non valide per l’elemento: se instancesPerElement non è maggiore di zero.

Elementi API correlati

createVideoTexture

()metodo 
public function createVideoTexture():flash.display3D.textures:VideoTexture

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 17.0, Flash Player 18.0

Crea un oggetto VideoTexture.

Utilizzate un oggetto VideoTexture per ottenere i fotogrammi video come texture da un oggetto NetStream o Camera e per caricare i fotogrammi video al contesto di rendering.

L'oggetto VideoTexture non può essere creato con la funzione di costruzione VideoTexture; utilizzate questo metodo. Dopo avere creato un oggetto VideoTexture, associate l'oggetto NetStream o Camera per ottenere i fotogrammi video con il metodo attachNetStream() o attachCamera() di VideoTexture.

Tenete presente che questo metodo restituisce null se il sistema non supporta questa funzione.

VideoTexture non contiene mipmap. Se VideoTexture viene utilizzato con un campionatore che utilizza il filtraggio delle mip map o il wrapping ripetuto, la chiamata drawTriangles non riesce. VideoTexture può essere considerato come texture BGRA dagli shader. La creazione di un’istanza dell’oggetto VideoTexture non riuscirà se Context3D è stato richiesto con la modalità di rendering software.

Per un'istanza Context3D sono disponibili un massimo di 4 oggetti VideoTexture. Sui dispositivi mobili, il numero effettivo di oggetti VideoTexture supportati può essere inferiore a 4, a causa di limitazioni della piattaforma.

Restituisce
flash.display3D.textures:VideoTexture

Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Limite risorse superato: troppi oggetti Texture creati oppure la quantità di memoria allocata alle texture è stata superata.
 
Error — Creazione texture non riuscita: se il contesto di rendering non riesce a creare l’oggetto Texture (ma non sono disponibili informazioni sulla causa).

dispose

()metodo 
public function dispose(recreate:Boolean = true):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Libera tutte le risorse e l'archiviazione interna associate a questo oggetto Context3D.

Tutti i buffer di indici, buffer di vertici, le texture e i programmi creati mediante questo Context3D vengono rimossi come se venisse chiamato il metodo dispose() su ciascuno di essi singolarmente. Inoltre, lo stesso oggetto Context3D viene rimosso liberando tutti i buffer temporanei e il back buffer. Se chiamate configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() o drawToBitmapData() dopo una chiamata di dispose(), il runtime genera un'eccezione.

Avvertenza: se si chiama dispose() su un oggetto Context3D mentre un listener di eventi per Events.CONTEXT3D_CREATE è ancora impostato sull’oggetto Stage3D associato, la chiamata di dispose() simulerà una perdita del dispositivo. Verrà creato un nuovo Context3D sull’oggetto Stage3D e verrà generato di nuovo l’evento Events.CONTEXT3D_CREATE. Se non desiderate questo, potete rimuovere il listener di eventi dall’oggetto Stage3D prima della chiamata dispose() o impostare il parametro recreate su false.

Parametri

recreate:Boolean (default = true)

Elementi API correlati

    drawToBitmapData

()metodo 
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 3

Disegna il buffer di rendering corrente su una bitmap.

Il contenuto corrente del back buffer di rendering viene copiato in un oggetto BitmapData. Si tratta di un'operazione potenzialmente molto lenta, che può richiedere fino a un secondo di tempo. Utilizzatela con attenzione. Tenete presente che questa funzione non copia il front buffer di rendering (quello visualizzato sullo stage) ma il buffer in cui vengono disegnati i dati. Per catturare l'immagine renderizzata non appena appare sullo stage, chiamate drawToBitmapData() subito dopo aver chiamato present().

A partire da AIR 25, sono stati introdotti due nuovi parametri nell'API drawToBitmapData(). Questa API ora accetta tre parametri. Il primo è il parametro esistente destination:BitmapData. Il secondo parametro è srcRect:Rectangle, il rettangolo di destinazione su stage3D. Il terzo parametro è destPoint:Point, le coordinate sulla bitmap di destinazione. I parametri srcRect e destPoint sono opzionali e predefiniti a (0,0,bitmapWidth,bitmapHeight) e (0,0), rispettivamente.

Quando l'immagine viene disegnata, non viene ridimensionata in base alla bitmap. Il contenuto viene invece ritagliato fino a ottenere le dimensioni della bitmap di destinazione.

Gli oggetti Flash BitmapData memorizzano i colori già moltiplicati per il componente alfa. Ad esempio, se i componenti di colore rgb "puri" di un pixel sono (0x0A, 0x12, 0xBB) e il componente alfa è 0x7F (.5), il pixel viene memorizzato nell'oggetto BitmapData con i seguenti valori rgba: (0x05, 0x09, 0x5D, 0x7F). Potete impostare i valori di fusione in modo tale che i colori renderizzati nel buffer vengano moltiplicati per alfa, oppure potete eseguire l'operazione nello shader dei frammenti. Il contesto di rendering non convalida il fatto che i colori siano memorizzati in formato pre-moltiplicato.

Parametri

destination:BitmapData
 
srcRect:Rectangle (default = null)
 
destPoint:Point (default = null)


Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.
 
Error — 3802: Se uno dei parametri destPoint:Point o srcRect:Rectangle è al di fuori del contorno della coordinata bitmap/stage3D oppure se i valori che non sono un numero (NaN), vengono passati come input.

Esempio  ( Come utilizzare questo esempio )

L'esempio seguente renderizza due triangoli sia nel normale buffer di rendering che in un oggetto BitmapData. L'oggetto BitmapData viene visualizzato aggiungendo un oggetto Bitmap al normale elenco di visualizzazione. Un filtro ombra esterna viene applicato al rendering 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

()metodo 
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Eseguite il rendering dei triangoli specificati tramite i buffer e lo stato attuali di questo oggetto Context3D.

Per ogni triangolo, i relativi vertici vengono elaborati dal programma shader di vertici, mentre la superficie del triangolo viene elaborata dal programma shader di pixel. Il colore di output del programma di pixel per ogni pixel viene disegnato nel target di rendering, a seconda delle operazioni dello stencil, del test di profondità, del valore alfa di origine e di destinazione e del metodo di fusione corrente. La destinazione del rendering può essere il buffer di rendering principale oppure una texture.

Se è abilitato il culling, (con il metodo setCulling()), i triangoli possono essere eliminati dalla scheda prima dell'esecuzione del programma di pixel. Se il testing di profondità e stencil è abilitato, i pixel di output del programma di pixel possono essere eliminati senza aggiornare la destinazione di rendering. Inoltre, il programma di pixel può scegliere di non produrre un colore per un pixel.

I triangoli renderizzati non vengono visualizzati nel riquadro di visualizzazione finché non chiamate il metodo present(). Dopo ogni chiamata di present(), il metodo clear() deve essere chiamato prima della prima chiamata di drawTriangles(), altrimenti il rendering fallisce.

Quando enableErrorChecking è false, questa funzione restituisce immediatamente un valore, non attende i risultati e genera eccezioni solo se questa istanza Context3D è stata eliminata o sono presenti troppe chiamate a draw. Se lo stato del contesto di rendering non è valido, il rendering non viene eseguito senza visualizzare messaggi. Quando la proprietà enableErrorChecking è true, questa funzione restituisce un valore dopo che i triangoli sono stati disegnati e genera eccezioni per qualsiasi errore di disegno o stato del contesto non valido.

Parametri

indexBuffer:IndexBuffer3D — Una serie di indici di vertice che fa riferimento ai vertici da renderizzare.
 
firstIndex:int (default = 0) — L'indice del primo indice di vertice selezionato per il rendering. Il valore predefinito è 0.
 
numTriangles:int (default = -1) — Il numero di triangoli di cui eseguire il rendering. Ogni triangolo consuma tre indici. Passate -1 per disegnare tutti i triangoli nel buffer degli indici. Valore predefinito -1.


Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Se questo metodo viene chiamato troppe volte tra le chiamate di present(). Il numero massimo di chiamate è 32.768.

Gli errori seguenti vengono generati quando la proprietà enableErrorChecking è true:

 
Error — È necessario cancellare prima di disegnare: se il buffer non è stato svuotato prima dell'ultima chiamata present().
 
Error — Se non è stato impostato un oggetto Program3D valido.
 
Error — Nessun buffer di indice valido impostato: se non è stato impostato un oggetto IndexBuffer3D valido.
 
Error — Controllo di validità sui parametri non superato: quando il numero di triangoli da disegnare oppure la proprietà firstIndex superano i valori consentiti.
 
RangeError — Indici insufficienti in questo buffer: quando il buffer non contiene un numero di indici sufficiente per definire il numero di triangoli da disegnare.
 
Error — Campionatore associato a una texture che è a sua volta da renderizzare: quando la destinazione del rendering è una texture e tale texture è assegnata a un input di texture del programma di frammenti corrente.
 
Error — Campionatore associato a una texture non valida: è stata specificata una texture non valida come input del programma di frammenti corrente.
 
Error — Formato campionatore non corrispondente al formato della texture: quando la texture assegnata come input al programma di frammenti corrente ha un formato diverso da quello specificato per il registro del campionatore. Ad esempio, se una texture 2D è assegnata a un campionatore di texture cubiche.
 
Error — Campionatore associato a texture non definita: il programma di frammenti corrente accede a un registro texture che non è stato impostato (con setTextureAt()).
 
Error — La stessa texture richiede gli stessi parametri del campionatore: se una texture viene utilizzata per più di un registro campionatore, tutti i campionatori devono avere le stesse impostazioni. Ad esempio, non è possibile impostare un campionatore su clamp e un altro su wrap.
 
Error — Texture associata ma non utilizzata: una texture è impostata come input dello shader ma non è utilizzata.
 
Error — Flusso non utilizzato: un buffer di vertici è assegnato a un input di attributi di vertice ma il programma di vertici non fa riferimento al registro corrispondente.
 
Error — Flusso non valido: un oggetto VertexBuffer3D assegnato a un input di un programma di vertici non è un oggetto valido.
 
RangeError — Il flusso non ha abbastanza vertici: un buffer di vertici che fornisce dati per disegnare i triangoli specificati non ha dati sufficienti.
 
RangeError — Offset dei vertici del flusso fuori dei limiti: l'offset specificato in una chiamata setVertexBufferAt() è negativo o supera la fine del buffer.
 
Error — Flusso letto ma non impostato: un attributo di vertice utilizzato dal programma di vertici corrente non è impostato (con setVertexBufferAt()).

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

La classe seguente disegna due triangoli in un riquadro di visualizzazione di Stage3D sullo stage. I triangoli condividono un vertice, situato nel punto di origine (0,0,0).

I triangoli vengono definiti utilizzando il buffer di vertici e il buffer di indici. Il buffer di vertici contiene le informazioni sulla posizione e sul colore per ogni vertice del triangolo. Il buffer di indici contiene gli indici del buffer di vertici. Tre indici definiscono un triangolo. Un triangolo costituito ad esempio dai primi tre punti del buffer di vertici viene elencato come 0,1,2 nel buffer di indici.

In questo semplice esempio non vengono eseguite trasformazioni 3D. Solo gli oggetti nell'area di visualizzazione canonica (volume di unità 2x2x1) possono essere visualizzati e le coordinate dei triangoli sono definite all'interno di quest'area. Tuttavia, per il rendering di una tipica scena 3D, dovete progettare gli oggetti da renderizzare dal sistema di coordinate "mondiale" in quest'area di visualizzazione utilizzando una proiezione ortografica o prospettica.

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

()metodo 
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 20.0

Eseguite il rendering delle istanze dei triangoli specificate tramite i buffer e lo stato attuali di questo oggetto Context3D.

Per ogni triangolo di questa istanza, i relativi vertici vengono elaborati dal programma shader di vertici, mentre la superficie del triangolo viene elaborata dal programma shader di pixel. Il colore di output del programma di pixel per ogni pixel viene disegnato nel target di rendering, a seconda delle operazioni dello stencil, del test di profondità, del valore alfa di origine e di destinazione e del metodo di fusione corrente. La destinazione del rendering può essere il buffer di rendering principale oppure una texture.

Se è abilitato il culling, (con il metodo setCulling()), i triangoli possono essere eliminati dalla scheda prima dell'esecuzione del programma di pixel. Se il testing di profondità e stencil è abilitato, i pixel di output del programma di pixel possono essere eliminati senza aggiornare la destinazione di rendering. Inoltre, il programma di pixel può scegliere di non produrre un colore per un pixel.

Le istanze dei triangoli reindirizzati non vengono visualizzate nel riquadro di visualizzazione finché non viene chiamato il metodo present(). Dopo ogni chiamata present(), il metodo clear() deve essere chiamato prima della prima chiamata drawTrianglesInstanced() o il rendering fallisce.

Quando enableErrorChecking è false, questa funzione restituisce immediatamente un valore, non attende i risultati e genera eccezioni solo se questa istanza Context3D è stata eliminata o sono presenti troppe chiamate a draw. Se lo stato del contesto di rendering non è valido, il rendering non viene eseguito senza visualizzare messaggi. Quando la proprietà enableErrorChecking è true, questa funzione restituisce un valore dopo che i triangoli sono stati disegnati e genera eccezioni per qualsiasi errore di disegno o stato del contesto non valido.

Questo metodo potrebbe generare un'eccezione se il buffer con istanza viene ordinato in modo errato con SetVertexAt(). Con Direct 3D 9, ad esempio, i dati indicizzati della geometria e il numero di istanze da disegnare deve essere sempre impostato nel flusso zero con API SetStreamSourceFreq().

Ciò significa che il buffer di vertici creati con CreateVertexBufferForInstance() non deve essere inserito con il numero di indice minimo una volta impostato SetVertexBufferAt() come input per il programma shader di vertici. Il buffer di vertici generato mediante CreateVertexBuffer() deve essere inserito con un numero di indice minore rispetto a quello per CreateVertexBufferForInstance (). I dati geometrici devono essere inseriti in genere prima dei dati per-istanza con SetVertexBufferAt().

Parametri

indexBuffer:IndexBuffer3D — Una serie di indici di vertice che fa riferimento ai vertici da renderizzare.
 
numInstances:int — numero di istanze di cui eseguire il rendering.
 
firstIndex:int (default = 0) — L'indice del primo indice di vertice selezionato per il rendering. Il valore predefinito è 0.
 
numTriangles:int (default = -1) — Il numero di triangoli di cui eseguire il rendering. Ogni triangolo consuma tre indici. Passate -1 per disegnare tutti i triangoli nel buffer degli indici. Valore predefinito -1.


Genera
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell'hardware di rendering sottostante.
 
Error — Se questo metodo viene chiamato troppe volte tra le chiamate di present(). Il numero massimo di chiamate è 32.768.
 
Error — Richiede profilo esteso standard o superiore: se questo metodo è utilizzato quando il profilo richiesto è inferiore al profilo esteso standard.
 
Error — Se questo metodo viene chiamato con numInstances negative.

Gli errori seguenti vengono generati quando la proprietà enableErrorChecking è true:

 
Error — È necessario cancellare prima di disegnare: se il buffer non è stato svuotato prima dell'ultima chiamata present().
 
Error — Se non è stato impostato un oggetto Program3D valido.
 
Error — Nessun buffer di indice valido impostato: se non è stato impostato un oggetto IndexBuffer3D valido.
 
Error — Controllo di validità sui parametri non superato: quando il numero di triangoli da disegnare oppure la proprietà firstIndex superano i valori consentiti.
 
RangeError — Indici insufficienti in questo buffer: quando il buffer non contiene un numero di indici sufficiente per definire il numero di triangoli da disegnare.
 
Error — Campionatore associato a una texture che è a sua volta da renderizzare: quando la destinazione del rendering è una texture e tale texture è assegnata a un input di texture del programma di frammenti corrente.
 
Error — Campionatore associato a una texture non valida: è stata specificata una texture non valida come input del programma di frammenti corrente.
 
Error — Formato campionatore non corrispondente al formato della texture: quando la texture assegnata come input al programma di frammenti corrente ha un formato diverso da quello specificato per il registro del campionatore. Ad esempio, se una texture 2D è assegnata a un campionatore di texture cubiche.
 
Error — Campionatore associato a texture non definita: il programma di frammenti corrente accede a un registro texture che non è stato impostato (con setTextureAt()).
 
Error — La stessa texture richiede gli stessi parametri del campionatore: se una texture viene utilizzata per più di un registro campionatore, tutti i campionatori devono avere le stesse impostazioni. Ad esempio, non è possibile impostare un campionatore su clamp e un altro su wrap.
 
Error — Texture associata ma non utilizzata: una texture è impostata come input dello shader ma non è utilizzata.
 
Error — Flusso non utilizzato: un buffer di vertici è assegnato a un input di attributi di vertice ma il programma di vertici non fa riferimento al registro corrispondente.
 
Error — Flusso non valido: un oggetto VertexBuffer3D assegnato a un input di un programma di vertici non è un oggetto valido.
 
RangeError — Il flusso non ha abbastanza vertici: un buffer di vertici che fornisce dati per disegnare i triangoli specificati non ha dati sufficienti.
 
RangeError — Offset dei vertici del flusso fuori dei limiti: l'offset specificato in una chiamata setVertexBufferAt() è negativo o supera la fine del buffer.
 
Error — Flusso letto ma non impostato: un attributo di vertice utilizzato dal programma di vertici corrente non è impostato (con setVertexBufferAt()).
 
Error — Il flusso del buffer di vertici non contiene un numero sufficiente di elementi per le istanze: se un flusso del buffer di vertici non contiene abbastanza voci per il numero di istanze.
 
Error — Il flusso del buffer di vertici per le istanze non è impostato correttamente con il registro attributi di indice minimo: se al buffer di vertici generato usando CreateVertexBuffer() viene assegnato un numero di indice più grande di quello per il buffer di vertici generato utilizzando CreateVertexBufferForInstance().

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

La classe seguente disegna tre triangoli mediante la funzionalità delle istanze di disegno con chiamata di disegno singola invece che multipla.
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 seguente disegna tre triangoli mediante la funzionalità delle istanze di disegno con chiamata di disegno singola invece che multipla.
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

()metodo 
public function present():void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Visualizza il back buffer di rendering.

Una chiamata del metodo present() rende visibili i risultati di tutte le operazioni di rendering eseguite dall'ultima chiamata present() e inizia un nuovo ciclo di rendering. Dopo aver chiamato present, dovete chiamare clear() prima di eseguire una nuova chiamata drawTriangles(). In caso contrario, questa funzione svuota in modo alternato il buffer di rendering su giallo e verde oppure, se enableErrorChecking è stato impostato su true, viene generata un'eccezione.

Una chiamata present() inoltre ripristina la destinazione del rendering, analogamente a una chiamata setRenderToBackBuffer().


Genera
Error — È necessario cancellare prima di disegnare: se clear() non è stato chiamato prima della chiamata precedente di present(). (Due chiamate present() consecutive non sono consentite senza una chiamata clear() tra una e l'altra.)
 
Error — 3768: L’API Stage3D non può essere utilizzata durante l’esecuzione in background.

setBlendFactors

()metodo 
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Specifica i fattori utilizzati per fondere il colore di output di un'operazione di disegno con il colore esistente.

Il colore di output (di origine) del programma shader di pixel viene combinato con il colore esistente (di destinazione) di tale pixel, in base alla seguente formula:

result color = (source color * sourceFactor) + (destination color * destinationFactor)

Il colore di destinazione corrisponde al colore corrente nel buffer di rendering per tale pixel. Di conseguenza, è il risultato della chiamata clear() più recente e di eventuali chiamate drawTriangles() intervenute.

Utilizzate setBlendFactors() per impostare i fattori utilizzati per moltiplicare i colori di origine e di destinazione prima che vengano sommati insieme. I fattori di fusione predefiniti sono sourceFactor = Context3DBlendFactor.ONE e destinationFactor = Context3DBlendFactor.ZERO, che porta alla sovrascrittura del colore di destinazione da parte del colore di origine (in altre parole, non avviene alcuna fusione dei due colori). Per una normale fusione alfa, usate sourceFactor = Context3DBlendFactor.SOURCE_ALPHA e destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA.

Utilizzate le costanti definite nella classe Context3DBlendFactor per impostare i parametri di questa funzione.

Parametri

sourceFactor:String — Il fattore per cui moltiplicare il colore di origine. L'impostazione predefinita è Context3DBlendFactor.ONE.
 
destinationFactor:String — Il fattore per cui moltiplicare il colore di destinazione. L'impostazione predefinita è Context3DBlendFactor.ZERO.


Genera
Error — Enumerazione non valida: se sourceFactor o destinationFactor non è uno dei valori riconosciuti, definiti nella classe Context3DBlendFactor.

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

La classe seguente classe illustra i vari fattori di fusione. L'esempio disegna quattro rettangoli colorati differenti sul buffer di rendering. Questa serie di rettangoli è la "destinazione" della fusione. Quindi, vengono impostati i metodi di fusione di origine e di destinazione e viene disegnato un rettangolo più grande, l'"origine" della fusione. Usate i tasti "1" e "2" per scorrere i metodi di fusione di origine. Usate i tasti "3" e "4" per scorrere i metodi di fusione di destinazione.
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

()metodo 
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta la maschera utilizzata per la scrittura dei colori nel buffer di rendering.

Solo i componenti dei colori per i quali il parametro della maschera colore corrispondente è true vengono aggiornati quando un colore viene scritto nel buffer di rendering. Ad esempio, se effettuate una chiamata a setColorMask( true, false, false, false ), solo il componente rosso di un colore viene scritto nel buffer, fino a quando la maschera colore non viene nuovamente modificata. La maschera colore non influenza il comportamento del metodo clear().

Parametri

red:Boolean — Impostate false per bloccare le modifiche al canale rosso.
 
green:Boolean — Impostate false per bloccare le modifiche al canale verde.
 
blue:Boolean — Impostate false per bloccare le modifiche al canale blu.
 
alpha:Boolean — Impostate false per bloccare le modifiche al canale alfa.


Esempio  ( Come utilizzare questo esempio )

L'esempio seguente illustra l'effetto dell'impostazione della maschera colore. L'esempio disegna due triangoli dello stesso colore. Il triangolo superiore viene disegnato prima dell'impostazione della maschera e quindi viene renderizzato in bianco. Il triangolo inferiore viene disegnato dopo che tutti i canali, tranne il rosso, sono stati mascherati. Poiché solo il canale del rosso può essere aggiornato, il triangolo bianco viene renderizzato in rosso.
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

()metodo 
public function setCulling(triangleFaceToCull:String):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta la modalità di culling dei triangoli.

I triangoli possono essere esclusi dalla scena in una fase iniziale del processo di rendering in base al loro orientamento rispetto al piano di visualizzazione. Per assicurare un culling corretto, specificate l'ordine dei vertici in modo coerente (in senso orario o antiorario) così come osservato dall'esterno del modello.

Parametri

triangleFaceToCull:String — La modalità di culling. Utilizzate una delle costanti definite nella classe Context3DTriangleFace.


Genera
Error — Enumerazione non valida: quando triangleFaceToCull non è uno dei valori definiti nella classe Context3DTriangleFace.

Elementi API correlati

setDepthTest

()metodo 
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta il tipo di confronto utilizzato per il test di profondità.

La profondità di output del pixel di origine dal programma shader di pixel viene confrontata con il valore corrente nel buffer della profondità. Se il confronto risulta false, il pixel di origine viene scartato. Se risulta true, il pixel di origine viene elaborato nel passaggio successivo della pipeline di rendering, ovvero il test di stencil. Inoltre, il buffer della profondità viene aggiornato con la profondità del pixel di origine, fintanto che il parametro depthMask è impostato su true.

Imposta i test utilizzati per confrontare i valori di profondità dei pixel di origine e di destinazione. Il pixel di origine viene composto con il pixel di destinazione quando il confronto è true. L'operatore di confronto viene applicato come operatore infix tra i valori dei pixel di origine e di destinazione, in tale ordine.

Parametri

depthMask:Boolean — Il valore di profondità di destinazione sarà aggiornato dal pixel di origine se è true.
 
passCompareMode:String — L'operazione di test di confronto delle profondità. Uno dei valori di Context3DCompareMode.

Elementi API correlati

    setFillMode

()metodo 
public function setFillMode(fillMode:String):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: AIR 16

Imposta la modalità di riempimento usata per il rendering. L'interfaccia è disponibile solo in AIR Desktop.

Parametri

fillMode:String — se il valore è WIREFRAME, l'oggetto viene visualizzato in una trama di linee. se il valore è SOLID, l'oggetto viene visualizzato come poligoni in tinta unita con ombra.

Elementi API correlati

setProgram

()metodo 
public function setProgram(program:Program3D):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta i programmi shader di vertici e di frammenti da utilizzare per il successivo rendering.

Parametri

program:Program3D — L'oggetto Program3D che rappresenta i programmi di vertici e di frammenti da utilizzare.

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

Questo esempio illustra come creare, caricare e attivare una coppia di programmi di vertici e pixel in un contesto di rendering. Notate che l'oggetto, renderContext, è un'istanza della classe Context3D. I programmi contenuti nell'esempio sono scritti nel linguaggio AGAL (Adobe Graphics Assembly Language).
//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

()metodo 
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11.1, AIR 3.1

Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto ByteArray.

Imposta costanti alle quali è possibile accedere dal programma di vertici o di frammenti.

Parametri

programType:String — Uno dei valori Context3DTriangleFace.
 
firstRegister:int — L'indice della prima costante di programma shader da impostare.
 
numRegisters:int — Il numero di registri da impostare. Ogni registro viene letto come quattro valori a virgola mobile.
 
data:ByteArray — L'oggetto ByteArray di origine.
 
byteArrayOffset:uint — Un offset nel ByteArray da leggere.


Genera
TypeError — kNullPointerError quando data è null.
 
RangeError — kConstantRegisterOutOfBounds quando si tenta di impostare più del numero massimo di costanti shader.
 
RangeError — kBadInputSize se byteArrayOffset è maggiore o uguale alla lunghezza di data o no. di elementi in data - byteArrayOffset è inferiore a numRegisters*16

Elementi API correlati

setProgramConstantsFromMatrix

()metodo 
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta le costanti da impiegare nei programmi shader che utilizzano i valori memorizzati in un oggetto Matrix3D.

Utilizzate questa funzione per passare una matrice a un programma shader. La funzione imposta 4 registri di costanti utilizzati dal programma di vertici o di frammenti. La matrice viene assegnata ai registri riga per riga. Il primo registro di costanti è assegnato alla prima riga della matrice. È possibile impostare 128 registri per un programma di vertici e 28 per un programma di frammenti.

Parametri

programType:String — Il tipo di programma shader, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT.
 
firstRegister:int — L'indice del primo registro costanti da impostare. Poiché un oggetto Matrix3D ha 16 valori, vengono impostati quattro registri.
 
matrix:Matrix3D — La matrice che contiene i valori delle costanti.
 
transposedMatrix:Boolean (default = false) — Se è true, le voci della matrice vengono copiate nei registri in un ordine trasposto. Il valore predefinito è false.


Genera
TypeError — Puntatore nullo: quando matrix è null.
 
RangeError — Registro costanti fuori dei limiti: quando si tenta di impostare un numero di registri costanti shader superiore al massimo consentito.

Altre informazioni

Elementi API correlati

setProgramConstantsFromVector

()metodo 
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta gli input di costanti per i programmi shader.

Imposta un array di costanti alle quali è possibile accedere da un programma di vertici o di frammenti. L'accesso alle costanti impostate in Program3D avviene nei programmi shader tramite registri di costanti. Ogni registro di costanti è composto da 4 valori a virgola mobile (x, y, z, w). Pertanto ogni registro richiede 4 voci nell'oggetto Vector di dati. Il numero di registri che è possibile impostare per il programma di vertici e il programma di frammenti dipende da Context3DProfile.

Parametri

programType:String — Il tipo di programma shader, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT.
 
firstRegister:int — L'indice del primo registro costanti da impostare.
 
data:Vector.<Number> — I valori delle costanti a virgola mobile. Devono essere presenti almeno quattro elementi numRegisters in data.
 
numRegisters:int (default = -1) — Il numero di costanti da impostare. Specificate -1, il valore predefinito, per impostare un numero di registri sufficiente per utilizzare tutti i dati disponibili.


Genera
TypeError — Puntatore nullo: quando matrix è null.
 
RangeError — Registro costanti fuori dei limiti: quando si tenta di impostare un numero di registri costanti shader superiore al massimo consentito.
 
RangeError — Dimensione di input errata: quando il numero di elementi in data è inferiore a numRegisters*4

Altre informazioni

Elementi API correlati

setRenderToBackBuffer

()metodo 
public function setRenderToBackBuffer():void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta il back buffer di rendering come destinazione di rendering. Le successive chiamate dei metodi drawTriangles() e clear() determinano l'aggiornamento del back buffer. Utilizzate questo metodo per riprendere il normale rendering dopo aver usato il metodo setRenderToTexture().

setRenderToTexture

()metodo 
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta la texture specificata come destinazione di rendering.

Le successive chiamate dei metodi drawTriangles() e clear() determinano l'aggiornamento della texture specificata anziché del back buffer. Le mip map vengono create automaticamente. Utilizzate setRenderToBackBuffer() per riprendere il normale rendering sul back buffer.

Non è necessario cancellare prima di disegnare. Se non si effettuano operazioni di cancellazione, il contenuto di rendering viene mantenuto. Non verranno cancellati nemmeno il buffer della profondità e il buffer di stencil. La cancellazione viene tuttavia forzata al primo disegno. Una chiamata present() reimposta la destinazione sul back buffer.

Parametri

texture:flash.display3D.textures:TextureBase — La texture di destinazione su cui eseguire il rendering. Impostate questa proprietà su null per riprendere il rendering sul back buffer (anche setRenderToBackBuffer() e present reimpostano la destinazione sul back buffer).
 
enableDepthAndStencil:Boolean (default = false) — Se è true, sono disponibili i test di profondità e stencil. Se è false, ogni stato di profondità e di stencil viene ignorato per le successive operazioni di disegno.
 
antiAlias:int (default = 0) — La qualità dell'antialiasing. Utilizzate 0 per disattivare l'antialiasing; valori maggiori migliorano la qualità dell'antialiasing ma richiedono ulteriori calcoli. Il valore viene ignorato dalla piattaforma mobile e dal contesto di rendering software.
 
surfaceSelector:int (default = 0) — Specifica quale elemento della texture deve essere aggiornato. Gli oggetti texture hanno una sola superficie, quindi dovete specificare 0, il valore predefinito. Gli oggetti CubeTexture hanno sei superfici, quindi potete specificare un numero intero da 0 a 5.
 
colorOutputIndex:int (default = 0) — Il registro del colore di output. Deve essere 0 per la modalità vincolata o linea di base. In caso contrario specifica il registro del colore di output.


Genera
ArgumentError — Per un parametro surfaceSelector non corrispondente. Il valore deve essere 0 per le texture 2D e 0...5 per le mappe cubiche.
 
ArgumentError texture non è derivato dalla classe base TextureBase (classi Texture o CubeTexture).
 
ArgumentError colorOutputIndex deve essere un intero tra 0 e 3.
 
ArgumentError — questa chiamata richiede un Context3D creato con il profilo standard o superiore.

Elementi API correlati

setSamplerStateAt

()metodo 
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11.6, AIR 3.6

Sostituisce manualmente lo stato del campionatore di texture.

Lo stato del campionamento di texture è impostato sull’ora di chiamata di setProgram. Tuttavia, potete eseguire l’override dello stato del campionatore di texture con questa funzione. Se non desiderate che il programma modifichi lo stato del campionatore, impostate il bit ignoresampler in AGAL e utilizzate questa funzione.

Parametri

sampler:int — sampler Il registro campionatore da utilizzare. Crea una mappatura con il registro campionatore in AGAL.
 
wrap:String — Modalità wrapping. Definita in Context3DWrapMode. Il valore predefinito è repeat.
 
filter:String — Modalità di filtraggio texture. Definita in Context3DTextureFilter. Il valore predefinito è nearest.
 
mipfilter:String — Filtro mip map. Definito in Context3DMipFilter. Il valore predefinito è none.


Genera
Error — Campionatore fuori intervallo
 
Error — wrap, filter, mipfilter bad enum
 
Error — Oggetto rimosso: se questo oggetto Context3D è stato rimosso da una chiamata dispose() o a seguito della perdita dell’hardware di rendering sottostante.

Elementi API correlati

setScissorRectangle

()metodo 
public function setScissorRectangle(rectangle:Rectangle):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta un rettangolo scissor, che è un tipo di maschera di disegno. Il renderer disegna soltanto l'area interna al rettangolo scissor. Il scissoring non ha effetto sulle operazioni di cancellazione.

Passate null per disattivare lo scissoring.

Parametri

rectangle:Rectangle — Il rettangolo nel quale disegnare. Specificate la posizione del rettangolo e le dimensioni in pixel. L'origine del sistema di coordinate è l'angolo superiore sinistro del riquadro di visualizzazione; i valori positivi determinano l'incremento verso il basso e verso destra (come nel normale sistema di coordinate della visualizzazione in Flash).


Esempio  ( Come utilizzare questo esempio )

La classe seguente disegna due triangoli in un riquadro di visualizzazione di 640x480 pixel sullo stage. I triangoli condividono un vertice, situato nel punto di origine (0,0,0).

I triangoli vengono definiti utilizzando il buffer di vertici e il buffer di indici. Il buffer di vertici contiene le informazioni sulla posizione e sul colore per ogni vertice del triangolo. Il buffer di indici contiene gli indici del buffer di vertici. Tre indici definiscono un triangolo. Un triangolo costituito ad esempio dai primi tre punti del buffer di vertici viene elencato come 0,1,2 nel buffer di indici.

In questo semplice esempio non vengono eseguite trasformazioni 3D. Vengono visualizzati solo gli oggetti all'interno dell'area di visualizzazione canonica (un volume cubico di 2x2x2 centrato nell'origine). Tuttavia, per il rendering di una tipica scena 3D, dovete progettare gli oggetti da riprodurre in questa area di visualizzazione utilizzando una proiezione ortografica o prospettica.

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

()metodo 
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta l'operazione e la modalità stencil.

Un valore di riferimento stencil a 8 bit può essere associato a ciascuna chiamata di disegno. Durante il rendering, il valore di riferimento può essere testato con i valori memorizzati in precedenza nel buffer dei fotogrammi. Il risultato del test può controllare l'azione di disegno e determinare se o come il valore di stencil memorizzato viene aggiornato. Inoltre, i test di profondità controllano se il test di stencil viene eseguito. Un test di profondità fallito può anche essere utilizzato per controllare l'azione eseguita sul buffer di stencil.

Nel processo di elaborazione dei pixel, il test di profondità viene eseguito per primo. Se il test di profondità fallisce, è possibile eseguire un'azione di aggiornamento del buffer di stencil, ma non è possibile effettuare nessuna ulteriore valutazione del buffer di stencil. Se il test di profondità ha esito positivo, viene eseguito il test di stencil. Azioni alternative possono essere eseguite a seconda del risultato del test di stencil.

Il valore di riferimento stencil viene impostato utilizzando setStencilReferenceValue().

Parametri

triangleFace:String (default = "frontAndBack") — Gli orientamenti del triangolo consentiti per contribuire all'operazione stencil. Uno dei valori Context3DTriangleFace.
 
compareMode:String (default = "always") — L'operatore di test utilizzato per confrontare il valore di riferimento stencil corrente e il valore di stencil del pixel di destinazione. L'aggiornamento del colore e della profondità del pixel di destinazione viene eseguito quando il risultato del confronto è true. Le azioni di stencil vengono eseguite nel modo richiesto nei parametri di azione seguenti. L'operatore di confronto viene applicato come operatore infix tra i valori di riferimento corrente e di destinazione, in tale ordine (in pseudocodice: if stencilReference OPERATOR stencilbuffer then pass). Utilizzate una delle costanti definite nella classe Context3DCompareMode.
 
actionOnBothPass:String (default = "keep") — L'azione da eseguire quando sia il confronto di profondità che il confronto di stencil hanno esito positivo. Utilizzate una delle costanti definite nella classe Context3DStencilAction.
 
actionOnDepthFail:String (default = "keep") — L'azione da eseguire quando i confronti di profondità hanno esito negativo. Utilizzate una delle costanti definite nella classe Context3DStencilAction.
 
actionOnDepthPassStencilFail:String (default = "keep") — L'azione da eseguire quando i confronti di profondità hanno esito positivo e il confronto di stencil ha esito negativo. Utilizzate una delle costanti definite nella classe Context3DStencilAction.


Genera
Error — Enumerazione non valida: quando triangleFace non è uno dei valori definiti nella classe Context3DTriangleFace.
 
Error — Enumerazione non valida: quando compareMode non è uno dei valori definiti nella classe Context3DCompareMode.
 
Error — Enumerazione non valida: quando actionOnBothPass, actionOnDepthFail o actionOnDepthPassStencilFail non è uno dei valori definiti nella classe Context3DStencilAction.

Elementi API correlati


Esempio  ( Come utilizzare questo esempio )

La classe seguente illustra come disegnare uno stencil e usarlo come maschera per le operazioni di disegno successive. Nell'esempio viene eseguita la procedura seguente:
  • Azzera il buffer di stencil.
  • Imposta l'azione stencil da incrementare quando il test stencil viene superato.
  • Impostate il valore di riferimento stencil su 0.
  • Disegna la maschera triangolare. Ovunque venga disegnato il triangolo, il test stencil viene superato perché il buffer di stencil è stato azzerato e il valore di riferimento è 0. Di conseguenza, il buffer di stencil viene incrementato a 1 dove viene disegnata la maschera del triangolo.
  • Cambia l'azione stencil da mantenere in modo tale che le operazioni di disegno successive non modifichino il buffer di stencil.
  • Disegna un rettangolo a schermo intero (multicolore). Poiché il valore di riferimento stencil è ancora 0, il test stencil fallisce nell'area mascherata. Quindi, il rettangolo viene disegnato ovunque tranne che nell'area mascherata.
  • Cambia il valore di riferimento stencil in 1.
  • Disegna un altro rettangolo a schermo intero (rosso). Ora il test stencil fallisce ovunque tranne che nell'area mascherata, che è stata incrementata a 1. Così il rettangolo viene disegnato solo nell'area mascherata.

Passate il mouse sopra l'esempio per vedere i passaggi principali in sequenza.

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

()metodo 
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Imposta il valore di confronto stencil utilizzato per il test di stencil.

Vengono utilizzati solo gli 8 bit inferiori del valore di riferimento. Anche il valore del buffer di stencil è lungo 8 bit. Utilizzate readMask e writeMask per usare il buffer di stencil come campo bit.

Parametri

referenceValue:uint — Un valore di riferimento a 8 bit utilizzato nei testi di confronto dei valori di riferimento.
 
readMask:uint (default = 255) — Una maschera da 8 bit da applicare sia al valore del buffer di stencil corrente che al valore di riferimento prima del confronto.
 
writeMask:uint (default = 255) — Una maschera da 8 bit applicata al valore di riferimento prima di aggiornare il buffer di stencil.

Elementi API correlati

setTextureAt

()metodo 
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Specifica la texture da utilizzare per un registro di input texture di un programma di frammenti.

Un programma di frammenti è in grado di leggere informazioni da un numero massimo di otto oggetti texture. Utilizzate questa funzione per assegnare un oggetto Texture o CubeTexture a uno dei registri campionatore utilizzati dal programma di frammenti.

Nota: se cambiate il programma di frammenti attivo (con setProgram) con uno shader che utilizza meno texture, impostate i registri inutilizzati su null:

         setTextureAt( 7, null );
         

Parametri

sampler:int — L'indice del registro campionatore, un valore da 0 a 7.
 
texture:flash.display3D.textures:TextureBase — L'oggetto texture da rendere disponibile: un'istanza Texture o CubeTexture.

Altre informazioni

Elementi API correlati

Texture
CubeTexture

setVertexBufferAt

()metodo 
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void

Versione linguaggio: ActionScript 3.0
Versioni runtime: Flash Player 11, AIR 3

Specifica quali componenti dati di vertice corrispondono a un singolo input di programma shader di vertici.

Utilizzate il metodo setVertexBufferAt per identificare quali componenti dei dati definiti per ciascun vertice di un buffer VertexBuffer3D appartengono a quali input del programma di vertici. Lo sviluppatore del programma di vertici determina quanti dati sono necessari per ciascun vertice. Tali dati vengono mappati da uno o più flussi VertexBuffer3D ai registri attributi del programma shader di vertici.

L'unità di dati più piccola consumata dallo shader di vertici è un dato di 32 bit. Gli offset nel flusso di vertici vengono specificati sotto forma di multipli di 32 bit.

Ad esempio, un programmatore potrebbe definire ciascun vertice con i dati seguenti:
position:  x    float32
           y    float32
           z    float32
color:     r    unsigned byte
           g    unsigned byte
           b    unsigned byte
           a    unsigned byte
Ipotizzando che il vertice sia stato definito in un unico oggetto VertexBuffer3D denominato buffer, verrebbe assegnato a uno shader di vertici con il codice seguente:
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

Parametri

index:int — L'indice del registro attributi nello shader di vertici (da 0 a 7).
 
buffer:VertexBuffer3D — Il buffer che contiene i dati di vertice di origine da fornire allo shader di vertici.
 
bufferOffset:int (default = 0) — Un offset dall'inizio dei dati per un singolo vertice in corrispondenza del quale deve iniziare la lettura di questo attributo. Nell'esempio riportato sopra, i dati di posizione hanno un offset pari a 0 perché si tratta del primo attributo; il colore ha un offset 3 perché l'attributo color segue i tre valori di posizione a 32 bit. L'offset viene specificato in unità da 32 bit.
 
format:String (default = "float4") — Un valore della classe Context3DVertexBufferFormat che specifica il tipo di dati di questo attributo.


Genera
Error — Enumerazione non valida: quando il formato non è uno dei valori definiti nella classe Context3DVertexBufferFormat.
 
RangeError — Registro attributi fuori dei limiti: quando il parametro index è fuori dell'intervallo da 0 a 7. (Uno shader può utilizzare un massimo di otto registri attributi di vertice.)

Altre informazioni

Elementi API correlati

Context3DExample.as

L'esempio seguente disegna un cubo rotante utilizzando una proiezione prospettica.
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 ]Perché in inglese?
Il contenuto della Guida di riferimento di ActionScript 3.0 appare in inglese

Non tutte le parti della Guida di riferimento di ActionScript 3.0 sono tradotte in tutte le lingue. Quando un elemento del linguaggio non è tradotto, viene riportato in inglese. Ad esempio, la classe ga.controls.HelpBox non è tradotta in nessuna lingua. Pertanto, nella versione italiana della guida di riferimento, la descrizione della classe ga.controls.HelpBox è riportata in inglese.