Referencia de ActionScript® 3.0 para la plataforma de Adobe® Flash®
Inicio  |  Ocultar lista de paquetes y clases |  Paquetes  |  Clases  |  Novedades  |  Índice  |  Apéndices  |  ¿Por qué hay texto en inglés?
Filtros: AIR 30.0 y versiones anteriores, Flash Player 30.0 y versiones anteriores, Flash Lite 4
Flex 4.6 y versiones anteriores, Flash Pro CS6 y versiones anteriores
Ocultar filtros
flash.display3D 

Context3D  - AS3

Paquetesx

Nivel superior
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

Elementos del lenguaje

Constantes globales
Funciones globales
Operadores
Sentencias, palabras clave y directivas
Tipos especiales

Apéndices

Novedades
Errores del compilador
Advertencias del compilador
Errores en tiempo de ejecución
Migración a ActionScript 3
Conjuntos de caracteres admitidos
Solo etiquetas MXML
Elementos Motion XML
Etiquetas de texto temporizado
Lista de elementos desfasados
Constantes de implementación de accesibilidad
Cómo utilizar ejemplos de ActionScript
Avisos legales
Paqueteflash.display3D
Clasepublic final class Context3D
HerenciaContext3D Inheritance EventDispatcher Inheritance Object

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

La clase Context3D proporciona un contexto para el procesamiento de gráficos definidos geométricamente.

Un contexto de procesamiento incluye una superficie de dibujo y sus recursos y estado asociados. Cuando sea posible, el contexto del procesamiento utiliza el unidad de procesamiento de gráficos por hardware (GPU). De lo contrario, el contexto de procesamiento utiliza el software. (Si el procesamiento a través Context3D no se admite en una plataforma, la propiedad stage3Ds del objeto Stage contiene una lista vacía.)

El contexto de procesamiento de Context3D es un pipeline programable muy similar a OpenGL ES 2, pero resumido para que sea compatible con un rango de interfaces de hardware y GPU. Aunque se ha diseñado para gráficos en 3D, el pipeline de procesamiento no rige la tridimensionalidad del procesamiento. Por consiguiente, puede crear un procesador en 2D proporcionando el vértice apropiado y los programas de fragmentos de píxeles. Tanto en el caso del 3D como del 2D, el único valor simple geométrico admitido es el triángulo.

Obtiene una instancia de la clase Context3D llamando al método requestContext3D() de un objeto Stage3D. Un número limitado de Context3D objetos puede existir en cada escenario; uno para cada Stage3D en la lista Stage.stage3Ds. Cuando se crea el contexto, el objeto Stage3D distribuye un evento context3DCreate. Un contexto de procesamiento puede ser destruido y creado de nuevo en cualquier momento, por ejemplo, cuando otra aplicación que usa la GPU queda seleccionada. El código debe anticipar la recepción de varios eventos context3DCreate. Coloque el área de procesamiento en el escenario con las propiedades x e y de la instancia de Stage3D asociada.

Para procesar y mostrar una escena (después de recibir un objeto Context3D), los pasos habituales son los siguientes:

  1. Configurar los atributos del búfer de visualización principal llamando a configureBackBuffer().
  2. Crear e inicializar los recursos de procesamiento, entre los que se incluyen:
    • Búfers de vértice y de índice que definen la geometría de la escena
    • Programas de vértices y de píxeles (sombreados) para procesar la escena
    • Texturas
  3. Procesar un fotograma:
    • Establezca el estado de procesamiento como adecuado para un objeto o colección de objetos en la escena.
    • Llame al método drawTriangles() para procesar un conjunto de triángulos.
    • Cambie el estado de procesamiento para el siguiente grupo de los objetos.
    • Llame a drawTriangles() para dibujar los triángulos que definen los objetos.
    • Repita el procedimiento hasta que la escena se procese por completo.
    • Llame al present() para visualizar la escena procesada en el escenario.

Se aplican los límites siguientes al procesamiento:

Límites de recursos:

RecursoNúmero permitidoMemoria total
Búfers de vértices 4096256 MB
Búfers de índices 4096128 MB
Programas 409616 MB
Texturas 4096128 MB
Texturas de cubo 4096256 MB

Límites AGAL: 200 códigos de operación por programa.

Límites de llamada a dibujos: 32.768 llamadas a drawTriangles() por cada llamada a present().

Se aplican los límites siguientes a las texturas:

Límites de textura para AIR de 32 bits:

TexturaTamaño máximoTotal de memoria de GPU
Textura normal (por debajo de la línea de base ampliada) 2048 x 2048512 MB
Textura normal (línea de base ampliada y anterior) 4096 x 4096512 MB
Textura rectangular (por debajo de la línea de base ampliada) 2048 x 2048512 MB
Textura rectangular (línea de base ampliada y anterior) 4096 x 4096512 MB
Textura cúbica 1024 x 1024256 MB

Límites de textura para AIR de 64 bits (escritorio):

TexturaTamaño máximoTotal de memoria de GPU
Textura normal (por debajo de la línea de base ampliada) 2048 x 2048512 MB
Textura normal (línea de base ampliada a estándar) 4096 x 4096512 MB
Textura normal (estándar ampliada y superior) 4096 x 40962048 MB
Textura rectangular (por debajo de la línea de base ampliada) 2048 x 2048512 MB
Textura rectangular (línea de base ampliada a estándar) 4096 x 4096512 MB
Textura rectangular (estándar ampliada y superior) 4096 x 40962048 MB
Textura cúbica 1024 x 1024256 MB

512 MB es el límite absoluto para texturas, incluida la memoria de textura necesaria para mipmaps. Sin embargo, para texturas cúbicas, el límite de memoria es de 256 MB.

No se pueden crear objetos Context3D con el constructor Context3D. Se construye y está disponible como una propiedad de una instancia de Stage3D. La clase Context3D puede utilizarse tanto en plataformas de escritorio como para móviles y tanto si se ejecuta en Flash Player como en AIR.

Ver los ejemplos

Elementos de API relacionados



Propiedades públicas
 PropiedadDefinido por
  backBufferHeight : int
[solo lectura] Especifica la altura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer().
Context3D
  backBufferWidth : int
[solo lectura] Especifica la anchura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer().
Context3D
 Inheritedconstructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada.
Object
  driverInfo : String
[solo lectura] El tipo de controlador de biblioteca de gráficos utilizado por este contexto de procesamiento.
Context3D
  enableErrorChecking : Boolean
Especifica si los errores encontrados por el procesador se comunican a la aplicación.
Context3D
  maxBackBufferHeight : int
Especifica la altura máxima del búfer posterior.
Context3D
  maxBackBufferWidth : int
Especifica la anchura máxima del búfer posterior.
Context3D
  profile : String
[solo lectura] El perfil de compatibilidad de característica usado por este objeto Context3D.
Context3D
  supportsVideoTexture : Boolean
[estática] [solo lectura] Indica si Context3D admite textura de vídeo.
Context3D
  totalGPUMemory : Number
[solo lectura] Devuelve el total de memoria de GPU asignada por las estructuras de datos de Stage3D de una aplicación. Siempre que se crea un objeto de recurso de GPU, la memoria utilizada se almacena en Context3D.
Context3D
Métodos públicos
 MétodoDefinido por
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un objeto de detector de eventos con un objeto EventDispatcher, de modo que el detector reciba la notificación de 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
Borra el color, la profundidad y búfer de esténcil asociado a este objeto Context3D y los rellena con los valores especificados.
Context3D
  
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Define las dimensiones del visor y otros atributos del búfer de procesamiento.
Context3D
  
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Crea un objeto CubeTexture.
Context3D
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Crea un objeto IndexBuffer3D.
Context3D
  
Crea un objeto Program3D.
Context3D
  
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Crea un objeto Texture rectangular.
Context3D
  
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Crea un objeto Texture.
Context3D
  
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un objeto VertexBuffer3D.
Context3D
  
    createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Crea un objeto VertexBuffer3D para datos de las instancias.
Context3D
  
Crea un objeto VideoTexture.
Context3D
 Inherited
Distribuye un evento en el flujo del evento.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Libera todos los recursos y el almacenamiento interno asociado a este Context3D.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Dibuja el búfer de procesamiento actual en un mapa de bits.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Represente los triángulos especificados utilizando los búfers actuales y el estado de este objeto Context3D.
Context3D
  
    drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Represente los triángulos instanciados especificados utilizando los búferes actuales y el estado de este objeto Context3D.
Context3D
 Inherited
Comprueba si el objeto EventDispatcher tiene detectores registrados para un tipo concreto de evento.
EventDispatcher
 Inherited
Indica si un objeto tiene definida una propiedad especificada.
Object
 Inherited
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro.
Object
  
Muestra la parte posterior del búfer de procesamiento.
Context3D
 Inherited
Indica si existe la propiedad especificada y si es enumerable.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Elimina un detector del objeto EventDispatcher.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Especifica los factores utilizado para mezclar el color de salida de una operación de dibujo con el color existente.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Define la máscara utilizada al escribir colores en el búfer de procesamiento.
Context3D
  
setCulling(triangleFaceToCull:String):void
Establece el modo "culling" de triángulo.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Define el tipo de comparación utilizada para pruebas de profundidad.
Context3D
  
    setFillMode(fillMode:String):void
El modo definido de relleno utilizado para el procesamiento.
Context3D
  
Define programas de vértices y fragmentos para usar en posteriores procesamientos.
Context3D
  
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Establece constantes para su uso en programas de sombreado con los valores almacenados en un ByteArray.
Context3D
  
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Establece constantes para su uso en programas de sombreado con los valores almacenados en una Matrix3D.
Context3D
  
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Define las entradas constantes para programas de sombreado.
Context3D
 Inherited
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle.
Object
  
Define la parte posterior del búfer de procesamiento como destino del procesamiento.
Context3D
  
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Establece la textura especificada como destino de procesamiento.
Context3D
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Sustituir manualmente el estado del muestreador de texturas.
Context3D
  
Define un rectángulo tijera, similar a una máscara de dibujo.
Context3D
  
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Establece el modo y el funcionamiento del esténcil.
Context3D
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Define el valor de comparación del esténcil utilizado para comprobar el esténcil.
Context3D
  
Especifica la textura que se utiliza para un registro de entrada de texturas de un programa de fragmentos.
Context3D
  
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Especifica qué componentes de datos de vértices corresponden a una sola entrada del programa de sombreado de vértices.
Context3D
 Inherited
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional.
Object
 Inherited
Devuelve la representación de cadena del objeto especificado.
Object
 Inherited
Devuelve el valor simple del objeto especificado.
Object
 Inherited
Comprueba si hay registrado un detector de eventos con este objeto EventDispatcher o con cualquiera de sus ascendientes para el tipo de evento concreto.
EventDispatcher
Eventos
 Evento Resumen Definido por
 Inherited[evento broadcast] Se distribuye cuando Flash Player o AIR pasan a estar activos.EventDispatcher
 Inherited[evento broadcast] Se distribuye cuando Flash Player o de AIR pasan a estar inactivos.EventDispatcher
Información sobre propiedades

backBufferHeight

propiedad
backBufferHeight:int  [solo lectura]

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 15, AIR 15

Especifica la altura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer(). La altura puede modificarse cuando el factor de zoom del navegador cambia si wantsBestResolutionOnBrowserZoom se establece en true en la última llamada correcta al método configureBackBuffer(). El cambio de altura se puede detectar registrando un detector de eventos para el evento de cambio de zoom del navegador.



Implementación
    public function get backBufferHeight():int

Elementos de API relacionados

backBufferWidth

propiedad 
backBufferWidth:int  [solo lectura]

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 15, AIR 15

Especifica la anchura del búfer posterior, que se puede modificar mediante una llamada correcta al método configureBackBuffer(). La anchura puede modificarse cuando el factor de zoom del navegador cambia si wantsBestResolutionOnBrowserZoom se establece en true en la última llamada correcta al método configureBackBuffer(). El cambio de anchura se puede detectar registrando un detector de eventos para el evento de cambio de zoom del navegador.



Implementación
    public function get backBufferWidth():int

Elementos de API relacionados

driverInfo

propiedad 
driverInfo:String  [solo lectura]

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

El tipo de controlador de biblioteca de gráficos utilizado por este contexto de procesamiento. Indica si la representación utiliza un programa de software, un controlador DirectX o un controlador OpenGL. También indica si ha fallado el procesamiento por hardware. Si falla el procesamiento por hardware, Flash Player utiliza el procesamiento por software para Stage3D y driverInfo contiene uno de los siguientes valores:

  • "Software Hw_disabled=userDisabled": la casilla de verificación Habilitar aceleración de hardware de la interfaz de configuración de Adobe Flash Player no está marcada.
  • "Software Hw_disabled=oldDriver": hay problemas conocidos con el hardware del controlador de gráficos. Actualizar el controlador gráfico puede solucionar este problema.
  • "Software Hw_disabled=unavailable": hay problemas conocidos con el hardware del controlador de gráficos o errores de inicialización.
  • "Software Hw_disabled=explicit": el contenido ha solicitado explícitamente procesamiento por software a través de requestContext3D.
  • "Software Hw_disabled=domainMemory": el contenido utiliza domainMemory, que requiere una licencia cuando se utiliza con procesamiento por hardware Stage3D. Visite adobe.com/go/fpl_es.



Implementación
    public function get driverInfo():String

enableErrorChecking

propiedad 
enableErrorChecking:Boolean

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Especifica si los errores encontrados por el procesador se comunican a la aplicación.

Cuando enableErrorChecking es true, los métodos clear() y drawTriangles() son sincrónicos y pueden emitir errores. Cuando enableErrorChecking es false (valor predeterminado), los métodos clear() y drawTriangles() son asíncronos y no se comunican los errores. Activar la comprobación de errores reduce el rendimiento del procesamiento. Sólo se debe habilitar la comprobación de errores en el proceso de depuración.



Implementación
    public function get enableErrorChecking():Boolean
    public function set enableErrorChecking(value:Boolean):void

Elementos de API relacionados

maxBackBufferHeight

propiedad 
maxBackBufferHeight:int

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 15, AIR 15

Especifica la altura máxima del búfer posterior. El valor inicial es el límite del sistema en la plataforma. La propiedad se puede establecer en un valor inferior o igual a, pero no mayor que, el límite del sistema. La propiedad se puede establecer en un valor mayor o igual que, pero no más pequeño que, el límite mínimo. El límite mínimo es un valor constante, 32, cuando el búfer posterior no se ha configurado. El límite mínimo es el valor del parámetro de altura en la última llamada correcta al método configureBackBuffer() después que se configura el búfer posterior.



Implementación
    public function get maxBackBufferHeight():int
    public function set maxBackBufferHeight(value:int):void

maxBackBufferWidth

propiedad 
maxBackBufferWidth:int

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 15, AIR 15

Especifica la anchura máxima del búfer posterior. El valor inicial es el límite del sistema en la plataforma. La propiedad se puede establecer en un valor inferior o igual a, pero no mayor que, el límite del sistema. La propiedad se puede establecer en un valor mayor o igual que, pero no más pequeño que, el límite mínimo. El límite mínimo es un valor constante, 32, cuando el búfer posterior no se ha configurado. El límite mínimo es el valor del parámetro de anchura en la última llamada correcta al método configureBackBuffer() después que se configura el búfer posterior.



Implementación
    public function get maxBackBufferWidth():int
    public function set maxBackBufferWidth(value:int):void

profile

propiedad 
profile:String  [solo lectura]

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 12, AIR 4

El perfil de compatibilidad de característica usado por este objeto Context3D.



Implementación
    public function get profile():String

Elementos de API relacionados

supportsVideoTexture

propiedad 
supportsVideoTexture:Boolean  [solo lectura]

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: AIR 17.0, Flash Player 18.0

Indica si Context3D admite textura de vídeo.



Implementación
    public static function get supportsVideoTexture():Boolean

totalGPUMemory

propiedad 
totalGPUMemory:Number  [solo lectura]

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 21, AIR 21

Devuelve el total de memoria de GPU asignada por las estructuras de datos de Stage3D de una aplicación.

Siempre que se crea un objeto de recurso de GPU, la memoria utilizada se almacena en Context3D. Esta memoria incluye los búferes de índice, los búferes de vértice, las texturas (excepto las de vídeo) y los programas creados mediante este Context3D.

El parámetro totalGPUMemory de la API devuelve al usuario el total de memoria consumida por los recursos anteriores. El valor predeterminado devuelto es 0. El total de memoria de GPU devuelto se expresa en bytes. La información solo se proporciona en el modo directo en móvil y en los modos directo y GPU en escritorio. (En un escritorio, el uso de <renderMode>gpu</renderMode> se revierte a <renderMode>direct</renderMode>)

Esta API se puede utilizar cuando la versión de SWF es 32 o superior.



Implementación
    public function get totalGPUMemory():Number
Información sobre métodos

clear

()método
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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Borra el color, la profundidad y búfer de esténcil asociado a este objeto Context3D y los rellena con los valores especificados.

Establezca el parámetro mask para especificar qué búfer se borra. Utilice las constantes definidas en la clase Context3DClearMask para definir el parámetro mask. Utilice el operador OR en modo bit, "|", para añadir varios búfers a la máscara (o use Context3DClearMask.ALL). Cuando se procesa en la parte posterior del búfer, se debe llamar a configureBackBuffer() antes de cualquier llamada a clear().

Nota: si especifica un parámetro valor fuera del rango permitido, los valores del parámetro Numeric se incluirán de forma silenciosa en el intervalo de cero a uno. Del mismo modo, si stencil es mayor que 0xff, se establece en 0xff.

Parámetros

red:Number (default = 0.0) — el componente rojo del color con el que se borra el búfer de color, en el intervalo de cero a uno.
 
green:Number (default = 0.0) — el componente verde del color con el que se borra el búfer de color, en el intervalo de cero a uno.
 
blue:Number (default = 0.0) — el componente azul del color con el que se borra el búfer de color, en el intervalo de cero a uno.
 
alpha:Number (default = 1.0) — el componente alfa del color con el que se borra el búfer de color, en el intervalo de cero a uno. El componente alfa no se utiliza para la mezcla. Se escribe en el búfer alfa directamente.
 
depth:Number (default = 1.0) — el valor con el que se borra el búfer de profundidad, en el intervalo de cero a uno.
 
stencil:uint (default = 0) — el valor de 8 bits con el que se borrar el búfer de esténcil, en el intervalo de 0x00 a 0xFF.
 
mask:uint (default = 0xffffffff) — especifica qué búfer se borra.


Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.

Elementos de API relacionados

configureBackBuffer

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define las dimensiones del visor y otros atributos del búfer de procesamiento.

El procesamiento tiene doble búfer. La parte trasera del búfer se intercambia con la parte delantera visible del búfer cuando se llama a present(). El tamaño mínimo del búfer es 32 x 32 píxeles. El tamaño máximo del búfer posterior está limitado por las capacidades del dispositivo y también puede configurarlo el usuario a través de las propiedades maxBackBufferHeight y maxBackBufferWidth. La configuración del búfer es una operación lenta. Debe evitar cambiar el tamaño del búfer o de los atributos durante operaciones de procesamiento normales.

Parámetros

width:int — anchura, en píxeles, del búfer.
 
height:int — altura, en píxeles, del búfer.
 
antiAlias:int — un valor entero que especifica la calidad solicitada del suavizado. El valor se corresponde con el número de submuestras utilizadas durante el suavizado. El uso de más submuestras requiere llevar a cabo más cálculos, aunque el modo en que afecta al comportamiento relativo depende del hardware específico de procesamiento. El tipo de suavizado y si se realiza algún tipo de suavizado depende del dispositivo y modo de procesamiento. El suavizado no se admite en el contexto de procesamiento por software.
0Ningún suavizado
2Suavizado mínimo.
4Suavizado de alta calidad.
16Suavizado de calidad muy alta.
 
enableDepthAndStencil:Boolean (default = true)false indica que no hay profundidad o no se crea búfer de esténcil; true crea profundidad y búfer de esténcil. En aplicaciones para AIR 3.2 o versión posterior compiladas con la versión 15 de SWF o posterior, si el elemento renderMode del archivo descriptor de la aplicación es direct, el elemento depthAndStencil del archivo descriptor de la aplicación debe tener el mismo valor que este argumento. De forma predeterminada, el valor del elemento depthAndStencil es false.
 
wantsBestResolution:Boolean (default = false)true indica que si el dispositivo admite pantallas HiDPI, se intentará asignar un búfer posterior más grande que el indicado con los parámetros width y height. Dado que esto agrega más píxeles y puede modificar el resultado de las operaciones de sombreado, está desactivado de forma predeterminada. Utilice Stage.contentsScaleFactor para determinar en qué medida se ha escalado el búfer posterior nativo.
 
wantsBestResolutionOnBrowserZoom:Boolean (default = false)true indica que el tamaño del búfer posterior debe incrementar en proporción al aumento del factor de zoom del navegador. El ajuste de este valor es persistente en varios valores de zoom del navegador. El valor predeterminado del parámetro es false. Establezca las propiedades maxBackBufferWidth y maxBackBufferHeight para limitar el aumento del tamaño del búfer posterior. Utilice backBufferWidth ybackBufferHeight para determinar el tamaño actual del búfer posterior.


Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Tamaño de entrada incorrecto: el parámetro “width” o “height” es menor que el tamaño permitido de búfer posterior mínimo o mayor que el tamaño permitido de búfer posterior máximo.
 
Error — 3709: El indicador depthAndStencil del descriptor de la aplicación debe coincidir con el valor booleano enableDepthAndStencil transferido a configureBackBuffer() en el objeto Context3D.

createCubeTexture

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Crea un objeto CubeTexture.

Utilice un objeto CubeTexture para cargar mapas de bits de texturas cúbicas para el contexto de procesamiento y para hacer referencia a una textura cúbica durante el procesamiento. Una textura cúbica consta de seis texturas cuadradas de igual tamaño dispuestas en una topología cúbica y resulta útil para describir mapas de entorno.

No se pueden crear objetos CubeTexture con un constructor CubeTexture; utilice este método en su lugar. Después de crear un objeto CubeTexture, cargue los datos de textura de mapa de bits con los métodos uploadFromBitmapData(), uploadFromByteArray() o uploadCompressedTextureFromByteArray() CubeTexture.

Parámetros

size:int — La longitud del borde de la textura, en texels.
 
format:String — El formato texel de la lista enumerada Context3DTextureFormat.

La compresión de texturas permite guardar imágenes de textura en formato comprimido directamente en la GPU, ahorrando así memoria de GPU y ancho de banda de memoria. Normalmente, las texturas comprimidas se comprimen sin conexión y se cargan en la GPU en formato comprimido mediante el método de Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 y AIR 3.4 en plataformas de escritorio añadieron compatibilidad para compresión de texturas en tiempo de ejecución, lo que puede resultar útil en determinados casos como, por ejemplo al representar texturas dinámicas de gráficos vectoriales. Tenga en cuenta que esta función no está disponible en plataformas móviles y que en su lugar se generará un ArgumentError (El formato de textura no coincide). Para utilizar la compresión de texturas en tiempo de ejecución, lleve a cabo estos pasos: 1. Cree el objeto de textura llamando al método Context3D.createCubeTexture(), transfiriendo flash.display3D.Context3DTextureFormat.COMPRESSED o flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA como el parámetro de formato. 2. Usando la instancia flash.display3D.textures.Texture devuelta por createCubeTexture(), llame a flash.display3D.textures.CubeTexture.uploadFromBitmapData() o flash.display3D.textures.CubeTexture.uploadFromByteArray() para cargar y comprimir la textura en un paso.

 
optimizeForRenderToTexture:Boolean — Establézcalo en true si la textura se utilizará como destino de procesamiento.
 
streamingLevels:int (default = 0) — El nivel de mapa MIP que debe cargarse antes de que la imagen se procese. La transmisión de texturas ofrece la capacidad para cargar y mostrar primero los niveles MIP más pequeños, y mostrar progresivamente imágenes de mayor calidad a medida que se cargan las texturas. Los usuarios finales pueden ver imágenes de menor calidad en una aplicación mientras se cargan las imágenes de mayor calidad.

De forma predeterminada, streamingLevels es 0, lo que significa que, antes de que se represente la imagen, se debe cargar la imagen de mayor calidad en el mapa MIP. Este parámetro se añadió en Flash Player 11.3 y AIR 3.3. Usar el valor predeterminado mantiene el comportamiento de las versiones anteriores de Flash Player y AIR.

Establezca streamingLevels en un valor entre 1 y el número de imágenes del mapa MIP para activar la transmisión de texturas. Por ejemplo, dispone de un mapa MIP que con la máxima calidad incluye una imagen principal a 64x64 píxeles. Las imágenes de menor calidad en el mapa de MIP son de 32x32, 16x16, 8x8, 4x4, 2x2, y 1x1 píxeles, para 7 imágenes en total, o 7 niveles. El nivel 0 es la imagen de mayor calidad. El valor máximo de esta propiedad es log2(min(width,height)). Por ello, para obtener una imagen principal de 64x64 píxeles, el valor máximo de streamingLevels es 7. Establezca esta propiedad en 3 para procesar la imagen después de cargar la imagen de 8x8 píxeles.

Nota: establecer esta propiedad en un valor > 0 puede afectar al rendimiento y al uso de memoria.

Valor devuelto
flash.display3D.textures:CubeTexture

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
 
ArgumentError — Profundidad textura no implementada: si se intenta crear una textura de profundidad.
 
ArgumentError — El tamaño de la textura es cero: si el parámetro size no es mayor que cero.
 
ArgumentError — La textura no es potencia de dos: si el parámetro size no es una potencia de dos.
 
ArgumentError — Textura demasiado grande: si el parámetro size es mayor que 1024.
 
Error — No se ha podido crear la textura: si el objeto CubeTexture no se ha podido crear por el contexto de representación (aunque la información sobre el motivo no esté disponible).
 
ArgumentError — Nivel de transmisión válido: si streamingLevels es mayor o igual que log2(size).

Elementos de API relacionados

createIndexBuffer

()método 
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Crea un objeto IndexBuffer3D.

Utilice un objeto IndexBuffer3D para cargar un conjunto de índices de triángulo para el contexto de procesamiento y que haga referencia a dicho conjunto de índices para el procesamiento. Cada índice en el búfer de índices correspondiente hace referencia a un vértice del búfer de vértices. Cada conjunto de tres índices identifica un triángulo. Transfiera el objeto IndexBuffer3D al método drawTriangles() para representar uno o más triángulos definidos en el búfer de índices.

No se pueden crear objetos IndexBuffer3D con el constructor de la clase IndexBuffer3D; utilice este método en su lugar. Después de crear un objeto IndexBuffer3D, cargue los índices utilizando los métodos uploadFromVector() o uploadFromByteArray() IndexBuffer3D.

Parámetros

numIndices:int — el número de vértices que debe almacenarse en el búfer.
 
bufferUsage:String (default = "staticDraw") — el uso previsto del búfer. Utilice una de las constantes definidas en Context3DBufferUsage. El controlador de hardware puede realizar una optimización adecuada cuando se lo configura correctamente. Este parámetro solo está disponible en versiones posteriores a Flash 12/AIR 4.

Valor devuelto
IndexBuffer3D

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados búfer de índices o si se supera la cantidad de memoria asignada a los búfer de índices.
 
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
 
ArgumentError — Búfer demasiado grande: cuandonumIndices es mayor o igual que 0xf0000.

Elementos de API relacionados

createProgram

()método 
public function createProgram():Program3D

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Crea un objeto Program3D.

Utilice un objeto Program3D para cargar programas de sombreado para el contexto de procesamiento y para hacer referencia a programas cargados durante el procesamiento. Un objeto Program3D almacena dos programas, un programa de vértices y un programa de fragmentos (también conocido como programa de píxeles). Los programas están escritos en un lenguaje ensamblador de sombreado binario.

No se pueden crear objetos Program3D con un constructor Program3D; utilice este método en su lugar. Después de crear un objeto Program3D, cargue los programas usando el método upload() Program3D.

Valor devuelto
Program3D

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — El número de programas supera 4096 o el tamaño total de la memoria supera 16 MB (utilice dispose para liberar recursos de Program3D).

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

Este ejemplo ilustra cómo crear, cargar y activar un par de vértices y programas de píxeles en un contexto de procesamiento. Tenga en cuenta que el objeto, rendercontext, es una instancia de la clase Context3D. Los programas en el ejemplo se han escrito en Adobe Graphics Assembly Language (AGAL).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

//A simple fragment (or pixel) program in AGAL        
const FRAGMENT_SHADER:String = "mov oc, v0";  

var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
var programPair:Program3D;

//Compile shaders
vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );            

//Upload programs to render context
programPair = renderContext.createProgram();
programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
renderContext.setProgram( programPair );
            

createRectangleTexture

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11.8, AIR 3.8

Crea un objeto Texture rectangular.

Utilice un objeto RectangleTexture para cargar mapas de bits de texturas para el contexto de procesamiento y para hacer referencia a una textura durante el procesamiento.

No se pueden crear objetos RectangleTexture con un constructor RectangleTexture; utilice este método en su lugar. Después de crear un objeto RectangleTexture, cargue los mapas de bits de texturas con los métodos Texture uploadFromBitmapData() o uploadFromByteArray().

Tenga en cuenta que las texturas de enteros de 32 bits se almacenan en un formato BGRA empaquetado para que coincida con el formato BitmapData de Flash. Las texturas de coma utilizan un formato RGBA convencional.

Las texturas de rectángulo son diferentes de las texturas normales en 2D: su altura y su anchura no son potencias de dos. Además, no contienen mapas MIP. Son más útiles para su uso en procesamiento de texturas. Si la textura del rectángulo se utiliza con una muestra que utiliza filtros de mapas MIP o repetición de ajuste, la llamada drawTriangles fallará. La textura de rectángulo tampoco permite la transmisión. Los únicos formatos de textura admitidos por las texturas de rectángulo son BGRA, BGR_PACKED, BGRA_PACKED. Los formatos de textura comprimida no se admiten en texturas de rectángulo.

Parámetros

width:int — La anchura de la textura en texels.
 
height:int — La altura de la textura en texels.
 
format:String — El formato texel de la lista enumerada Context3DTextureFormat.
 
optimizeForRenderToTexture:Boolean — Establézcalo en true si la textura se utilizará como destino de procesamiento.

Valor devuelto
flash.display3D.textures:RectangleTexture

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
 
ArgumentError — El tamaño de la textura es cero: si los parámetros width y height no son mayores que cero.
 
ArgumentError — Textura demasiado grande: si el parámetro width o height es mayor que 2048.
 
Error — No se ha podido crear textura: si el objeto Texture no se ha podido crear por el contexto del procesamiento (aunque la información sobre el motivo no esté disponible).
 
Error — Requiere perfil de línea de base o superior: si la textura rectangular se crea con el perfil restringido de línea base.

Elementos de API relacionados

createTexture

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Crea un objeto Texture.

Utilice un objeto Texture para cargar mapas de bits de texturas para el contexto de procesamiento y para hacer referencia a una textura durante el procesamiento.

No se pueden crear objetos Texture con una constructor Texture; utilice este método en su lugar. Después de crear un objeto Texture, cargue los mapas de bits de texturas con los métodos uploadFromBitmapData(), uploadFromByteArray() o uploadCompressedTextureFromByteArray() Texture.

Tenga en cuenta que las texturas de enteros de 32 bits se almacenan en un formato BGRA empaquetado para que coincida con el formato BitmapData de Flash. Las texturas de coma utilizan un formato RGBA convencional.

Parámetros

width:int — La anchura de la textura en texels.
 
height:int — La altura de la textura en texels.
 
format:String — El formato texel de la lista enumerada Context3DTextureFormat.

La compresión de texturas permite guardar imágenes de textura en formato comprimido directamente en la GPU, ahorrando así memoria de GPU y ancho de banda de memoria. Normalmente, las texturas comprimidas se comprimen sin conexión y se cargan en la GPU en formato comprimido mediante el método de Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 y AIR 3.4 en plataformas de escritorio añadieron compatibilidad para compresión de texturas en tiempo de ejecución, lo que puede resultar útil en determinados casos como, por ejemplo al representar texturas dinámicas de gráficos vectoriales. Tenga en cuenta que esta función no está disponible en plataformas móviles y que en su lugar se generará un ArgumentError (El formato de textura no coincide). Para utilizar la compresión de texturas en tiempo de ejecución, lleve a cabo estos pasos: 1. Cree el objeto de textura llamando al método Context3D.createTexture(), transfiriendo flash.display3D.Context3DTextureFormat.COMPRESSED o flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA como el parámetro de formato. 2. Con la instancia flash.display3D.textures.Texture devuelta por createTexture(), llame a flash.display3D.textures.Texture.uploadFromBitmapData() o flash.display3D.textures.Texture.uploadFromByteArray() para cargar y comprimir la textura en un paso.

 
optimizeForRenderToTexture:Boolean — Establézcalo en true si la textura se utilizará como destino de procesamiento.
 
streamingLevels:int (default = 0) — El nivel de mapa MIP que debe cargarse antes de que la imagen se procese. La transmisión de texturas ofrece la capacidad para cargar y mostrar primero los niveles MIP más pequeños, y mostrar progresivamente imágenes de mayor calidad a medida que se cargan las texturas. Los usuarios finales pueden ver imágenes de menor calidad en una aplicación mientras se cargan las imágenes de mayor calidad.

De forma predeterminada, streamingLevels es 0, lo que significa que, antes de que se represente la imagen, se debe cargar la imagen de mayor calidad en el mapa MIP. Este parámetro se añadió en Flash Player 11.3 y AIR 3.3. Usar el valor predeterminado mantiene el comportamiento de las versiones anteriores de Flash Player y AIR.

Establezca streamingLevels en un valor entre 1 y el número de imágenes del mapa MIP para activar la transmisión de texturas. Por ejemplo, dispone de un mapa MIP que con la máxima calidad incluye una imagen principal a 64x64 píxeles. Las imágenes de menor calidad en el mapa de MIP son de 32x32, 16x16, 8x8, 4x4, 2x2, y 1x1 píxeles, para 7 imágenes en total, o 7 niveles. El nivel 0 es la imagen de mayor calidad. El valor máximo de esta propiedad es log2(min(width,height)). Por ello, para obtener una imagen principal de 64x64 píxeles, el valor máximo de streamingLevels es 7. Establezca esta propiedad en 3 para procesar la imagen después de cargar la imagen de 8x8 píxeles.

Nota: establecer esta propiedad en un valor > 0 puede afectar al rendimiento y al uso de memoria.

Valor devuelto
flash.display3D.textures:Texture

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
 
ArgumentError — Profundidad textura no implementada: si se intenta crear una textura de profundidad.
 
ArgumentError — El tamaño de la textura es cero: si tanto los parámetros width como height no son mayores que cero.
 
ArgumentError — La textura no es potencia de dos: si tanto los parámetros width como height no son potencia de dos.
 
ArgumentError — Textura demasiado grande: si el parámetro width o height es mayor que 2048 para la línea de base y el perfil restringido de línea base, o si el parámetro width oheight es mayor que 4096 para el perfil de línea base ampliada y superior.
 
Error — No se ha podido crear la textura: si el objeto Texture no se ha podido crear por el contexto de representación (aunque la información sobre el motivo no esté disponible).
 
ArgumentError — Nivel de transmisión válido: si streamingLevels es mayor o igual que log2(min(width,height)).

Elementos de API relacionados

createVertexBuffer

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Crea un objeto VertexBuffer3D.

Utilice un objeto VertexBuffer3D para cargar un conjunto de datos de vértices para el contexto de procesamiento. Un búfer de vértices contiene los datos necesarios para representar cada punto de geometría de la escena. Los atributos de datos asociados a cada vértice normalmente incluyen coordenadas de posición, de color y de textura, y sirven como entrada para el programa de sombreado de vértices. Identifique los valores de datos que corresponden a una de las entradas para el programa de vértices con el método setVertexBufferAt(). Se pueden especificar hasta 64 valores de 32 bits para cada vértice.

No se pueden crear objetos VertexBuffer3D con un constructor VertexBuffer3D; utilice este método en su lugar. Después de crear un objeto VertexBuffer3D, cargue el vértice datos con los métodos uploadFromVector() o uploadFromByteArray() VertexBuffer3D.

Parámetros

numVertices:int — el número de vértices que debe almacenarse en el búfer. El número máximo de vértices en un único búfer es 65535.
 
data32PerVertex:int — el número de valores de datos de 32 bits (4 bytes) asociados a cada vértice. El número máximo de datos de 32 bits por vértice es 64 (o 256 bytes). Es preciso tener en cuenta que sólo se puede acceder a ocho registros de atributos mediante un programa de sombreado de vértices en un momento dado. Utilice SetVertextBufferAt( para seleccionar atributos desde dentro de un búfer de vértices.
 
bufferUsage:String (default = "staticDraw") — el uso previsto del búfer. Utilice una de las constantes definidas en Context3DBufferUsage. El controlador de hardware puede realizar una optimización adecuada cuando se lo configura correctamente. Este parámetro solo está disponible en versiones posteriores a Flash 12/AIR 4

Valor devuelto
VertexBuffer3D

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de búfer de vértices o si se supera la cantidad de memoria asignada a los búfer de vértices.
 
ArgumentError — Búfer demasiado grande: cuando numVertices es mayor que 0x10000 o data32PerVertex es mayor que 64.
 
ArgumentError — El búfer tiene tamaño cero: cuando numVertices es cero o data32PerVertex es cero.
 
ArgumentError — No se ha podido crear búfer: si el objeto VertexBuffer3D no se ha podido crear por el contexto del procesamiento (aunque la información adicional sobre el motivo no esté disponible).
 
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

El siguiente ejemplo muestra cómo crear y cargar un búfer de vértices de datos. El área de influencia en el ejemplo contiene dos tipos de datos para cada vértice: la posición, como las coordenadas x, y, z; y el color, como componentes rgb. Una vez creado el búfer de vértices, el ejemplo llama al método setVertexBufferAt() para especificar que los tres primeros puntos de datos se transfieren al programa de vértices como 3 valores de coma flotante en va0 y que los segundos tres puntos de datos se transfieren como va1. Un programa de vértices puede tener hasta 8 entradas, también conocidas como registros de atributos de vértices, definidas del modo siguiente.
const dataPerVertex:int = 6;
var vertexData:Vector.<Number> = Vector.<Number>(
    [
      // x, y, z    r, g, b format
         0, 0, 0,   1, 1, 1,
        -1, 1, 0,   0, 0,.5,
         1, 1, 0,   0, 0, 1,
         1,-1, 0,  .5, 0, 0,
        -1,-1, 0,   1, 0, 0
    ]
);
var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
//Identify vertex data inputs for vertex program
renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data
renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data

    createVertexBufferForInstances

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: AIR 20.0

Crea un objeto VertexBuffer3D para datos de las instancias.

Utilice un objeto VertexBuffer3D para cargar un conjunto de datos de instancias para el contexto de procesamiento. El búfer de vértices contiene los datos necesarios para representar cada instancia de geometría de la escena. Los búferes de vértices con datos de instancia proporcionan los atributos comunes a todos los vértices de una instancia y sirven como entrada para el programa de sombreado de vértices. Identifique los valores de datos que corresponden a una de las entradas para el programa de vértices con el método setVertexBufferAt(). Se pueden especificar hasta sesenta y cuatro valores de 32 bits para cada elemento de búfer de vértices.

No se pueden crear objetos VertexBuffer3D con un constructor VertexBuffer3D; utilice este método en su lugar. Después de crear un objeto VertexBuffer3D, cargue el vértice datos con los métodos uploadFromVector() o uploadFromByteArray() VertexBuffer3D.

Parámetros

numVertices:int — el número de elementos que debe almacenarse en el búfer. El número máximo de elementos en un único búfer es 65535.
 
data32PerVertex:int — el número de valores de datos de 32 bits (4 bytes) asociados a cada elemento. El número máximo de datos de 32 bits por vértice es 64 (o 256 bytes).
 
instancesPerElement:int — el número de instancias que van a utilizar un elemento del búfer de vértices.
 
bufferUsage:String (default = "staticDraw") — el uso previsto del búfer. Utilice una de las constantes definidas en Context3DBufferUsage. El controlador de hardware puede realizar una optimización adecuada cuando se lo configura correctamente. Este parámetro solo está disponible en versiones posteriores a Flash 12/AIR 4

Valor devuelto
VertexBuffer3D

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de búfer de vértices o si se supera la cantidad de memoria asignada a los búfer de vértices.
 
ArgumentError — Búfer demasiado grande: cuando numVertices es mayor que 0x10000 o data32PerVertex es mayor que 64.
 
ArgumentError — El búfer tiene tamaño cero: cuando numVertices es cero o data32PerVertex es cero.
 
ArgumentError — No se ha podido crear búfer: si el objeto VertexBuffer3D no se ha podido crear por el contexto del procesamiento (aunque la información adicional sobre el motivo no esté disponible).
 
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
 
Error — Requiere perfil ampliado estándar o superior: si se llama a este método cuando el perfil solicitado es menor que el perfil ampliado estándar.
 
Error — Instancias no válidas por elemento: si el parámetro instancesPerElement no es mayor que cero.

Elementos de API relacionados

createVideoTexture

()método 
public function createVideoTexture():flash.display3D.textures:VideoTexture

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: AIR 17.0, Flash Player 18.0

Crea un objeto VideoTexture.

Utilice un objeto VideoTexture para obtener los fotogramas de vídeo como textura de un objeto NetStream o Camera y cargar los fotogramas de vídeo al contexto de procesamiento.

El objeto VideoTexture no se puede crear con el constructor de VideoTexture; utilice este método en su lugar. Tras crear un objeto VideoTexture, añada el objeto NetStream o el objeto Camera para obtener los fotogramas de vídeo con los métodos VideoTexture attachNetStream() o attachCamera().

Observe que este método devuelve null si el sistema no admite esta función.

VideoTexture no contiene mapas MIP. Si se utiliza VideoTexture con una muestra que utiliza filtros de mapas MIP o ajuste repetido, la llamada drawTriangles fallará. Los sombreados pueden tratar VideoTexture como textura BGRA. La creación del objeto VideoTexture fallará si Context3D se ha solicitado con el modo de procesamiento de sotfware.

Hay un máximo de 4 objetos VideoTexture disponibles por cada instancia de Context3D. En dispositivos móviles, el número real de objetos VideoTexture admitidos puede ser inferior a 4 debido a las limitaciones de la plataforma.

Valor devuelto
flash.display3D.textures:VideoTexture

Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Se ha superado el límite de recursos: si se crean demasiados objetos de textura o si se supera la cantidad de memoria asignada a las texturas.
 
Error — No se ha podido crear la textura: si el objeto Texture no se ha podido crear por el contexto de representación (aunque la información sobre el motivo no esté disponible).

dispose

()método 
public function dispose(recreate:Boolean = true):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Libera todos los recursos y el almacenamiento interno asociado a este Context3D.

Todos los búferes de índices, de vértices, texturas, y programas creados a través de este Context3D se eliminan del mismo modo que si llama a dispose() en cada uno de ellos de forma individual. Además, el propio Context3D se elimina para liberar todos los búferes temporales y posteriores. Si llama a configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer(), o a drawToBitmapData() tras haber llamado a dispose(), el motor de ejecución emite una excepción.

Advertencia: Si se llama a “dispose()” en un Context3D cuando todavía hay definido un detector de eventos para Events.CONTEXT3D_CREATE en el objeto Stage3D asociado, la llamada simulará una pérdida del dispositivo. Creará un nuevo Context3D en el Stage3D y emitirá el evento Events.CONTEXT3D_CREATE de nuevo. No es aconsejable quitar el detector de eventos del objeto Stage3D antes de llamar a dispose() o establecer el parámetro recreate en false.

Parámetros

recreate:Boolean (default = true)

Elementos de API relacionados

    drawToBitmapData

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: AIR 3

Dibuja el búfer de procesamiento actual en un mapa de bits.

El contenido actual de la parte posterior del búfer de procesamiento se copian a un objeto BitmapData. Se trata de una operación potencialmente muy lenta que se puede tardar hasta un segundo. Úsela con cuidado Tenga en cuenta que esta función no copia del búfer de procesamiento (el que se muestra en el escenario), sino en el que se está dibujando. Para capturar la imagen procesada tal como aparece en el escenario, llame a drawToBitmapData() inmediatamente antes de llamar a present().

Desde el lanzamiento de AIR 25, se han introducido dos nuevos parámetros en la API drawToBitmapData(). Esta API ahora utiliza tres parámetros. El primero es el parámetro existente destination:BitmapData. El segundo parámetro es srcRect:Rectangle, que corresponde al rectángulo de destino en stage3D. El tercer parámetro es destPoint:Point, que corresponde a la coordenada del mapa de bits de destino. Los parámetros srcRect y destPoint son opcionales, y sus valores predeterminados son (0,0,bitmapWidth,bitmapHeight) y (0,0), respectivamente.

Cuando se dibuja la imagen, no se escala para adaptarlo al mapa de bits. En su lugar, el contenido se ajusta al tamaño del mapa de bits de destino.

Los objetos BitmapData de Flash almacenan colores ya multiplicados por el componente alfa. Por ejemplo, si los componentes de color RGB “puros” de un píxel son (0X0, 0x12, 0xBB) y el componente alfa es 0x7F (0.5), el píxel se almacena en el objeto BitmapData con los valores rgba: (0x05, 0x09, 0x5D, 0x7F). Se pueden establecer los factores de mezcla de modo que los colores procesados en el búfer se multiplican por alfa o realizan la operación en el sombreador de fragmentos. El contexto de procesamiento no valida que los colores se almacenen en formato premultiplicado.

Parámetros

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


Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.
 
Error — 3802: Si alguno de los parámetros destPoint:Point o srcRect:Rectangle está fuera del límite de coordenadas de bitmap/stage3D o si los valores non-Neumeric(NaN) se proporcionan como valores de entrada.

Ejemplo  ( Cómo utilizar este ejemplo )

El ejemplo siguiente representa dos triángulos tanto en el búfer de procesamiento normal y en un objeto BitmapData. El objeto BitmapData se visualiza con un objeto Bitmap añadido a la lista de visualización normal. Un filtro de sombra se aplica al procesamiento de mapas de bits.
package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    import flash.filters.DropShadowFilter;
    
    public class Context3D_drawToBitmapData extends Sprite
    {
        public const viewWidth:Number = 320;
        public const viewHeight:Number = 200;
        
        private var bitmap:Bitmap;
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

        private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var programPair:Program3D;
        
        public function Context3D_drawToBitmapData()
        {
            stage3D = this.stage.stage3Ds[0];
            stage3D.x = 0;
            stage3D.y = 0;

            //Add event listener before requesting the context
            stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated );            
            stage3D.requestContext3D( Context3DRenderMode.AUTO );
            
            //Compile shaders
            vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
            fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );            
        }
        
        //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process
        private function contextCreated( event:Event ):void
        {
            renderContext = Stage3D( event.target ).context3D;
            trace( "3D driver: " + renderContext.driverInfo );

            renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing
            renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false );
            
            //Create vertex index list for the triangles
            var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] );
            indexList = renderContext.createIndexBuffer( triangles.length );
            indexList.uploadFromVector( triangles, 0, triangles.length );
            
            //Create vertexes
            const dataPerVertex:int = 6;
            var vertexData:Vector.<Number> = Vector.<Number>(
                [
                  // x, y, z    r, g, b format
                     0, 0, 0,   1, 1, 1,
                    -1, 1, 0,   0, 0,.5,
                     1, 1, 0,   0, 0, 1,
                     1,-1, 0,  .5, 0, 0,
                    -1,-1, 0,   1, 0, 0
                ]
            );
            vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
            vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
            //Identify vertex data inputs for vertex program
            renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position
            renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color
            
            //Upload programs to render context
            programPair = renderContext.createProgram();
            programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
            renderContext.setProgram( programPair );
            
            //Clear required before first drawTriangles() call
            renderContext.clear( .3,.3,.3 );
            
            
            //Draw the 2 triangles
            renderContext.drawTriangles( indexList, 0, 2 );
            
            var renderedBitmapData:BitmapData = new BitmapData( viewWidth, viewHeight, true );
            renderContext.drawToBitmapData( renderedBitmapData );
            
            renderContext.present();
            
            //Add to stage
            bitmap = new Bitmap( renderedBitmapData );
            this.addChild( bitmap );
            bitmap.x = 55;
            bitmap.y = 25;
            bitmap.filters = [new DropShadowFilter( 8, 235, .4 )];
        }
    }
}

drawTriangles

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Represente los triángulos especificados utilizando los búfers actuales y el estado de este objeto Context3D.

Para cada triángulo, los vértices del triángulo se procesan con el programa de sombreado de vértices y se procesa la superficie del triángulo con el programa de sombreado de píxeles. Se dibuja el color de salida para cada píxel desde el programa de píxeles para procesar el destino en función de las operaciones del esténcil, la prueba de profundidad, el alfa de origen y de destino, y el modo modo de mezcla actual. El destino de procesamiento puede ser el buffer de procesamiento principal o una textura.

Si la técnica "culling" está activada, (con el método setCulling()), se pueden eliminar triángulos de la escena antes de que se ejecute el programa de píxeles. Si están activadas las pruebas de esténcil y de profundidad, los píxeles de salida desde el programa de píxeles se pueden eliminar sin actualizar el destino del procesamiento. Además, el programa de píxeles puede decidir no producir un color para un píxel.

Los triángulos procesados no se muestran en el visor hasta que se llama al método present(). Después de cada llamada a present(), se debe llamar al método clear() antes de la primera llamada a drawTriangles() o el procesamiento fallará.

Si enableErrorChecking es false, esta función se devuelve inmediatamente, no espera a los resultados y emite excepciones sólo si esta instancia de COntext3D se ha eliminado o hay demasiadas llamadas de dibujo. Si el estado del contexto de procesamiento no es válido, el procesamiento falla silenciosamente. Si la propiedad enableErrorChecking es true, esta función se devuelve después de dibujar los triángulos y emite excepciones para errores de dibujo o estados de contexto no válidos.

Parámetros

indexBuffer:IndexBuffer3D — un conjunto de índices de vértice que hace referencia a los vértices que se van a procesar.
 
firstIndex:int (default = 0) — el índice del primer índice de vértice seleccionado para procesar. Valor predeterminado 0.
 
numTriangles:int (default = -1) — el número de triángulos para procesar. Cada triángulo consume tres índices. Transfiera -1 para dibujar todos los triángulos en el búfer del índice. Valor predeterminado -1.


Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Si se llama a este método demasiadas veces entre las llamadas a present(). El número máximo de las llamadas se 32.768.

Los errores siguientes sólo se emiten cuando la propiedad enableErrorChecking es true:

 
Error — Se debe borrar para poder dibujar: si el búfer no se ha borrado desde la última llamada a present().
 
Error — Si un objeto Program3D válido no está establecido.
 
Error — No hay ningún índice de búfer válido establecido: si no está establecido ningún objeto IndexBuffer3D.
 
Error — Comprobación de integridad en parámetros que han fallado: si el número de triángulos que se dibujarán o firstIndex superan los valores permitidos.
 
RangeError — No hay índices suficientes en este búfer: si no hay suficientes índices en el búfer para definir el número de triángulos que se dibujan.
 
Error — La muestra vincula la textura también vinculada al procesamiento: si el destino de procesamiento es una textura y dicha textura se asigna a una entrada de textura del programa de fragmentos actual.
 
Error — La muestra vincula una textura no válida: una textura no válida se especifica como entrada del programa de fragmentos actual.
 
Error — El formato de muestra no coincide con el formato de textura: si la textura asignada como entrada del programa de fragmentos actual tiene un formato diferente al que se especificó para el registro de muestras. Por ejemplo, una textura 2D se asigna a un muestreador de textura cúbica.
 
Error — La muestra vincula una textura no definida: el programa de fragmentos actual accede a un registro de texturas que no se ha definido (con setTextureAt()).
 
Error — La misma textura necesita los mismos parámetros de muestreador: si una textura se utiliza para más de un registro de muestras, todos los muestreadores deben tener los mismos ajustes. Por ejemplo, no es posible establecer un muestreador para fijar y otro para ajustar.
 
Error — Textura vinculada pero no utilizada: una textura se define como entrada de sombreador, pero no se utiliza.
 
Error — El flujo no se utiliza: un búfer de vértices se asigna a una entrada de atributos de vértices, pero el programa de vértices no hace referencia al registro correspondiente.
 
Error — El flujo no es válido: un objeto VertexBuffer3D asignado a una entrada de programa de vértices no es un objeto válido.
 
RangeError — El flujo no dispone de suficiente vértices: un búfer de vértices que suministra datos para dibujar los triángulos especificados no tiene suficientes datos.
 
RangeError — Desplazamiento de flujo de vértices fuera de los límites: el desplazamiento especificado en una llamada a setVertexBufferAt() es negativo o va más allá del final del búfer.
 
Error — El flujo se lee pero no se define: un atributo de vértice que se utiliza en el programa de vértices actual no está definido (con setVertexBufferAt()).

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

La siguiente clase dibuja dos triángulos para un visor Stage3D en el escenario. Los triángulos comparten un vértice, que se encuentra en el origen (0,0,0).

Los triángulos están definidos mediante el búfer de vértices y el búfer de índices. El búfer de vértices contiene la posición y la información de color para cada vértice del triángulo. El búfer de índices contiene índices del búfer de vértices. Un triángulo se define mediante tres índices. Por ejemplo, un triángulo formado por los tres primeros puntos en el búfer de vértices se muestra como 0,1,2 en el búfer de índices.

En este sencillo ejemplo, se lleva a cabo transformación 3D. Sólo se pueden visualizar los objetos en el área de visualización canónica (unidad de volumen 2x2x1) y las coordenadas de los triángulos se definen para estar dentro de esta área. Sin embargo, al procesar una escena típica en 3D, se proyectan los objetos que se van a procesar desde el sistema de coordenadas “real” a esta área de visualización mediante una proyección ortográfica o de perspectiva.

package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    
    public class Context3D_drawTriangles extends Sprite
    {
        public const viewWidth:Number = 320;
        public const viewHeight:Number = 200;
        
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

        private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var programPair:Program3D;
        
        public function Context3D_drawTriangles()
        {
            stage3D = this.stage.stage3Ds[0];
            stage3D.x = 10;
            stage3D.y = 10;

            //Add event listener before requesting the context
            stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated );            
            stage3D.requestContext3D( Context3DRenderMode.AUTO );
            
            //Compile shaders
            vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
            fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );            
        }
        
        //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process
        private function contextCreated( event:Event ):void
        {
            renderContext = Stage3D( event.target ).context3D;
            trace( "3D driver: " + renderContext.driverInfo );

            renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing
            renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false );
            
            //Create vertex index list for the triangles
            var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] );
            indexList = renderContext.createIndexBuffer( triangles.length );
            indexList.uploadFromVector( triangles, 0, triangles.length );
            
            //Create vertexes
            const dataPerVertex:int = 6;
            var vertexData:Vector.<Number> = Vector.<Number>(
                [
                  // x, y, z    r, g, b format
                     0, 0, 0,   1, 1, 1,
                    -1, 1, 0,   0, 0,.5,
                     1, 1, 0,   0, 0, 1,
                     1,-1, 0,  .5, 0, 0,
                    -1,-1, 0,   1, 0, 0
                ]
            );
            vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
            vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
            //Identify vertex data inputs for vertex program
            renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position
            renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color
            
            //Upload programs to render context
            programPair = renderContext.createProgram();
            programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
            renderContext.setProgram( programPair );
            
            //Clear required before first drawTriangles() call
            renderContext.clear( .3,.3,.3 );
            
            //Draw the 2 triangles
            renderContext.drawTriangles( indexList, 0, 2 );
            
            //Show the frame
            renderContext.present();
        }
    }
}

    drawTrianglesInstanced

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: AIR 20.0

Represente los triángulos instanciados especificados utilizando los búferes actuales y el estado de este objeto Context3D.

Para cada triángulo de cada instancia, los vértices del triángulo se procesan con el programa de sombreado de vértices y se procesa la superficie del triángulo con el programa de sombreado de píxeles. Se dibuja el color de salida para cada píxel desde el programa de píxeles para procesar el destino en función de las operaciones del esténcil, la prueba de profundidad, el alfa de origen y de destino, y el modo modo de mezcla actual. El destino de procesamiento puede ser el buffer de procesamiento principal o una textura.

Si la técnica "culling" está activada, (con el método setCulling()), se pueden eliminar triángulos de la escena antes de que se ejecute el programa de píxeles. Si están activadas las pruebas de esténcil y de profundidad, los píxeles de salida desde el programa de píxeles se pueden eliminar sin actualizar el destino del procesamiento. Además, el programa de píxeles puede decidir no producir un color para un píxel.

Los triángulos instanciados procesados no se muestran en el visor hasta que se llama al método present(). Después de cada llamada a present(), se debe llamar al método clear() antes de la primera llamada a drawTriangles() o el procesamiento fallará.

Si enableErrorChecking es false, esta función se devuelve inmediatamente, no espera a los resultados y emite excepciones sólo si esta instancia de COntext3D se ha eliminado o hay demasiadas llamadas de dibujo. Si el estado del contexto de procesamiento no es válido, el procesamiento falla silenciosamente. Si la propiedad enableErrorChecking es true, esta función se devuelve después de dibujar los triángulos y emite excepciones para errores de dibujo o estados de contexto no válidos.

Este método puede generar una excepción si el búfer instanciado se ordena de forma incorrecta con SetVertexAt(). Por ejemplo, con Direct 3D 9, los datos de geometría indexados y el número de instancias que deben dibujarse siempre deben configurarse con flujo cero mediante la API SetStreamSourceFreq().

Esto significa que el búfer de vértices creado mediante CreateVertexBufferForInstance() no debe colocarse con el número de índice mínimo que se establece mediante SetVertexBufferAt() como entrada para el programa de sombreado de vértices. El búfer de vértices generado mediante CreateVertexBuffer() debe colocarse con un número de índice menor que el de CreateVertexBufferForInstance(). En general, los datos de geometría deben colocarse antes de los datos de cada instancia, mediante SetVertexBufferAt().

Parámetros

indexBuffer:IndexBuffer3D — un conjunto de índices de vértice que hace referencia a los vértices que se van a representar.
 
numInstances:int — número de instancias que se va a procesar.
 
firstIndex:int (default = 0) — el índice del primer índice de vértice seleccionado para procesar. Valor predeterminado 0.
 
numTriangles:int (default = -1) — el número de triángulos para procesar. Cada triángulo consume tres índices. Transfiera -1 para dibujar todos los triángulos en el búfer del índice. Valor predeterminado -1.


Emite
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque el procesamiento por hardware subyacente se ha perdido.
 
Error — Si se llama a este método demasiadas veces entre las llamadas a present(). El número máximo de las llamadas se 32.768.
 
Error — Requiere perfil ampliado estándar o superior: si se llama a este método cuando el perfil solicitado es menor que el perfil ampliado estándar.
 
Error — Si se llama a este método con numInstances negativos.

Los errores siguientes sólo se emiten cuando la propiedad enableErrorChecking es true:

 
Error — Se debe borrar para poder dibujar: si el búfer no se ha borrado desde la última llamada a present().
 
Error — Si un objeto Program3D válido no está establecido.
 
Error — No hay ningún índice de búfer válido establecido: si no está establecido ningún objeto IndexBuffer3D.
 
Error — Comprobación de integridad en parámetros que han fallado: si el número de triángulos que se dibujarán o firstIndex superan los valores permitidos.
 
RangeError — No hay índices suficientes en este búfer: si no hay suficientes índices en el búfer para definir el número de triángulos que se dibujan.
 
Error — La muestra vincula la textura también vinculada al procesamiento: si el destino de procesamiento es una textura y dicha textura se asigna a una entrada de textura del programa de fragmentos actual.
 
Error — La muestra vincula una textura no válida: una textura no válida se especifica como entrada del programa de fragmentos actual.
 
Error — El formato de muestra no coincide con el formato de textura: si la textura asignada como entrada del programa de fragmentos actual tiene un formato diferente al que se especificó para el registro de muestras. Por ejemplo, una textura 2D se asigna a un muestreador de textura cúbica.
 
Error — La muestra vincula una textura no definida: el programa de fragmentos actual accede a un registro de texturas que no se ha definido (con setTextureAt()).
 
Error — La misma textura necesita los mismos parámetros de muestreador: si una textura se utiliza para más de un registro de muestras, todos los muestreadores deben tener los mismos ajustes. Por ejemplo, no es posible establecer un muestreador para fijar y otro para ajustar.
 
Error — Textura vinculada pero no utilizada: una textura se define como entrada de sombreador, pero no se utiliza.
 
Error — El flujo no se utiliza: un búfer de vértices se asigna a una entrada de atributos de vértices, pero el programa de vértices no hace referencia al registro correspondiente.
 
Error — El flujo no es válido: un objeto VertexBuffer3D asignado a una entrada de programa de vértices no es un objeto válido.
 
RangeError — El flujo no dispone de suficiente vértices: un búfer de vértices que suministra datos para dibujar los triángulos especificados no tiene suficientes datos.
 
RangeError — Desplazamiento de flujo de vértices fuera de los límites: el desplazamiento especificado en una llamada a setVertexBufferAt() es negativo o va más allá del final del búfer.
 
Error — El flujo se lee pero no se define: un atributo de vértice que se utiliza en el programa de vértices actual no está definido (con setVertexBufferAt()).
 
Error — El flujo de búfer de vértices no contiene elementos suficientes para instancias: Si un flujo de búfer de vértices no contiene suficientes elementos para el número de instancias.
 
Error — El flujo de búfer de vértices para instancias no está configurado correctamente con el registro de atributos de índice mínimo: si el búfer de vértices generado medianteCreateVertexBuffer(), recibe un número de índice mayor que el del búfer de vértices generado con CreateVertexBufferForInstance().

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

La siguiente clase dibuja tres triángulos utilizando el dibujo instanciado función con una sola llamada de dibujo en lugar de dibujar varias llamadas.
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 siguiente clase dibuja tres triángulos utilizando el dibujo instanciado función con una sola llamada de dibujo en lugar de dibujar varias llamadas.
package
{
    import com.adobe.utils.v3.AGALMiniAssembler;
    
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DTriangleFace;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    import flash.geom.Matrix3D;
    import flash.utils.ByteArray;
    
    public class Context3D_HelloInstanceIdRegister extends Sprite
    {
        private var W:int;
        private var H:int;
        
        private var renderContext:Context3D;
        private var program:Program3D;
        private var vertexBuffer:VertexBuffer3D;
        private var instanceBufferColor:VertexBuffer3D;
        private var instanceBufferTranslation:VertexBuffer3D;
        private var indexBuffer:IndexBuffer3D;
        private var m:Matrix3D;
        private var vertexShader:ByteArray;
        private var fragmentShader:ByteArray;
        
        public function Context3D_HelloInstanceIdRegister()
        {
            if (hasEventListener(Event.ADDED_TO_STAGE))
                removeEventListener(Event.ADDED_TO_STAGE, init);
            W = stage.stageWidth;
            H = stage.stageHeight;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, contextCreated);
            //We need to request context3D in standard extended profile as instanced drawing requires standard extended profile.
            stage.stage3Ds[0].requestContext3D("auto","standardExtended");            
            
        }
        
        //Note: <code>context3DCreate</code> event can happen at any time. For example, when the hardware resources are taken up by another process.
        private function contextCreated( event:Event ):void
        {
            var t:Stage3D = event.target as Stage3D;
            renderContext = t.context3D;
            trace( "3D driver: " + renderContext.driverInfo );
            setupScene();
        }
        
        
        private function setupScene():void
        {
            renderContext.enableErrorChecking = true;
            renderContext.configureBackBuffer( W, H, 2, false );
            renderContext.setCulling( Context3DTriangleFace.BACK );
            
            //create vertex buffer for geometry information of the instances (same geometry of the instances)
            vertexBuffer = renderContext.createVertexBuffer(3, 3);
            
            //The color and translation information varies across the instances. Use <code>createVertexBufferForInstances</code> for color and translation information.
            //the intancesPerElement parameter used is 1 which means that each instance will use unique element of the instances buffer
            //if the intancesPerElement is 3 then sets of 3 instances will use the same element of the instances buffer
            instanceBufferColor = renderContext.createVertexBufferForInstances(4,3,1);
            instanceBufferTranslation = renderContext.createVertexBufferForInstances(4,3,1);
            //create index buffer for the triangle
            indexBuffer = renderContext.createIndexBuffer(3);
            
            //create and compile program
            program = renderContext.createProgram();
            //Note : for instance id support , use the latest AgalMiniAssembler from github - https://github.com/adobe-flash/graphicscorelib/blob/master/src/com/adobe/utils/v3/AGALMiniAssembler.as
            var assembler:AGALMiniAssembler = new AGALMiniAssembler();
            
            // VERTEX SHADER
            var code:String = "";
            //the vertex shader code will run for every vertex of every instance , 
            //the vertex buffers uploaded for instance data (va1,va2) will be used when vertex shader for that particular instance is being executed 
            //the vertex shader code below indexes the program constants matrix using iid.x. iid is a new register introduced in vertex shader for instanced drawing
            //it is a read only register , iid.x gives the current instance id whose shader is being executed
            code += "add vt0, va0, va2\n";
            code += "mul vt1, vt0, vc[iid.x]\n"
            code += "mov op, vt1\n";
            code += "mov v0, va1\n";
            
            vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code, 3);
            
            //FRAGMENT SHADER
            code = "mov oc, v0\n"; 
            
            // Compile the agal code into bytecode using agalminiassembler
            fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code, 3);
            
            //upload program to gpu
            program.upload(vertexShader, fragmentShader);
            
            //geometry data for the instances
            var vertexData:Vector.<Number>=Vector.<Number>([
                -0.3, -0.3, 0,     // - 1st vertex x,y,z
                0, 0.3, 1,         // - 2nd vertex x,y,z 
                0.3, -0.3, 0    // - 3rd vertex x,y,z
            ]);
            
            //per instance color data
            var instanceColorData:Vector.<Number>=Vector.<Number>([
                1.0, 0.0, 0.0,     // - 1st instance r,g,b
                0.0, 1.0, 0.0,  // - 2nd instance r,g,b
                1.0, 1.0, 1.0,    // - 3rd instance r,g,b
                0.7, 0.0, 1.0   // - 4th instance r,g,b
            ]);
            //per instance translation data
            var instanceTranslationData:Vector.<Number>=Vector.<Number>([
                -0.3, -0.3, 0.0,     // - 1st instance x,y,z
                0.3, 0.3, 0.0,         // - 2nd instance x,y,z
                -0.3, 0.3, 0.0,        // - 3rd instance x,y,z
                0.3, -0.3, 0.0      // - 4th instance x,y,z
            ]);
            
            vertexBuffer.uploadFromVector(vertexData, 0, 3);
            instanceBufferColor.uploadFromVector(instanceColorData, 0, 4);
            indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3);
            instanceBufferTranslation.uploadFromVector(instanceTranslationData, 0, 4);
            
            //pass data to program
            renderContext.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
            renderContext.setVertexBufferAt(1, instanceBufferColor, 0, Context3DVertexBufferFormat.FLOAT_3);
            renderContext.setVertexBufferAt(2, instanceBufferTranslation, 0, Context3DVertexBufferFormat.FLOAT_3);
            
            //set active program
            renderContext.setProgram(program);
            renderContext.enableErrorChecking = true;
            addEventListener(Event.ENTER_FRAME, render);
            
        }
        
        private function render( event:Event ):void
        {
            renderContext.clear(0.3, 0.2, 1, 1); // Clear the backbuffer by filling it with the given color
            var instanceScalingData:Vector.<Number>=Vector.<Number>([
                1.0, 1.0, 1.0, 1.0,     // - 1st instance x,y,z,w
                1.4, 1.4, 1.4, 1.0,        // - 2nd instance x,y,z,w
                0.6, 0.6, 0.6, 1.0,        // - 3rd instance x,y,z,w
                0.6, 0.6, 0.6, 1.0
            ]);
            var m:Matrix3D = new Matrix3D();
            m.copyRawDataFrom(instanceScalingData);
            renderContext.setProgramConstantsFromMatrix("vertex",0,m,false);
            
            //Draw three instances of the same geometry but with varying instance data specified using <code>vertexBufferForInstances</code>.
            renderContext.drawTrianglesInstanced(indexBuffer,4);
            renderContext.present(); // render the backbuffer on screen.
        }    
    }
}

present

()método 
public function present():void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Muestra la parte posterior del búfer de procesamiento.

Llamar a present() ) hace que los resultados de todas las operaciones de procesamiento desde la última llamada a present() sean visibles e inicia un nuevo ciclo de procesamiento. Después de llamar a present, debe llamar a clear() antes de realizar otra llamada a drawTriangles(). De lo contrario, esta función borrará el búfer de procesamiento a amarillo y verde o, si se ha definido enableErrorChecking como true, emitirá una excepción.

Llamar a present() también restablece el destino de procesamiento, igual que sucede al llamar a setRenderToBackBuffer().


Emite
Error — Se necesita borrar para poder dibujar: si no se ha llamado al método clear() desde la anterior llamada a present(). (No está permitido realizar dos llamadas consecutivas a present() sin llamar antes a clear().)
 
Error — 3768: la API Stage3D no se puede usar durante la ejecución en segundo plano.

setBlendFactors

()método 
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Especifica los factores utilizado para mezclar el color de salida de una operación de dibujo con el color existente.

El color de salida (origen) del programa sombreador de píxeles se combina con el color existente (destino) de ese píxel según la siguiente fórmula:

color resultante = (color de origen * sourceFactor) + (color de destino * destinationFactor)

El color de destino es el color actual en el búfer de procesamiento para dicho píxel. Así, es el resultado de la llamada más reciente a clear() y cualquier llamada drawTriangles() que haya intervenido.

Utilice setBlendFactors() para definir los factores utilizados para multiplicar los colores de origen y destino antes de que se sumen. Los factores de mezcla predeterminados son, sourceFactor = Context3DBlendFactor.ONE, y destinationFactor = Context3DBlendFactor.ZERO, que dan como resultado la anulación del color de destino por el color de origen (en otras palabras, no se produce mezcla de los dos colores). Para mezcla alfa normal, utilice sourceFactor = Context3DBlendFactor.SOURCE_ALPHA y destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA.

Utilice las constantes definidas en la clase Context3DBlendFactor para definir los parámetros de esta función.

Parámetros

sourceFactor:String — El factor por el que se multiplica el color de origen. El valor predeterminado es Context3DBlendFactor.ONE.
 
destinationFactor:String — El factor por el que se multiplica el color de destino. El valor predeterminado es Context3DBlendFactor.ZERO.


Emite
Error — Enumeración no válida: si sourceFactor o destinationFactor no tiene ningún valor reconocido. Estos valores se definen en la clase Context3DBlendFactor.

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

La clase siguiente ilustra los diversos factores de mezcla. El ejemplo dibuja cuatro rectángulos de colores distintos en el búfer procesamiento. Este conjunto de rectángulos es el “destino” de la mezcla. A continuación, se establecen los modos de mezcla de origen y destino, y se dibuja un rectángulo de mayor tamaño (el “origen” de la mezcla). Utilice las teclas “1” y “2” para recorrer los modos de mezcla de origen. Utilice las teclas “3” y “4” para recorrer los modos de mezcla de destino.
package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DBlendFactor;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.ErrorEvent;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    
    public class Context3D_setBlendMode extends Sprite
    {
        public const viewWidth:Number = 320;
        public const viewHeight:Number = 200;
        
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

        private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var programPair:Program3D;
        
        private var sourceFactor:int = 6;
        private var destinationFactor:int = 4;
        private var blendFactors:Array = [Context3DBlendFactor.DESTINATION_ALPHA,
                                          Context3DBlendFactor.DESTINATION_COLOR,
                                          Context3DBlendFactor.ONE,
                                          Context3DBlendFactor.ONE_MINUS_DESTINATION_ALPHA,
                                          Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA,
                                          Context3DBlendFactor.ONE_MINUS_SOURCE_COLOR,
                                          Context3DBlendFactor.SOURCE_ALPHA,
                                          Context3DBlendFactor.SOURCE_COLOR,
                                          Context3DBlendFactor.ZERO];
            
        public function Context3D_setBlendMode()
        {
            this.stage.addEventListener( KeyboardEvent.KEY_DOWN, keyHandler );
            
            stage3D = this.stage.stage3Ds[0];
            stage3D.x = 10;
            stage3D.y = 10;

            //Add event listener before requesting the context
            stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated );
            stage3D.addEventListener( ErrorEvent.ERROR, contextError );
            stage3D.requestContext3D( Context3DRenderMode.AUTO );
            
            //Compile shaders
            vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
            fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );            
        }
        
        //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process
        private function contextCreated( event:Event ):void
        {
            renderContext = Stage3D( event.target ).context3D;
            trace( "3D driver: " + renderContext.driverInfo );

            renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing
            renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false );
            
            //Create vertex index list for the triangles
            var triangles:Vector.<uint> = Vector.<uint>( [  0, 3 , 2, 
                                                            0, 1, 3,
                                                            6, 4, 5,
                                                            5, 7, 6,
                                                            10, 8, 9,
                                                            9, 11, 10,
                                                            12, 15, 14,
                                                            12, 13, 15,
                                                            16, 17, 19,
                                                            16, 19, 18
                                                         ] );
            indexList = renderContext.createIndexBuffer( triangles.length );
            indexList.uploadFromVector( triangles, 0, triangles.length );
            
            //Create vertexes
            const dataPerVertex:int = 7;
            var vertexData:Vector.<Number> = Vector.<Number>(
                [
                  // x, y, z    r, g, b, a format
                    -1, 1, 0,   1, 1, 1, .5,
                     0, 1, 0,   1, 1, 1, .5,
                    -1, 0, 0,   1, 1, 1, .5,
                     0, 0, 0,   1, 1, 1, .5,
                     
                     0, 1, 0,  .8,.8,.8, .6,
                     1, 1, 0,  .8,.8,.8, .6,
                     0, 0, 0,  .8,.8,.8, .6,
                     1, 0, 0,  .8,.8,.8, .6,
                     
                    -1, 0, 0,   1, 0, 0, .5,
                     0, 0, 0,   0, 1, 0, .5,
                    -1,-1, 0,   0, 0, 1, .5,
                     0,-1, 0,   1, 0, 1, .5,
                     
                     0, 0, 0,   0, 0, 0, .5,
                     1, 0, 0,   0, 0, 0, .5,
                     0,-1, 0,   0, 0, 0, .5,
                     1,-1, 0,   0, 0, 0, .5,
                     
                   -.8,.8, 0,  .6,.4,.2,.4,
                    .8,.8, 0,  .6,.4,.2,.4,
                  -.8,-.8, 0,  .6,.4,.2,.4,
                   .8,-.8, 0,  .6,.4,.2,.4
                ]
            );
            vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
            vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
            //Identify vertex data inputs for vertex program
            renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position
            renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_4 ); //va1 is color
            
            //Upload programs to render context
            programPair = renderContext.createProgram();
            programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
            renderContext.setProgram( programPair );
            
            render();
        }
        
        private function render():void
        {
            //Clear required before first drawTriangles() call
            renderContext.clear( 1, 1, 1, 1 );
            //Draw the back triangles
            renderContext.setBlendFactors( Context3DBlendFactor.ONE, Context3DBlendFactor.ZERO ); //No blending
            renderContext.drawTriangles( indexList, 0, 8 );

            //Set blend
            renderContext.setBlendFactors( blendFactors[sourceFactor], blendFactors[destinationFactor] );
            
            //Draw the front triangles
            renderContext.drawTriangles( indexList, 24, 2 );
            
            //Show the frame
            renderContext.present();
        }
        
        private function contextError( error:ErrorEvent ):void
        {
            trace( error.errorID + ": " + error.text );
        }
        
        private function keyHandler( event:KeyboardEvent ):void
        {
            switch ( event.keyCode )
            {
                case Keyboard.NUMBER_1:
                    if( --sourceFactor < 0 ) sourceFactor = blendFactors.length - 1; 
                    break;
                case Keyboard.NUMBER_2:
                    if( ++sourceFactor > blendFactors.length - 1) sourceFactor = 0;
                    break;
                case Keyboard.NUMBER_3:
                    if( --destinationFactor < 0 ) destinationFactor = blendFactors.length - 1; 
                    break;
                case Keyboard.NUMBER_4:
                    if( ++destinationFactor > blendFactors.length - 1) destinationFactor = 0;
                    break;
            }
            trace( "Source blend factor: " + blendFactors[sourceFactor] + ", destination blend factor: " + blendFactors[destinationFactor] );
            render();
        }
    }
}

setColorMask

()método 
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define la máscara utilizada al escribir colores en el búfer de procesamiento.

Sólo los componentes de color para los que el parámetro de máscara de color correspondiente es true se actualizan cuando un color se escribe en el búfer de procesamiento. Por ejemplo, si se llama: setColorMask( true, false, false, false ), tan sólo el componente rojo de un color se escribirá en el búfer hasta que vuelva a cambiar la máscara de color. La máscara de color no afecta al comportamiento del método clear().

Parámetros

red:Boolean — establezca false para bloquear los cambios en el canal rojo.
 
green:Boolean — establezca false para bloquear los cambios en el canal verde.
 
blue:Boolean — establezca false para bloquear los cambios en el canal azul.
 
alpha:Boolean — establezca false para bloquear los cambios en el canal alfa.


Ejemplo  ( Cómo utilizar este ejemplo )

El ejemplo siguiente ilustra el efecto de establecer la máscara de color. El ejemplo dibuja dos triángulos que son del mismo color. El triángulo superior se dibuja antes de la máscara, por lo que se interpreta como blanco. El triángulo inferior se dibuja una vez enmascarado todos los canales excepto el canal rojo. Puesto que sólo se puede actualizar el canal rojo, el triángulo blanco se procesa como rojo.
package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    
    public class Context3D_setColorMask extends Sprite
    {
        public const viewWidth:Number = 320;
        public const viewHeight:Number = 200;
        
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

        private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var programPair:Program3D;
        
        public function Context3D_setColorMask()
        {
            stage3D = this.stage.stage3Ds[0];
            stage3D.x = 10;
            stage3D.y = 10;

            //Add event listener before requesting the context
            stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated );            
            stage3D.requestContext3D( Context3DRenderMode.AUTO );
            
            //Compile shaders
            vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
            fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );            
        }
        
        //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process
        private function contextCreated( event:Event ):void
        {
            renderContext = Stage3D( event.target ).context3D;
            trace( "3D driver: " + renderContext.driverInfo );

            renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing
            renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false );
            
            //Create vertex index list for the triangles
            var triangles:Vector.<uint> = Vector.<uint>( [ 0, 1, 2, 0, 3, 4 ] );
            indexList = renderContext.createIndexBuffer( triangles.length );
            indexList.uploadFromVector( triangles, 0, triangles.length );
            
            //Create vertexes
            const dataPerVertex:int = 6;
            var vertexData:Vector.<Number> = Vector.<Number>(
                [
                  // x, y, z    r, g, b format
                     0, 0, 0,   1, 1, 1,
                    -1, 1, 0,   1, 1, 1,
                     1, 1, 0,   1, 1, 1,
                     1,-1, 0,   1, 1, 1,
                    -1,-1, 0,   1, 1, 1
                ]
            );
            vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
            vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
            //Identify vertex data inputs for vertex program
            renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position
            renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color
            
            //Upload programs to render context
            programPair = renderContext.createProgram();
            programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
            renderContext.setProgram( programPair );
            
            renderContext.clear( .3,.3,.3,1 );
            renderContext.drawTriangles( indexList, 0, 1 ); //Top triangle draws all colors, so is white
            renderContext.setColorMask( true, false, false, false ); //Mask all but red channel            
            renderContext.drawTriangles( indexList, 3, 1 ); //Bottom triangle only updates red
            
            //Show the frame
            renderContext.present();
        }
    }
}

setCulling

()método 
public function setCulling(triangleFaceToCull:String):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Establece el modo "culling" de triángulo.

Los triángulos pueden ser excluidos de la escena en las primeras fases de la canalización de la representación según su orientación relativa al plano de la vista. Especifique un orden coherente de vértices (en el sentido de las agujas del reloj o en el sentido contrario a las agujas del reloj) como si mirara desde el exterior del modelo para aplicar correctamente la técnica "culling".

Parámetros

triangleFaceToCull:String — el modo "culling". Utilice una de las constantes definidas en la clase Context3DTriangleFace.


Emite
Error — Error de enumeración no válida: cuando triangleFaceToCull no es uno de los valores definidos en la clase Context3DTriangleFace.

Elementos de API relacionados

setDepthTest

()método 
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define el tipo de comparación utilizada para pruebas de profundidad.

La profundidad de la salida de píxeles de origen desde el programa sombreador de píxeles se compara con el valor actual en el búfer de profundidad. Si la comparación da como resultado false, el píxel de origen se descarta. Si da como resultado true, el píxel de origen se procesa en el siguiente paso en el flujo de procesamiento: la prueba del esténcil. Además, el búfer de profundidad se actualiza con la profundidad del píxel de origen, siempre y cuando el parámetro depthMask se establezca en true.

Define la prueba utilizada para comparar valores de profundidad de píxeles de origen y de destino. El píxel de origen se compone con el píxel de destino cuando la comparación es true. El operador de comparación se aplica como un operador infijo entre los valores de los píxeles de origen y de destino, en ese orden.

Parámetros

depthMask:Boolean — el valor de profundidad de destino se actualizará desde el píxel de origen si es true.
 
passCompareMode:String — operación de prueba de comparación de profundidad. Uno de los valores de Context3DCompareMode.

Elementos de API relacionados

    setFillMode

()método 
public function setFillMode(fillMode:String):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: AIR 16

El modo definido de relleno utilizado para el procesamiento. La interfaz solo está disponible en AIR para escritorio.

Parámetros

fillMode:String — si el valor es MALLA METÁLICA, el objeto se mostrará en una malla de líneas. si el valor es SÓLIDO, el objeto se mostrará en polígonos de sombreado sólido.

Elementos de API relacionados

setProgram

()método 
public function setProgram(program:Program3D):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define programas de vértices y fragmentos para usar en posteriores procesamientos.

Parámetros

program:Program3D — el objeto Program3D que representa los programas de vértices y fragmentos para usar.

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

Este ejemplo ilustra cómo crear, cargar y activar un par de vértices y programas de píxeles en un contexto de procesamiento. Tenga en cuenta que el objeto, rendercontext, es una instancia de la clase Context3D. Los programas en el ejemplo se han escrito en Adobe Graphics Assembly Language (AGAL).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

//A simple fragment (or pixel) program in AGAL        
const FRAGMENT_SHADER:String = "mov oc, v0";  

var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
var programPair:Program3D;

//Compile shaders
vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );            

//Upload programs to render context
programPair = renderContext.createProgram();
programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
renderContext.setProgram( programPair );
            

setProgramConstantsFromByteArray

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11.1, AIR 3.1

Establece constantes para su uso en programas de sombreado con los valores almacenados en un ByteArray.

Establece constantes a las que se puede acceder desde el programa de vértices o fragmentos.

Parámetros

programType:String — uno de Context3DProgramType.
 
firstRegister:int — el índice de la primera constante de programa de sombreado para definir.
 
numRegisters:int — número de registros para definir. Cada registro se lee como cuatro valores de coma flotante.
 
data:ByteArray — el objeto ByteArray de origen
 
byteArrayOffset:uint — un desplazamiento en ByteArray para leer


Emite
TypeError — kNullPointerError cuando data es null.
 
RangeError — kConstantRegisterOutOfBounds cuando se intenta definir por encima del número máximo de constantes de sombreado.
 
RangeError — kBadInputSize si byteArrayOffset es mayor o igual que la longitud de data o no. de elementos de data - byteArrayOffset es menor que numRegisters*16

Elementos de API relacionados

setProgramConstantsFromMatrix

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Establece constantes para su uso en programas de sombreado con los valores almacenados en una Matrix3D.

Utilice esta función para transferir una matriz a un programa de sombreado. La función define 4 registros de constantes utilizados por el programa de vértices o fragmentos. La matriz se asigna a los registros fila por filas. El primer registro de constantes se asigna a la fila superior de la matriz. Es posible establecer 128 registros para un programa de vértices y 28 para un programa de fragmentos.

Parámetros

programType:String — El tipo de programa de sombreado, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT.
 
firstRegister:int — el índice del primer registro de constantes para definir. Ya que Matrix3D tiene 16 valores, cuatro registros están definidos.
 
matrix:Matrix3D — la matriz que contiene los valores de la constante.
 
transposedMatrix:Boolean (default = false) — si es true, las entradas de la matriz se copian en registros en orden traspuesto. El valor predeterminado es false.


Emite
TypeError — Error de puntero nulo: cuando matrix es null.
 
RangeError — Registro de constantes fuera de límites: si se intentan definir más registros que los incluidos en el número máximo de registros de constantes de sombreador.

Más información

Elementos de API relacionados

setProgramConstantsFromVector

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define las entradas constantes para programas de sombreado.

Define un conjunto de constantes a las que se puede acceder mediante un programa de sombreado de vértices o fragmentos. Se puede acceder a las constantes establecidas en Program3D en los programas de sombreado como registros de constantes. Cada registro de constantes está compuesto por 4 valores de coma flotante (x, y, z, w). Por lo tanto, cada registro requiere 4 entradas en el vector de datos. El número de registros que se pueden configurar para el programa de vértices y un programa de fragmentos depende de Context3DProfile.

Parámetros

programType:String — El tipo de programa de sombreado, Context3DProgramType.VERTEX o Context3DProgramType.FRAGMENT.
 
firstRegister:int — el índice del primer registro de constantes para definir.
 
data:Vector.<Number> — los valores de constantes de coma flotante. Debe haber al menos numRegisters elementos en data.
 
numRegisters:int (default = -1) — el número de constantes para establecer. Especifique -1, el valor predeterminado, para establecer suficientes registros para usar todos los datos disponibles.


Emite
TypeError — Error de puntero nulo: cuando data es null.
 
RangeError — Registro de constantes fuera de límites: si se intentan definir más registros que los incluidos en el número máximo de registros de constantes de sombreado.
 
RangeError — Tamaño de entrada incorrecto: Cuando el número de elementos de data es menos quenumRegisters*4

Más información

Elementos de API relacionados

setRenderToBackBuffer

()método 
public function setRenderToBackBuffer():void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define la parte posterior del búfer de procesamiento como destino del procesamiento. Las llamadas siguientes a drawTriangles() y clear() tendrán como resultado actualizaciones en el búfer posterior. Utilice este método para reanudar el procesamiento normal después de utilizar el método setRenderToTexture().

setRenderToTexture

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Establece la textura especificada como destino de procesamiento.

Las posteriores llamadas a los métodos drawTriangles() y clear() actualizan la textura especificada y no la parte posterior del búfer. Los mapas mip se crean automáticamente. Utilice setRenderToBackBuffer() para reanudar el procesamiento normal en la parte posterior del búfer.

No hay necesidad de borrar antes de dibujar. Si no hay ninguna operación de borrado, se conserva la representación del contenido. el búfer de profundidad y el de esténcil tampoco se borrarán. Pero se fuerza su borrado cuando se dibuja por primera vez. Llamar a present() restablece el destino en la parte posterior del búfer.

Parámetros

texture:flash.display3D.textures:TextureBase — textura de destino para procesar. Establézcalo en null para reanudar el procesamiento en la parte posterior del búfer (setRenderToBackBuffer() y present también reinician el destino en la parte posterior del búfer).
 
enableDepthAndStencil:Boolean (default = false) — si es true, están disponibles las pruebas de intensidad y esténcil. Si es false, todos los estados de profundidad y esténcil se omiten en las posteriores operaciones dibujo.
 
antiAlias:int (default = 0) — calidad del suavizado. Utilice 0 para desactivar el suavizado; los valores más altos mejoran la calidad del suavizado, pero requieren más cálculos. El valor se omite actualmente por el menú emergente de la plataforma y la representación con software.
 
surfaceSelector:int (default = 0) — especifica qué elemento de la textura se va a actualizar. Los objetos Texture tienen una superficie, por lo que debe especificar 0, el valor predeterminado. Los objetos CubeTexture tienen seis superficies, por lo que puede especificar un número entero de 0 a 5.
 
colorOutputIndex:int (default = 0) — El registro del color de salida. Debe ser 0 para modo restringido o de línea de base. En caso contrario, especifica el registro del color de salida.


Emite
ArgumentError — para un parámetro surfaceSelector no coincidente. El valor debe ser 0 para texturas 2D y 0...5 para mapas cúbicos.
 
ArgumentError texture no se deriva de la clase TextureBase (ni de las clases Texture o CubeTexture).
 
ArgumentError colorOutputIndex debe ser un número entero entre 0 y 3.
 
ArgumentError — Esta llamada requiere un objeto Context3D creado con el perfil estándar o superior.

Elementos de API relacionados

setSamplerStateAt

()método 
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11.6, AIR 3.6

Sustituir manualmente el estado del muestreador de texturas.

El estado del muestreador de texturas se define al llamar a setProgram. Sin embargo, es posible anular el estado del muestreador de textura con esta función. Si no desea que el programa cambie el estado del muestreador, establezca el bit ignoresamnpler en AGAL y utilice esta función.

Parámetros

sampler:int — muestreador. El registro de muestreador para utilizar. Se asigna al registro del muestreador en AGAL.
 
wrap:String — Modo de ajuste. Definido en Context3DWrapMode. El valor predeterminado es repetir.
 
filter:String — Modo de filtrado de textura. Definido en Context3DTextureFilter. El valor predeterminado es el más cercano.
 
mipfilter:String — Filtro de mapa MIP. Definido en Context3DMipFilter. El valor predeterminado es ninguno.


Emite
Error — muestreador fuera de rango
 
Error — ajustar, filtro, enum filtromip incorrecta
 
Error — Objeto eliminado: si el objeto Context3D se ha eliminado llamando a dispose() o porque la representación por hardware subyacente se ha perdido.

Elementos de API relacionados

setScissorRectangle

()método 
public function setScissorRectangle(rectangle:Rectangle):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define un rectángulo tijera, similar a una máscara de dibujo. El procesador sólo dibuja al área interior del rectángulo tijera. El recorte no afecta a las operaciones de borrado.

Transfiera null para desactivar el efecto tijera.

Parámetros

rectangle:Rectangle — El rectángulo en el que se va a dibujar. Especifique la posición y las dimensiones del rectángulo en píxeles. El origen del sistema de coordenadas es la esquina superior izquierda del visor, con los valores positivos aumentando hacia abajo y hacia la derecha (la misma que la visualización normal del sistema de coordenadas de Flash).


Ejemplo  ( Cómo utilizar este ejemplo )

La siguiente clase dibuja dos triángulos para un puerto de vista de 640 x 480 píxeles en el escenario. Los triángulos comparten un vértice, que se encuentra en el origen (0,0,0).

Los triángulos están definidos mediante el búfer de vértices y el búfer de índices. El búfer de vértices contiene la posición y la información de color para cada vértice del triángulo. El búfer de índices contiene índices del búfer de vértices. Un triángulo se define mediante tres índices. Por ejemplo, un triángulo formado por los tres primeros puntos en el búfer de vértices se muestra como 0,1,2 en el búfer de índices.

En este sencillo ejemplo, se lleva a cabo transformación 3D. Sólo se muestran los objetos dentro del área de visualización canónica (un volumen cúbico de 2x2x2 centrado en el origen). Sin embargo, al procesar una escena típica en 3D, se proyectan los objetos que se van a procesar en esta área de visualización mediante un perspectiva o proyección ortográfica.

package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DBlendFactor;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.TimerEvent;
    import flash.geom.Rectangle;
    import flash.ui.Keyboard;
    import flash.utils.Timer;
    
    public class Context3D_ScissorRectangle extends Sprite
    {
        public const viewWidth:Number = 640;
        public const viewHeight:Number = 480;
        
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

        private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var programPair:Program3D;
        
        private var scissorOn:Boolean = false;
        private var toggler:Timer = new Timer( 750 );
        
        public function Context3D_ScissorRectangle()
        {            
            stage3D = this.stage.stage3Ds[0];
            stage3D.x = 10;
            stage3D.y = 10;

            //Add event listener before requesting the context
            stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated );            
            stage3D.requestContext3D( Context3DRenderMode.AUTO );
            
            //Compile shaders
            vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
            fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );
            
            //Set up timer to turn scissoring on and off
            toggler.addEventListener( TimerEvent.TIMER, toggleScissor );
        }
        
        //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process
        private function contextCreated( event:Event ):void
        {
            renderContext = Stage3D( event.target ).context3D;
            trace( "3D driver: " + renderContext.driverInfo );

            renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing
            renderContext.configureBackBuffer( viewWidth, viewHeight, 2, false );
            
            //Create vertex index list for the triangles
            var triangles:Vector.<uint> = Vector.<uint>( [  0, 3 , 2, 
                                                            0, 1, 3
                                                         ] );
            indexList = renderContext.createIndexBuffer( triangles.length );
            indexList.uploadFromVector( triangles, 0, triangles.length );
            
            //Create vertexes
            const dataPerVertex:int = 6;
            var vertexData:Vector.<Number> = Vector.<Number>(
                [
                  // x, y, z    r, g, b, a format 
                   -1, 1, 0,  1,0,0,
                    1, 1, 0,  0,0,1,
                   -1,-1, 0,  0,1,0,
                    1,-1, 0,  1,0,1
                ]
            );
            vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
            vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
            //Identify vertex data inputs for vertex program
            renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position
            renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color
            
            //Upload programs to render context
            programPair = renderContext.createProgram();
            programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
            renderContext.setProgram( programPair );
            
            render();
            toggler.start();
        }
        
        private function render():void
        {
            //Clear required before first drawTriangles() call
            renderContext.clear();

            //Sciss a region excluding the outer 100 pixels of the viewport
            var scissor:Rectangle = new Rectangle( 100, 100, viewWidth - 200, viewHeight - 200 );
            if( scissorOn )    renderContext.setScissorRectangle( scissor ); //on
            else renderContext.setScissorRectangle( null ); //off

            //Draw the triangles
            renderContext.drawTriangles( indexList, 0, 2 );
            
            //Show the frame
            renderContext.present();
        }
        
        private function toggleScissor( event:Event ):void
        {
            scissorOn = !scissorOn;
            render();
        }
        
    }
}

setStencilActions

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Establece el modo y el funcionamiento del esténcil.

Se puede asociar un valor de referencia de esténcil de 8 bits con cada llamada de dibujo. Durante el procesamiento, el valor de referencia se puede probar con valores almacenados previamente en el búfer de fotogramas. El resultado de la prueba puede controlar la acción de dibujar y si se actualiza (y cómo ) el valor de esténcil almacenado. Además, la prueba de profundidad controla si se lleva a cabo la prueba del esténcil. Un fallo en la prueba de profundidad también puede utilizarse para controlar la acción que se realiza en el búfer del esténcil.

En el conducto del procesamiento de píxeles, la prueba de profundidad se realiza primero. Si falla la prueba de profundidad, se puede realizar una acción de actualización de búfer del esténcil, pero no se puede seguir calculando el valor del búfer del esténcil. Si se realiza correctamente la prueba de profundidad, se lleva a cabo la prueba del esténcil. Se pueden realizar acciones alternativas en función del resultado de la prueba de esténcil.

El valor de referencia del esténcil se establece utilizando setStencilReferenceValue().

Parámetros

triangleFace:String (default = "frontAndBack") — las orientaciones permitidas del triángulo para contribuir a la operación del esténcil. Uno de Context3DTriangleFace.
 
compareMode:String (default = "always") — el operador de prueba utilizado para comparar el valor de esténcil de referencia actual y el valor de esténcil de píxeles. La actualización de la profundidad y color de píxeles del destino se realiza cuando la comparación es true. Las acciones del esténcil se realizan del modo solicitado en los siguientes parámetros de acciones. El operador de comparación se aplica como un operador infijo entre los valores de referencia actual y de destino, en ese orden (en seudocódigo: si stencilReference OPERATOR stencilBuffer entonces transferir). Utilice una de las constantes definidas en la clase Context3DCompareMode.
 
actionOnBothPass:String (default = "keep") — la acción que debe tener lugar cuando se realizan correctamente las comparaciones de profundidad y de esténcil. Utilice una de las constantes definidas en la clase Context3DStencilAction.
 
actionOnDepthFail:String (default = "keep") — acción que debe tener lugar cuando falla la comparación de profundidad. Utilice una de las constantes definidas en la clase Context3DStencilAction.
 
actionOnDepthPassStencilFail:String (default = "keep") — acción que debe tener lugar cuando la comparación de profundidad se realiza correctamente y la comparación de esténcil falla. Utilice una de las constantes definidas en la clase Context3DStencilAction.


Emite
Error — Error de enumeración no válida: cuando triangleFace no es uno de los valores definidos en la clase Context3DTriangleFace.
 
Error — Error de enumeración no válida: cuando compareMode no es uno de los valores definidos en la clase Context3DCompareMode.
 
Error — Error de enumeración no válida: cuando actionOnBothPass, actionOnDepthFail o actionOnDepthPassStencilFail no es uno de los valores definidos en la clase Context3DStencilAction.

Elementos de API relacionados


Ejemplo  ( Cómo utilizar este ejemplo )

La clase siguiente ilustra cómo dibujar un esténcil y utilizarlo como una máscara para las siguientes operaciones de dibujo. El ejemplo lleva a cabo los siguientes pasos:
  • Borre el búfer de esténcil y póngalo a 0.
  • Defina la acción esténcil para que aumente cuando pasa la prueba del esténcil.
  • Establezca el valor de referencia del esténcil en 0.
  • Dibuje la máscara triangular. Allá donde se dibuje el triángulo, la prueba del esténcil pasa porque el búfer del esténcil se ha borrado y se ha puesto a 0 y el valor de referencia es 0. Como resultado, el búfer del esténcil se incrementa en 1 donde se dibuja la máscara del triángulo.
  • Cambie la acción del esténcil que se quiere mantener para que las operaciones posteriores de dibujo no modifiquen el búfer de esténcil.
  • Dibuje un rectángulo a pantalla completa (multicolor). Debido a que el valor de referencia del esténcil todavía es 0, la prueba del esténcil falla en el área enmascarada. Por lo tanto, el rectángulo se dibuja en todas partes excepto en la región enmascarada.
  • Cambie el valor de referencia del esténcil a 1.
  • Dibuje otro rectángulo a pantalla completa (rojo). Ahora la prueba del esténcil fallará en todas partes excepto en el área enmascarada, que se incrementa en 1. Por lo tanto, el rectángulo sólo se dibuja en la región enmascarada.

Pase el puntero del ratón sobre el ejemplo para ver los principales pasos de la secuencia.

package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DBlendFactor;
    import flash.display3D.Context3DCompareMode;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DStencilAction;
    import flash.display3D.Context3DTriangleFace;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.ui.Keyboard;
    import flash.utils.Timer;
    
    public class Context3D_Stencil extends Sprite
    {
        public const viewWidth:Number = 350;
        public const viewHeight:Number = 240;
        
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

        private var vertexAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var fragmentAssembly:AGALMiniAssembler = new AGALMiniAssembler();
        private var programPair:Program3D;
                
        public function Context3D_Stencil()
        {            
            stage3D = this.stage.stage3Ds[0];
            stage3D.x = 10;
            stage3D.y = 10;

            //Add event listener before requesting the context
            stage3D.addEventListener( Event.CONTEXT3D_CREATE, contextCreated );            
            stage3D.requestContext3D( Context3DRenderMode.AUTO );
            
            //Compile shaders
            vertexAssembly.assemble( Context3DProgramType.VERTEX, VERTEX_SHADER, false );
            fragmentAssembly.assemble( Context3DProgramType.FRAGMENT, FRAGMENT_SHADER, false );
        
            non3DSetup();
        }
        
        //Note, context3DCreate event can happen at any time, such as when the hardware resources are taken by another process
        private function contextCreated( event:Event ):void
        {
            renderContext = Stage3D( event.target ).context3D;
            trace( "3D driver: " + renderContext.driverInfo );

            renderContext.enableErrorChecking = true; //Can slow rendering - only turn on when developing/testing
            renderContext.configureBackBuffer( viewWidth, viewHeight, 2, true );
            
            //Create vertex index list for the triangles
            var triangles:Vector.<uint> = Vector.<uint>( [  0, 3, 2, 
                                                            0, 1, 3,
                                                            4, 7, 6,
                                                            4, 5, 7,
                                                            8, 9, 10
                                                         ] );
            indexList = renderContext.createIndexBuffer( triangles.length );
            indexList.uploadFromVector( triangles, 0, triangles.length );
            
            //Create vertexes
            const dataPerVertex:int = 6;
            var vertexData:Vector.<Number> = Vector.<Number>(
                [
                  //x, y, z  r,g,b format 
                   -1, 1, 0,  1,0,0,
                    1, 1, 0,  0,0,1,
                   -1,-1, 0,  0,1,0,
                    1,-1, 0,  1,0,1,

                   -1, 1, 0,  .5,0,0,
                    1, 1, 0,  .5,0,0,
                   -1,-1, 0,  .5,0,0,
                    1,-1, 0,  .5,0,0,
                    
                    0, .7,.1, 0,0,0,
                  -.7,-.7,.1, 0,0,0,
                   .7,-.7,.1, 0,0,0
                ]);
            vertexes = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex );
            vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex );
            
            //Identify vertex data inputs for vertex program
            renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //va0 is position
            renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //va1 is color
            
            //Upload programs to render context
            programPair = renderContext.createProgram();
            programPair.upload( vertexAssembly.agalcode, fragmentAssembly.agalcode );
            renderContext.setProgram( programPair );
            render();
        }
        private function render():void
        {
            //Clear, setting stencil to 0
            renderContext.clear( .3, .3, .3, 1, 1, 0 );
            
            //Draw stencil, incrementing the stencil buffer value
            renderContext.setStencilReferenceValue( 0 );
            renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, 
                Context3DCompareMode.EQUAL, Context3DStencilAction.INCREMENT_SATURATE );            
            if( state > 0 ) renderContext.drawTriangles( indexList, 12, 1 );

            //Change stencil action when stencil passes so stencil buffer is not changed
            renderContext.setStencilActions( Context3DTriangleFace.FRONT_AND_BACK, 
                Context3DCompareMode.EQUAL, Context3DStencilAction.KEEP );
            
            //Draw quad -- doesn't draw where stencil has already drawn
            if( state > 1 ) renderContext.drawTriangles( indexList, 0, 2 );
            
            //Change the reference to 1 so this quad only draws into stenciled area
            renderContext.setStencilReferenceValue( 1 );
            if( state > 2 ) renderContext.drawTriangles( indexList, 6, 2 );
            
            //Show the frame
            renderContext.present();
        }
        
        //The rest of the code is for the example UI and timer 
        private function doState( event:TimerEvent ):void
        {
            switch (state)
            {
                case 0:
                    description.text = "Draw triangle with stencil action == increment";
                    state = 1;
                    break;
                case 1:
                    description.text = "Draw the first plane where stencil == 0";
                    state = 2;
                    break;
                case 2:
                    description.text = "Draw second plane where stencil == 1";
                    state = 3;
                    break;
                case 3:
                    description.text = "Clear, setting stencil to 0";
                    state = 0;
                    break;

                default:
                    description.text = "";
                    state = 0;        
            }
            render();
        }

        private var state:int = 3;
        private var stateTimer:Timer = new Timer( 1250 );
        private var description:TextField = new TextField();
        
        private function non3DSetup():void
        {
            //Setup timer to animate the stages of drawing the scene
            stateTimer.addEventListener( TimerEvent.TIMER, doState );
            this.stage.addEventListener( MouseEvent.MOUSE_OVER, function(event:Event):void{stateTimer.start()} );
            this.stage.addEventListener( MouseEvent.MOUSE_OUT, function(event:Event):void{stateTimer.stop()} );
            
            description.height = 30;
            description.width = viewWidth;
            this.addChild( description );
            description.y = viewHeight + 15;
            description.defaultTextFormat = new TextFormat( null, 18, 0xffffff );
            description.text = "Mouse over to view.";
            
            //Allows mouse-over events
            var coverSprite:Sprite = new Sprite();
            coverSprite.graphics.beginFill( 0, .01 )
            coverSprite.graphics.lineTo( stage.stageWidth, 0 );
            coverSprite.graphics.lineTo( stage.stageWidth, stage.stageHeight );
            coverSprite.graphics.lineTo( 0, stage.stageHeight );
            coverSprite.graphics.lineTo( 0, 0 );
            this.addChild( coverSprite );            
        }
    }
}

setStencilReferenceValue

()método 
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Define el valor de comparación del esténcil utilizado para comprobar el esténcil.

Sólo se utilizan los 8 bits más bajos del valor de referencia. El valor del búfer de esténcil también es de 8 bits de longitud. Utilice readMask y writeMask para usar el búfer de esténcil como un campo de bits.

Parámetros

referenceValue:uint — un valor de referencia de 8 bits utilizado en las pruebas de comparación de valores de referencia.
 
readMask:uint (default = 255) — una máscara de 8 bits para aplicarla tanto al valor del búfer de esténcil actual como para el valor de referencia antes de la comparación.
 
writeMask:uint (default = 255) — una máscara de 8 bits para aplicarla al valor de referencia antes de actualizar el búfer de esténcil.

Elementos de API relacionados

setTextureAt

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Especifica la textura que se utiliza para un registro de entrada de texturas de un programa de fragmentos.

Un programa de fragmentos puede leer información de hasta ocho objetos Texture. Utilice esta función para asignar un objeto Texture o CubeTexture a uno de los registros de muestreador utilizados por el programa de fragmentos.

Nota: si cambia el programa de fragmentos activo (con setProgram) a un sombreador que utilice menos texturas, defina los registros no utilizados como null:

         setTextureAt( 7, null );
         

Parámetros

sampler:int — índice del registro del muestreador; un valor de 0 a 7.
 
texture:flash.display3D.textures:TextureBase — el objeto Texture que se pone a disposición, bien una instancia de Texture o de CubeTexture.

Más información

Elementos de API relacionados

Texture
CubeTexture

setVertexBufferAt

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

Versión del lenguaje: ActionScript 3.0
Versiones de motor de ejecución: Flash Player 11, AIR 3

Especifica qué componentes de datos de vértices corresponden a una sola entrada del programa de sombreado de vértices.

Utilice el método setVertexBufferAt() para identificar qué componentes de los datos definidos para cada vértice de un búfer VertexBuffer3D pertenecen a cada entrada del programa de vértices. El desarrollador del programa de vértices determina la cantidad de datos necesaria por vértice. Dichos datos se asignan desde 1 o varios flujos VertexBuffer3D en los registros de atributos del programa de sombreado de vértices.

La unidad más pequeña de datos consumidos por el sombreado de vértices es un dato de 32 bits. Los desplazamientos en el flujo de vértices se especifican en múltiplos de 32 bits.

Por ejemplo, un programador puede definir cada vértice con los siguientes datos:
position:  x    float32
           y    float32
           z    float32
color:     r    unsigned byte
           g    unsigned byte
           b    unsigned byte
           a    unsigned byte
Suponiendo que el vértice se ha definido en un objeto VertexBuffer3D denominado buffer, se le asignaría un sombreado de vértices con el siguiente código:
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

Parámetros

index:int — el índice del registro de atributos en el sombreador de vértices (0 a 7).
 
buffer:VertexBuffer3D — el búfer que contiene los datos del vértice de origen que se van a suministrar al sombreado de vértices.
 
bufferOffset:int (default = 0) — un desplazamiento desde el inicio de los datos de un solo vértice en el que empezar a leer este atributo. En el ejemplo anterior, los datos de posición tienen un desplazamiento de 0 porque es el primer atributo; el color tiene un desplazamiento de 3 porque el atributo de color sigue los tres valores de posición de 32 bits. El desplazamiento se especifica en unidades de 32 bits.
 
format:String (default = "float4") — un valor de la clase Context3DVertexBufferFormat que especifica el tipo de datos de este atributo.


Emite
Error — Enumeración no válida: si el formato no es uno de los valores definidos en la clase Context3DVertexBufferFormat.
 
RangeError — Registro de atributos fuera de los límites: si el parámetro index está fuera del rango de 0 a 7. (Un sombreador puede utilizar un máximo de ocho registros de atributos de vértices.)

Más información

Elementos de API relacionados

Context3DExample.as

La siguiente clase dibuja un cubo giratorio con una proyección de perspectiva.
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 ]¿Por qué hay texto en inglés?
Cierto contenido de la Referencia de ActionScript 3.0 se muestra en inglés

No todo el contenido de la Referencia de ActionScript 3.0 se traduce a todos los idiomas. Si un elemento del lenguaje no se traduce, aparecerá en inglés. Por ejemplo, la clase ga.controls.HelpBox no está traducida en ningún idioma. Por lo tanto, en la versión en español de la referencia, la clase ga.controls.HelpBox aparecerá en inglés.