Referenshandbok för ActionScript® 3.0 i Adobe® Flash®-plattformen
Hem  |  Dölj paket och klasslista |  Paket  |  Klasser  |  Nyheter  |  Index  |  Bilagor  |  Varför på engelska?
Filter: AIR 30.0 och tidigare, Flash Player 30.0 och tidigare, Flash Lite 4
Flex 4.6 och tidigare, Flash Pro CS6 och tidigare
Dölj filter
flash.display3D 

Context3D  - AS3

Paketx

Översta nivån
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

Språkelement

Globala konstanter
Globala funktioner
Operatorer
Programsatser, nyckelord och direktiv
Specialtyper

Bilagor

Nyheter
Kompilatorfel
Kompileringsvarningar
Körningsfel
Flytta till ActionScript 3
Teckenuppsättningar som stöds
Endast MXML-taggar
Motion XML-element
Timed Text-taggar
Lista över borttagna element
Konstanter för hjälpmedelsimplementering
Använda ActionScript-exempel
Juridiska meddelanden
Paketflash.display3D
Klasspublic final class Context3D
ArvContext3D Inheritance EventDispatcher Inheritance Object

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Klassen Context3D ger ett sammanhang för återgivningen av geometriskt definierad grafik.

Ett återgivningssammanhang innehåller en rityta och associerade resurser och lägen. När det är möjligt används maskinvarans grafikprocessorsenhet (GPU-enheten) för återgivningssammanhanget. I andra fall kommer program att användas för återgivningssammanhanget. (Om återgivning med Context3D inte stöds på en plattform, kommer stage3Ds-egenskapen för scenobjektet att innehålla en tom lista.)

Återgivningssammanhanget för Context3D är ett programeringsbart tillvägagångssätt som påminner mycket om OpenGL ES 2, men det är anpassat så att det är kompatibelt med ett antal maskinvaru- och GPU-gränssnitt. Trots att det är avsett för 3D-grafik tillåter inte återgivningstillvägagångssättet att återgivningen är tredimensionell. Du kan emellertid skapa en 2D-återgivning genom att ange rätt vertex- och pixelfragmentprogram. För både 3D- och 2D-fallen är triangeln den enda geometriska primitiven som stöds.

Hämta en instans av Context3D-klassen genom att anropa metoden requestContext3D() för ett Stage3D-objekt. Ett begränsat antal Context3D-objekt kan finnas per scen; ett för varje Stage3D i Stage.stage3Ds-listan. När ett sammanhang skapas, skickar Stage3D-objektet en context3DCreate-händelse. Ett återgivningssammanhang kan när som helst förstöras och återskapas, till exempel när ett annat program som använder GPU-enheten kommer i fokus. Koden ska anpassas så att flera context3DCreate-händelser kan tas emot. Placera återgivningsområdet på scenen med egenskaperna x och y för den associerade Stage3D-instansen.

Följande steg är vanliga för återgivning och visning på en scen (sedan ett Context3D-objekt hämtats):

  1. Konfigurera attributen för huvudvisningsbufferten genom att anropa configureBackBuffer().
  2. Skapa och initiera återgivningsresurser såsom:
    • Vertex- och indexbuffertar som definierar scenens geometri
    • Vertex- och pixelprogram (skuggningsprogram) för återgivning av scenen
    • Texturer
  3. Återgivning av en bildruta:
    • Ställ in ett återgivningsläge som är korrekt för ett objekt eller en samling med objekt på scenen.
    • Anropa metoden drawTriangles() för att återge en uppsättning trianglar.
    • Ändra återgivningsläge för nästa grupp med objekt.
    • Anropa drawTriangles() för att rita upp trianglarna som definierar objekten.
    • Upprepa proceduren tills hela scenen är återgiven.
    • Anropa metoden present() för att visa återgivningen på scenen.

Följande begränsningar gäller för återgivning:

Resursbegränsningar:

ResursAntal tillåtnaTotalt minne
Vertex-buffertar 4096256 MB
Index-buffertar 4096128 MB
Program 409616 MB
Texturer 4096128 MB
Kubtexturer 4096256 MB

AGAL-begränsningar: 200 opkoder per program.

Ritanropsbegränsningar: 32 768 drawTriangles()-anrop för varje present()-anrop.

Följande begränsningar gäller texturer:

Texturbegränsningar för 32-bitars AIR:

TexturMaximal storlekTotalt GPU-minne
Normal textur (under utökad baslinje) 2 048 x 2 048512 MB
Normal textur (utökad baslinje och ovanför) 4 096 x 4 096512 MB
Rektangulär textur (under utökad baslinje) 2 048 x 2 048512 MB
Rektangulär textur (utökad baslinje och ovanför) 4 096 x 4 096512 MB
Kubtextur 1 024 x 1 024256 MB

Texturbegränsningar för 64-bitars AIR (datorer):

TexturMaximal storlekTotalt GPU-minne
Normal textur (under utökad baslinje) 2 048 x 2 048512 MB
Normal textur (baslinjen utökas till standard) 4 096 x 4 096512 MB
Normal textur (utökad standard och högre) 4 096 x 4 0962048 MB
Rektangulär textur (under utökad baslinje) 2 048 x 2 048512 MB
Rektangulär textur (baslinjen utökas till standard) 4 096 x 4 096512 MB
Rektangulär textur (utökad standard och högre) 4 096 x 4 0962048 MB
Kubtextur 1 024 x 1 024256 MB

512 MB är den absoluta gränsen för texturer, inklusive det texturminne som krävs för mipmappar. För kubtexturer är minnesgränsen dock 256 MB.

Du kan inte skapa Context3D-objekt med Context3D-konstruktorn. Det konstrueras och är tillgängligt som en egenskap för Stage3D-instansen. Klassen Context3D kan användas både på stationära och mobila plattformar, både i Flash Player och AIR.

Visa exemplen

Relaterade API-element



Publika egenskaper
 EgenskapDefinieras med
  backBufferHeight : int
[skrivskyddad] Anger höjden på bakåtbufferten, som kan ändras av ett lyckat anrop till metoden configureBackBuffer().
Context3D
  backBufferWidth : int
[skrivskyddad] Anger bredden på bakåtbufferten, som kan ändras av ett lyckat anrop till metoden configureBackBuffer().
Context3D
 Inheritedconstructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans.
Object
  driverInfo : String
[skrivskyddad] Den typ av drivrutin för grafikbibliotek som används av det här återgivningssammanhanget.
Context3D
  enableErrorChecking : Boolean
Anger om fel som upptäcks vid återgivningen rapporteras till programmet.
Context3D
  maxBackBufferHeight : int
Anger högsta tillåtna höjd på bakåtbufferten.
Context3D
  maxBackBufferWidth : int
Anger högsta tillåtna bredd på bakåtbufferten.
Context3D
  profile : String
[skrivskyddad] Den funktionsstödda profilen som används av det här Context3D-objektet.
Context3D
  supportsVideoTexture : Boolean
[statisk] [skrivskyddad] Anger om Context3D har stöd för videotextur.
Context3D
  totalGPUMemory : Number
[skrivskyddad] Returnerar det totala GPU-minnet som tilldelats av Stage3D-datastrukturer i ett program. När ett GPU-resursobjekt skapas, lagras minnet som används i Context3D.
Context3D
Publika metoder
 MetodDefinieras med
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser.
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
Rensar färg-, djup- och stencil-bufferterna som är associerade med detta Context3D-objekt och fyller dem med de angivna värdena.
Context3D
  
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Anger visningsportdimensioner och andra attribut för återgivningsbufferten.
Context3D
  
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Skapar ett CubeTexture-objekt.
Context3D
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Skapar ett IndexBuffer3D-objekt.
Context3D
  
Skapar ett Program3D-objekt.
Context3D
  
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Skapar ett RectangleTexture-objekt.
Context3D
  
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Skapar ett Texture-objekt.
Context3D
  
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Skapar ett VertexBuffer3D-objekt.
Context3D
  
    createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Skapar ett VertexBuffer3D-objekt för instansdata.
Context3D
  
Skapar ett VideoTexture-objekt.
Context3D
 Inherited
Skickar en händelse till händelseflödet.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Frigör alla resurser och interna lagerutrymmen som har att göra med detta Context3D.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Ritar upp den aktuella återgivningsbufferten i en bitmapp.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Återge de angivna trianglarna med hjälp av de aktuella buffertarna och läget för detta Context3D-objekt.
Context3D
  
    drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Återge de angivna triangelinstanserna med hjälp av de aktuella bufferterna och läget för Context3D-objektet.
Context3D
 Inherited
Kontrollerar om EventDispatcher-objektet har några avlyssnare registrerade för en viss typ av händelse.
EventDispatcher
 Inherited
Anger om det finns en egenskap angiven för ett objekt.
Object
 Inherited
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter.
Object
  
Visar bakåtåtergivningsbufferten.
Context3D
 Inherited
Anger om den angivna egenskapen finns och är uppräkningsbar.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Tar bort en avlyssnare från EventDispatcher-objektet.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Anger de faktorer som används för att blanda utdatafärgen för en ritoperation med den befintliga färgen.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Ställer in masken som används när färger skrivs till återgivningsbufferten.
Context3D
  
setCulling(triangleFaceToCull:String):void
Ställ in culling-läge för triangel.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Anger den jämförelsetyp som används för djuptestning.
Context3D
  
    setFillMode(fillMode:String):void
Ange fyllningsläget som används för återgivning.
Context3D
  
Ställer in vertex- och fragment-skuggningsprogram som ska användas för efterföljande återgivning.
Context3D
  
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Ange konstanter som ska användas av skuggningsprogram med värden som lagras i en ByteArray.
Context3D
  
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Ställer in konstanter som ska användas i skuggningsprogram med hjälp av värden lagrade i ett Matrix3D.
Context3D
  
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Ställer in konstantindata för skuggningsprogrammen.
Context3D
 Inherited
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder.
Object
  
Ställer in bakåtåtergivningsbufferten som återgivningsmålet.
Context3D
  
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Anger den angivna texturen som återgivningsmål.
Context3D
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Åsidosätt textursamplerläget manuellt.
Context3D
  
Ställer in en scissor-rektangel, vilket är en typ av ritmask.
Context3D
  
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Ställer in stencilläge och åtgärd.
Context3D
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Ställer in stenciljämförelsevärdet som ska användas för stenciltester.
Context3D
  
Anger texturen som ska användas för ett texturinvärdesregister för ett fragment-program.
Context3D
  
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Anger vilka vertex-datakomponenter som motsvarar ett enskilt invärde för vertex-skuggningsprogram.
Context3D
 Inherited
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner.
Object
 Inherited
Returnerar det angivna objektets strängbeteckning.
Object
 Inherited
Returnerar det angivna objektets primitiva värde.
Object
 Inherited
Kontrollerar om en händelseavlyssnare är registrerad för det här EventDispatcher-objektet eller något av dess överordnade objekt för den angivna händelsetypen.
EventDispatcher
Händelser
 Händelse Sammanfattning Definieras med
 Inherited[utsändningshändelse] Skickas när Flash Player eller AIR får operativsystemfokus och blir aktivt.EventDispatcher
 Inherited[utsändningshändelse] Skickas när Flash Player eller AIR förlorar operativsystemfokus och blir inaktivt.EventDispatcher
Egenskapsdetaljer

backBufferHeight

egenskap
backBufferHeight:int  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 15, AIR 15

Anger höjden på bakåtbufferten, som kan ändras av ett lyckat anrop till metoden configureBackBuffer(). Höjden kan ändras när webbläsarens zoomningsfaktor ändras, om wantsBestResolutionOnBrowserZoom har angetts som true i det senaste lyckade anropet till metoden configureBackBuffer(). Höjdändringen kan identifieras genom att en händelseavlyssnare registreras för händelsen browserZoomChange.



Implementering
    public function get backBufferHeight():int

Relaterade API-element

backBufferWidth

egenskap 
backBufferWidth:int  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 15, AIR 15

Anger bredden på bakåtbufferten, som kan ändras av ett lyckat anrop till metoden configureBackBuffer(). Bredden kan ändras när webbläsarens zoomningsfaktor ändras, om wantsBestResolutionOnBrowserZoom har angetts som true i det senaste lyckade anropet till metoden configureBackBuffer(). Breddändringen kan identifieras genom att en händelseavlyssnare registreras för händelsen browserZoomChange.



Implementering
    public function get backBufferWidth():int

Relaterade API-element

driverInfo

egenskap 
driverInfo:String  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Den typ av drivrutin för grafikbibliotek som används av det här återgivningssammanhanget. Anger om återgivningen använder ett program, en DirectX-drivrutin eller en OpenGL-drivrutin. Dessutom indikeras om maskinvaruåtergivning misslyckades. Om maskinvaruåtergivning misslyckas kommer programvaruåtergivning att användas i Flash Player för Stage3D och driverInfo innehåller ett av följande värden:

  • "Software Hw_disabled=userDisabled" – Kryssrutan för aktivering av maskinvaruacceleration är inte markerad i inställningsgränssnittet för Adobe Flash Player.
  • "Software Hw_disabled=oldDriver" – Det finns kända problem med maskinvarans grafikdrivrutin. En uppdatering av grafikdrivrutinen kan åtgärda detta problem.
  • "Software Hw_disabled=unavailable" – Det finns kända problem med maskinvarans grafikdrivrutin eller fel i maskinvarans grafikinitiering.
  • "Software Hw_disabled=explicit" – Innehållet begärde uttryckligen programvaruåtergivning genom requestContext3D.
  • "Software Hw_disabled=domainMemory" - Innehållet använder domainMemory för vilket en licens krävs när det används med Stage3D maskinvaruåtergivning. Besök adobe.com/go_se/fpl.



Implementering
    public function get driverInfo():String

enableErrorChecking

egenskap 
enableErrorChecking:Boolean

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger om fel som upptäcks vid återgivningen rapporteras till programmet.

När enableErrorChecking är true, synkroniseras metoderna clear() och drawTriangles() och de kan generera fel. När enableErrorChecking är false, är som standard metoderna clear(), och drawTriangles() asynkrona och inga fel rapporteras. Aktivering av felkontroll minskar återgivningsprestandan. Du ska endast aktivera felkontroll i samband med felsökning.



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

Relaterade API-element

maxBackBufferHeight

egenskap 
maxBackBufferHeight:int

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 15, AIR 15

Anger högsta tillåtna höjd på bakåtbufferten. Startvärdet är systemgränsen för plattformen. Egenskapen kan anges till ett värde som är mindre än eller lika med, men inte större än, systemgränsen. Egenskapen kan anges till ett värde som är större än eller lika med, men inte mindre än, minimigränsen. Minimigränsen är ett konstant värde, 32, när bakåtbufferten inte har konfigurerats. Minimigränsen är värdet för parametern height i det senaste lyckade anropet till metoden configureBackBuffer() efter att bakåtbufferten har konfigurerats.



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

maxBackBufferWidth

egenskap 
maxBackBufferWidth:int

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 15, AIR 15

Anger högsta tillåtna bredd på bakåtbufferten. Startvärdet är systemgränsen för plattformen. Egenskapen kan anges till ett värde som är mindre än eller lika med, men inte större än, systemgränsen. Egenskapen kan anges till ett värde som är större än eller lika med, men inte mindre än, minimigränsen. Minimigränsen är ett konstant värde, 32, när bakåtbufferten inte har konfigurerats. Minimigränsen är värdet för parametern width i det senaste lyckade anropet till metoden configureBackBuffer() efter att bakåtbufferten har konfigurerats.



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

profile

egenskap 
profile:String  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 12, AIR 4

Den funktionsstödda profilen som används av det här Context3D-objektet.



Implementering
    public function get profile():String

Relaterade API-element

supportsVideoTexture

egenskap 
supportsVideoTexture:Boolean  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: AIR 17.0, Flash Player 18.0

Anger om Context3D har stöd för videotextur.



Implementering
    public static function get supportsVideoTexture():Boolean

totalGPUMemory

egenskap 
totalGPUMemory:Number  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 21, AIR 21

Returnerar det totala GPU-minnet som tilldelats av Stage3D-datastrukturer i ett program.

När ett GPU-resursobjekt skapas, lagras minnet som används i Context3D. Minnet innehåller indexbuffertar, vertex-buffertar, texturer (utom videotexturer) och program som skapades med detta Context3D.

API:t totalGPUMemory returnerar det totala minnet som förbrukas av resurserna ovan. Standardvärdet som returneras är 0. Det totala GPU-minnet returneras i bytes. Informationen tillhandahålls endast i läget Direct på mobila enheter och i lägena Direct och GPU på datorer. (Om du använder <renderMode>gpu</renderMode> på en dator ändras det till <renderMode>direct</renderMode>)

Detta API kan användas när SWF-versionen är 32 eller senare.



Implementering
    public function get totalGPUMemory():Number
Metoddetaljer

clear

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Rensar färg-, djup- och stencil-bufferterna som är associerade med detta Context3D-objekt och fyller dem med de angivna värdena.

Ställ in mask-parametern för att ange vilken buffert som ska rensas. Använd de konstanter som definierats i Context3DClearMask-klassen för att ställa in mask-parametern. Använd bitvis OR-operatorn, "|", för att lägga till flera buffertar till masken (eller använd Context3DClearMask.ALL). Vid återgivning till en bakåtbuffert måste metoden configureBackBuffer() anropas före eventuella clear()-anrop.

Obs! Om du anger ett parametervärde som ligger utanför det tillåtna intervallet, kommer numeriska parametervärden att klämmas ihop inom intervallet noll till ett. Detsamma gäller om stencil är större än 0xff så ges den värdet 0xff.

Parametrar

red:Number (default = 0.0) — den röda komponenten i färgen med vilken färgbufferten ska rensas, i intervallet noll till ett.
 
green:Number (default = 0.0) — den gröna komponenten i färgen med vilken färgbufferten ska rensas, i intervallet noll till ett.
 
blue:Number (default = 0.0) — den blåa komponenten i färgen med vilken färgbufferten ska rensas, i intervallet noll till ett.
 
alpha:Number (default = 1.0) — alfakomponenten i färgen med vilken färgbufferten ska rensas, i intervallet noll till ett. Alfakomponenten används inte för övertoning. Den skrivs direkt i buffertalfa.
 
depth:Number (default = 1.0) — värdet med vilket djupbufferten ska rensas, i intervallet noll till ett.
 
stencil:uint (default = 0) — 8-bitars värdet med vilket stencilbufferten ska rensas, i intervallet 0x00 till 0xff.
 
mask:uint (default = 0xffffffff) — anger vilka buffertar som ska rensas.


Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.

Relaterade API-element

configureBackBuffer

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger visningsportdimensioner och andra attribut för återgivningsbufferten.

Återgivningen använder dubbla buffertar. Bakåtbufferten växlas med den synliga framåtbufferten när metoden present() anropas. Den minsta buffertstorleken är 32 x 32 pixlar. Den största storleken på bakåtbufferten begränsas av enhetens funktioner och kan också anges av användaren via egenskaperna maxBackBufferWidth och maxBackBufferHeight. Det tar lång tid att konfigurera bufferten. Undvik att ändra buffertstorleken och attributen under normala återgivningsoperationer.

Parametrar

width:int — bredden i pixlar på bufferten.
 
height:int — höjden i pixlar på bufferten.
 
antiAlias:int — ett heltalsvärde som anger den begärda kantutjämningskvaliteten. Värdet motsvarar antalet delexempel som används vid kantutjämning. Om fler delexempel används måste fler beräkningar utföras, men den relativa prestandapåverkan beror på den maskinvara som används för återgivningen. Kantutjämningstypen eller om kantutjämning utförs över huvud taget beror på enheten och återgivningsläget. Kantutjämning stöds inte av programåtergivningssammanhanget.
0Ingen kantutjämning
2Minimal kantutjämning.
4Högkvalitativ kantutjämning.
16Mycket högkvalitativ kantutjämning.
 
enableDepthAndStencil:Boolean (default = true)false anger att ingen djup- eller stencilbuffert skapas, medan true anger att en djup- och stencilbuffert skapas. För ett AIR 3.2-program eller senare, som kompilerats med SWF-version 15 eller senare, gäller att om elementet renderMode i programbeskrivningsfilen är direct, så måste elementet depthAndStencil i programbeskrivningsfilen ha samma värde som det här argumentet. Värdet på elementet depthAndStencil är som standard false.
 
wantsBestResolution:Boolean (default = false) — Värdet true innebär att om enheten stöder HiDPI-skärmar försöker det tilldela en större bakåtbuffert än vad som anges i parametrarna width och height. Eftersom detta lägger till fler pixlar och potentiellt ändrar resultatet av skuggningsåtgärder är det inaktiverat som standard. Använd Stage.contentsScaleFactor för att avgöra hur mycket den inbyggda bakåtbufferten ökade.
 
wantsBestResolutionOnBrowserZoom:Boolean (default = false)true anger att storleken på bakåtbufferten ska öka proportionellt efter ökningen av webbläsarens zoomningsfaktor. Inställningen av det här värdet gäller zoomning i alla webbläsare. Standardvärdet för parametern är false. Ange egenskaperna maxBackBufferWidth och maxBackBufferHeight för att begränsa storleksökningen på bakåtbufferten. Använd backBufferWidth och backBufferHeight för att fastställa den aktuella storleken på bakåtbufferten.


Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Felaktig indatastorlek: Parametern width eller height är mindre än den minsta tillåtna storleken för bakåtbufferten eller större än den största tillåtna storleken för bakåtbufferten.
 
Error — 3709: Flaggan depthAndStencil i programbeskrivningen måste matcha den booleska egenskapen enableDepthAndStencil som skickas till configureBackBuffer() i Context3D-objektet.

createCubeTexture

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Skapar ett CubeTexture-objekt.

Använd ett CubeTexture-objekt för att skicka kubtexturbitmappar till återgivningssammanhanget och för att referera till en kubtextur under återgivning. En kubtextur består av sex lika stora fyrkantstexturer ordnade i en kubtopologi. Den är användbar för att beskriva miljömappningar.

Du kan inte skapa CubeTexture-objekt med en CubeTexture-konstruktor, utan du ska i stället använda denna metod. Sedan du skapat ett CubeTexture-objekt, skickar du texturbitmappsdata med CubeTexture-objektets uploadFromBitmapData()-, uploadFromByteArray()- eller uploadCompressedTextureFromByteArray()-metod.

Parametrar

size:int — Texturens kantlängd i texeler.
 
format:String — Texel-formatet för uppräkningslistan för Context3DTextureFormat.

Med texturkomprimering kan du lagra komprimerade texturbilder direkt på GPU:n, vilket kräver mindre GPU-minne och minnesbandbredd. Vanligtvis komprimeras komprimerade texturer offline och överförs till grafikprocessorn i komprimerat format med metoden Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 och AIR 3.4 på skrivbordsplattformar har stöd för texturkomprimering under körning, vilket kan vara praktiskt i vissa situationer, till exempel vid återgivning av dynamiska texturer från vektorgrafik. Observera att den här funktionen för tillfället inte är tillgänglig på mobila plattformar, och ett ArgumentError-fel (Felmatchat texturformat) genereras i stället. Gör så här för att använda texturkomprimering under körning: 1. Skapa texturobjektet genom att anropa metoden Context3D.createCubeTexture() och skicka antingen flash.display3D.Context3DTextureFormat.COMPRESSED eller flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA som formatparameter. 2. Använd den instans av flash.display3D.textures.Texture som returneras av createCubeTexture() och anropa antingen flash.display3D.textures.CubeTexture.uploadFromBitmapData() eller flash.display3D.textures.CubeTexture.uploadFromByteArray() för att överföra och komprimera texturen i ett steg.

 
optimizeForRenderToTexture:Boolean — Ange det som true om texturen ska användas som återgivningsmål.
 
streamingLevels:int (default = 0) — Den mipmappnivå som måste läsas in innan bilden återges. Med direktuppspelning av texturer kan du läsa in och visa de minsta mip-nivåerna först och visa bilder med allt högre kvalitet efterhand som texturerna läses in. Slutanvändare kan visa bilder med lägre kvalitet i ett program medan bilderna med hög kvalitet läses in.

streamingLevels är som standard 0, vilket innebär att bilden med högst kvalitet i mipmappen måste läsas in innan bilden återges. Den här parametern har lagts till i Flash Player 11.3 och AIR 3.3. Om standardvärdet används bevaras beteendet från tidigare versioner av Flash Player och AIR.

Ange streamingLevels som ett värde mellan 1 och antalet bilder i mipmappen för att aktivera direktuppspelning av texturer. Anta att du har en mipmapp som omfattar en huvudbild på 64x64 pixlar vid högsta kvalitet. Bilder med lägre kvalitet i mipmappen är 32x32, 16x16, 8x8, 4x4, 2x2 och 1x1 pixlar, för sammanlagt 7 bilder eller 7 nivåer. Nivå 0 är bilden med högst kvalitet. Det största tillåtna värdet för den här egenskapen är log2(min(width,height)). För en huvudbild på 64x64 pixlar är det största möjliga värdet på streamingLevels därför 7. Ange den här egenskapen som 3 om du vill återge bilden så snart bilden på 8x8 pixlar har lästs in.

Obs! Om du anger den här egenskapen som större än 0 kan det påverka minnesanvändning och prestanda.

Returnerar
flash.display3D.textures:CubeTexture

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många Texture-objekt skapas eller om mängden minne som tilldelats texturer inte räcker.
 
ArgumentError — Djuptextur är inte implementerat: Om du försöker skapa en djuptextur.
 
ArgumentError — Texturstorleken är noll: Om parametern size inte är större än noll.
 
ArgumentError — Texturen har inte tvåpotens: Om parametern size inte är en tvåpotens.
 
ArgumentError — Texturen är för stor: Om parametern size är större än 1 024.
 
Error — Det gick inte att skapa texturen: Om CubeTexture-objektet inte kunde skapas av återgivningssammanhanget (men information om orsaken saknas).
 
ArgumentError — Ogiltig direktuppspelningsnivå: Om streamingLevels är större än eller lika med log2(size).

Relaterade API-element

createIndexBuffer

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Skapar ett IndexBuffer3D-objekt.

Använd ett IndexBuffer3D-objekt för att skicka en uppsättning med triangelindex till återgivningssammanhanget och för att referera till den indexuppsättningen för återgivning. Varje index i indexbufferten refererar till ett motsvarande vertex i en vertex-buffert. Varje uppsättning med tre index identifierar en triangel. Skicka IndexBuffer3D-objektet till metoden drawTriangles() för att återge en eller flera trianglar definierade i indexbufferten.

Du kan inte skapa IndexBuffer3D-objekt med klasskonstruktorn för IndexBuffer3D, utan du ska använda den här metoden i stället. Sedan du skapat ett IndexBuffer3D-objekt, skickar du indexen med IndexBuffer3D-objektets uploadFromVector()- eller uploadFromByteArray()-metod.

Parametrar

numIndices:int — antalet vertex som ska lagras i bufferten.
 
bufferUsage:String (default = "staticDraw") — den förväntade buffertanvändningen. Använd en av de konstanter som definieras i Context3DBufferUsage. Maskinvarans drivrutin kan utföra lämplig optimering när den ställs in rätt. Den här parametern är bara tillgänglig efter Flash 12/AIR 4.

Returnerar
IndexBuffer3D

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många indexbuffertar skapas eller om mängden minne som tilldelats indexbuffertar inte räcker.
 
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.
 
ArgumentError — Bufferten är för stor: när numIndices är större än eller lika med 0xf0000.

Relaterade API-element

createProgram

()metod 
public function createProgram():Program3D

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Skapar ett Program3D-objekt.

Använd ett Program3D-objekt för att skicka skuggningsprogram till återgivningssammanhanget och för att referera till skickade program under återgivning. I ett Program3D-objekt lagras två program, ett vertex-program och ett fragment-program (kallas även pixel-program). Programmen är skrivna i ett binärt shader-assembly-språk.

Du kan inte skapa Program3D-objekt med en Program3D-konstruktor, utan du ska använda den här metoden i stället. Sedan du skapat ett Program3D-objekt, skickar du programmen med Program3D-objektets upload()-metod.

Returnerar
Program3D

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Antalet program överstiger 4096 eller den totala minnesstorleken överstiger 16 MB (använd dispose för att frigöra Program3D-resurser).

Relaterade API-element


Exempel  ( Så här använder du exemplet )

I det här exemplet visas hur du skapar, överför och aktiverar ett par vertex- och pixel-program till ett återgivningssammanhang. Tänk på att objektet, renderContext, är en instans av klassen Context3D. Programmen i exemplet har skrivits i AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

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

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

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

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

createRectangleTexture

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.8, AIR 3.8

Skapar ett RectangleTexture-objekt.

Använd ett RectangleTexture-objekt för att skicka texturbitmappar till återgivningssammanhanget och för att referera till en textur under återgivning.

Du kan inte skapa RectangleTexture-objekt med en RectangleTexture-konstruktor. Använd den här metoden i stället. När du har skapat ett RectangleTexture-objekt överför du texturbitmapparna med Texture-metoden uploadFromBitmapData() eller uploadFromByteArray().

Observera att 32-bitars heltalstexturer lagras i ett packat BGRA-format för att matcha Flash BitmapData-formatet. För flyttalstexturer används ett konventionellt RGBA-format.

Rektangeltexturer skiljer sig från vanliga 2D-texturer genom att deras bredd och höjd inte måste vara tvåpotenser. De innehåller inte heller mipmappar. De är mest användbara vid återgivning till texturer. Om en rektangeltextur används med en sampler som använder mipmappfilter eller upprepad brytning misslyckas drawTriangles-anropet. Rektangeltexturer tillåter inte heller direktuppspelning. De enda texturformat som stöds av rektangeltexturer är BGRA, BGR_PACKED och BGRA_PACKED. Komprimerade texturformat stöds inte av rektangeltexturer.

Parametrar

width:int — Texturbredden i texeler.
 
height:int — Texturhöjden i texeler.
 
format:String — Texel-formatet för uppräkningslistan för Context3DTextureFormat.
 
optimizeForRenderToTexture:Boolean — Ange det som true om texturen ska användas som återgivningsmål.

Returnerar
flash.display3D.textures:RectangleTexture

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många Texture-objekt skapas eller om mängden minne som tilldelats texturer inte räcker.
 
ArgumentError — Texturstorleken är noll: Om någon av parametrarna width eller height är mindre än eller lika med noll.
 
ArgumentError — Texturen är för stor: Om någon av parametrarna width eller height är större än 2 048.
 
Error — Det gick inte att skapa texturen: Om Texture-objektet inte kunde skapas av återgivningssammanhanget (men information om orsaken saknas).
 
Error — Kräver baslinjeprofil eller en mer avancerad profil: om en rektangulär textur skapas med en begränsad baslinjeprofil.

Relaterade API-element

createTexture

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Skapar ett Texture-objekt.

Använd ett Texture-objekt för att skicka texturbitmappar till återgivningssammanhanget och för att referera till en textur under återgivning.

Du kan inte skapa Texture-objekt med en Texture-konstruktor, utan du ska i stället använda denna metod. Sedan du skapat ett Texture-objekt, skickar du texturbitmappen med Texture-objektets uploadFromBitmapData()-, uploadFromByteArray()- eller uploadCompressedTextureFromByteArray()-metod.

Observera att 32-bitars heltalstexturer lagras i ett packat BGRA-format för att matcha Flash BitmapData-formatet. För flyttalstexturer används ett konventionellt RGBA-format.

Parametrar

width:int — Texturbredden i texeler.
 
height:int — Texturhöjden i texeler.
 
format:String — Texel-formatet för uppräkningslistan för Context3DTextureFormat.

Med texturkomprimering kan du lagra komprimerade texturbilder direkt på GPU:n, vilket kräver mindre GPU-minne och minnesbandbredd. Vanligtvis komprimeras komprimerade texturer offline och överförs till grafikprocessorn i komprimerat format med metoden Texture.uploadCompressedTextureFromByteArray. Flash Player 11.4 och AIR 3.4 på skrivbordsplattformar har stöd för texturkomprimering under körning, vilket kan vara praktiskt i vissa situationer, till exempel vid återgivning av dynamiska texturer från vektorgrafik. Observera att den här funktionen för tillfället inte är tillgänglig på mobila plattformar, och ett ArgumentError-fel (Felmatchat texturformat) genereras i stället. Gör så här för att använda texturkomprimering under körning: 1. Skapa texturobjektet genom att anropa metoden Context3D.createTexture() och skicka antingen flash.display3D.Context3DTextureFormat.COMPRESSED eller flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA som formatparameter. 2. Använd den instans av flash.display3D.textures.Texture som returneras av createTexture() och anropa antingen flash.display3D.textures.Texture.uploadFromBitmapData() eller flash.display3D.textures.Texture.uploadFromByteArray() för att överföra och komprimera texturen i ett steg.

 
optimizeForRenderToTexture:Boolean — Ange det som true om texturen ska användas som återgivningsmål.
 
streamingLevels:int (default = 0) — Den mipmappnivå som måste läsas in innan bilden återges. Med direktuppspelning av texturer kan du läsa in och visa de minsta mip-nivåerna först och visa bilder med allt högre kvalitet efterhand som texturerna läses in. Slutanvändare kan visa bilder med lägre kvalitet i ett program medan bilderna med hög kvalitet läses in.

streamingLevels är som standard 0, vilket innebär att bilden med högst kvalitet i mipmappen måste läsas in innan bilden återges. Den här parametern har lagts till i Flash Player 11.3 och AIR 3.3. Om standardvärdet används bevaras beteendet från tidigare versioner av Flash Player och AIR.

Ange streamingLevels som ett värde mellan 1 och antalet bilder i mipmappen för att aktivera direktuppspelning av texturer. Anta att du har en mipmapp som omfattar en huvudbild på 64x64 pixlar vid högsta kvalitet. Bilder med lägre kvalitet i mipmappen är 32x32, 16x16, 8x8, 4x4, 2x2 och 1x1 pixlar, för sammanlagt 7 bilder eller 7 nivåer. Nivå 0 är bilden med högst kvalitet. Det största tillåtna värdet för den här egenskapen är log2(min(width,height)). För en huvudbild på 64x64 pixlar är det största möjliga värdet på streamingLevels därför 7. Ange den här egenskapen som 3 om du vill återge bilden så snart bilden på 8x8 pixlar har lästs in.

Obs! Om du anger den här egenskapen som större än 0 kan det påverka minnesanvändning och prestanda.

Returnerar
flash.display3D.textures:Texture

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många Texture-objekt skapas eller om mängden minne som tilldelats texturer inte räcker.
 
ArgumentError — Djuptextur är inte implementerat: Om du försöker skapa en djuptextur.
 
ArgumentError — Texturstorleken är noll: Om någon av parametrarna width eller height är mindre än eller lika med noll.
 
ArgumentError — Texturen har inte tvåpotens: Om någon av parametrarna width eller height inte är en tvåpotens.
 
ArgumentError — Texturen är för stor: om någon av parametrarna width eller height är större än 2 048 för baslinjeprofil och begränsad baslinjeprofil eller om någon av parametrarna width eller height är större än 4 096 för utökad baslinjeprofil eller en mer avancerad profil.
 
Error — Det gick inte att skapa texturen: Om Texture-objektet inte kunde skapas av återgivningssammanhanget (men information om orsaken saknas).
 
ArgumentError — Ogiltig direktuppspelningsnivå: Om streamingLevels är större än eller lika med log2(min(width,height)).

Relaterade API-element

createVertexBuffer

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Skapar ett VertexBuffer3D-objekt.

Använd ett VertexBuffer3D-objekt för att skicka en uppsättning med vertex-data till återgivningssammanhanget. En vertex-buffert innehåller de data som behövs för att återge varje punkt i scengeometrin. De dataattribut som är associerade med varje vertex innehåller vanligtvis placerings-, färg- och texturkoordinater, och de används som indata för vertex-skuggningsprogrammet. Identifiera de datavärden som motsvarar en av inmatningarna till vertex-programmet som använder setVertexBufferAt()-metoden. Du kan ange upp till sextiofyra 32-bitarsvärden för varje vertex.

Du kan inte skapa VertexBuffer3D-objekt med en VertexBuffer3D-konstruktor, utan du ska använda den här metoden i stället. Sedan du skapat ett VertexBuffer3D-objekt, skickar du indexen med VertexBuffer3D-objektets uploadFromVector()- eller uploadFromByteArray()-metod.

Parametrar

numVertices:int — antalet vertex som ska lagras i bufferten. Högsta antalet vertex i en enskild buffert är 65535.
 
data32PerVertex:int — antalet 32-bitars (4 byte) datavärden associerade med varje vertex. Det högsta antalet 32-bitars dataelement per vertex är 64 (eller 256) byte. Observera att endast åtta attributregister är åtkomliga med ett vertex-skuggningsprogram vid en given tidpunkt. Använd SetVertextBufferAt() för att välja attribut från en vertex-buffert.
 
bufferUsage:String (default = "staticDraw") — den förväntade buffertanvändningen. Använd en av de konstanter som definieras i Context3DBufferUsage. Maskinvarans drivrutin kan utföra lämplig optimering när den ställs in rätt. Den här parametern är bara tillgänglig efter Flash 12/AIR 4

Returnerar
VertexBuffer3D

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många vertex-buffertobjekt skapas eller om mängden minne som tilldelats vertex-buffertar inte räcker.
 
ArgumentError — Bufferten är för stor: När numVertices är större än 0x10000 eller data32PerVertex är större än 64.
 
ArgumentError — Buffertens storlek är noll: När numVertices är noll eller data32PerVertex är noll.
 
ArgumentError — Det gick inte att skapa buffert: Om VertexBuffer3D-objektet inte kunde skapas av återgivningssammanhanget (men ytterligare information om orsaken saknas).
 
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.

Relaterade API-element


Exempel  ( Så här använder du exemplet )

I följande exempel visas hur du skapar och läser in en vertex-databuffert. Bufferten i exemplet innehåller två typer av data för varje vertex: positionen, som x-, y-, z-koordinater, och färgen, som rgb-komponenter. När vertex-bufferten har skapats anropas metoden setVertexBufferAt() i exemplet för att ange att de första tre datapunkterna skickas till vertex-programmet som tre flyttalsvärden i va0 och att de andra tre datapunkterna skickas som va1. Ett vertex-program kan ha upp till 8 indatavärden, som även kallas vertex-attributregister, som definieras på det här sättet.
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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: AIR 20.0

Skapar ett VertexBuffer3D-objekt för instansdata.

Använd ett VertexBuffer3D-objekt när du vill skicka en uppsättning instansdata till återgivningskontexten. Vertex-bufferten innehåller de data som behövs för att återge varje instans i scengeometrin. Vertex-buffertar med instansdata tillhandahåller attribut som är gemensamma för alla vertex i en instans och fungerar som indata till vertex-skuggningsprogrammet. Identifiera de datavärden som motsvarar en uppsättning indata för vertex-programmet med hjälp av metoden setVertexBufferAt(). Du kan ange upp till sextiofyra 32-bitarsvärden för varje element i vertexbufferten.

Du kan inte skapa VertexBuffer3D-objekt med en VertexBuffer3D-konstruktor, utan du ska använda den här metoden i stället. Sedan du skapat ett VertexBuffer3D-objekt, skickar du indexen med VertexBuffer3D-objektets uploadFromVector()- eller uploadFromByteArray()-metod.

Parametrar

numVertices:int — antalet element som ska lagras i bufferten. Högsta antalet element i en enskild buffert är 65535.
 
data32PerVertex:int — antalet 32-bitars (4 byte) datavärden som associeras med varje element. Det högsta antalet 32-bitars dataelement per vertex är 64 (eller 256) byte.
 
instancesPerElement:int — antalet instanser som ska använda ett element i vertexbufferten.
 
bufferUsage:String (default = "staticDraw") — den förväntade buffertanvändningen. Använd en av de konstanter som definieras i Context3DBufferUsage. Maskinvarans drivrutin kan utföra lämplig optimering när den ställs in rätt. Den här parametern är bara tillgänglig efter Flash 12/AIR 4

Returnerar
VertexBuffer3D

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många vertex-buffertobjekt skapas eller om mängden minne som tilldelats vertex-buffertar inte räcker.
 
ArgumentError — Bufferten är för stor: När numVertices är större än 0x10000 eller data32PerVertex är större än 64.
 
ArgumentError — Buffertens storlek är noll: När numVertices är noll eller data32PerVertex är noll.
 
ArgumentError — Det gick inte att skapa buffert: Om VertexBuffer3D-objektet inte kunde skapas av återgivningssammanhanget (men ytterligare information om orsaken saknas).
 
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.
 
Error — Utökad standardprofil eller bättre krävs: om den här metoden anropas när den begärda profilen är lägre än den utökade standardprofilen.
 
Error — Ogiltiga instanser per element: om instancesPerElement inte är större än noll.

Relaterade API-element

createVideoTexture

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: AIR 17.0, Flash Player 18.0

Skapar ett VideoTexture-objekt.

Använd ett VideoTexture-objekt för att hämta videobildrutor som textur från NetStream- eller Camera-objektet och överföra videobildrutorna till återgivningssammanhanget.

Det går inte att skapa VideoTexture-objektet med VideoTexture-konstruktorn. Använd den här metoden i stället. När du har skapat ett VideoTexture-objekt kopplar du NetStream- eller Camera-objektet för att hämta videobildrutorna med VideoTexture-metoden attachNetStream() eller attachCamera().

Tänk på att den här metoden returnerar null om systemet saknar stöd för den här funktionen.

VideoTexture innehåller inte mipmappar. Om VideoTexture används med en sampler som använder mipmappfilter eller upprepad brytning misslyckas drawTriangles-anropet. VideoTexture kan behandlas som BGRA-textur av skuggningar. Försök att instansiera VideoTexture-objektet misslyckas om Context3D har begärts med programvaruåtergivningsläge.

Högst 4 VideoTexture-objekt kan användas per Context3D-instans. På mobilenheter kan det faktiska antalet VideoTexture-objekt som stöds vara mindre än 4 på grund av plattformens begränsningar.

Returnerar
flash.display3D.textures:VideoTexture

Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Resursgräns har överskridits: Om för många Texture-objekt skapas eller om mängden minne som tilldelats texturer inte räcker.
 
Error — Det gick inte att skapa texturen: Om Texture-objektet inte kunde skapas av återgivningssammanhanget (men information om orsaken saknas).

dispose

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Frigör alla resurser och interna lagerutrymmen som har att göra med detta Context3D.

Alla indexbuffertar, vertex-buffertar, texturer och program som skapades med detta Context3D tas bort precis som om var och en av dem anropades med dispose(). Dessutom tas Context3D bort så att alla temporära buffertar och bakåtbufferten frigörs. Om du anropar configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() eller drawToBitmapData(), efter ett dispose()-anrop, kommer ett undantag att genereras.

Varning: Om du anropar dispose() för ett Context3D-objekt medan det fortfarande finns en händelseavlyssnare för Events.CONTEXT3D_CREATE inställd på det associerade Stage3D-objektet, kommer dispose()-anropet att simulera en enhetsförlust. Ett nytt Context3D-objekt skapas då för Stage3D-objektet och Events.CONTEXT3D_CREATE-händelsen utlöses ytterligare en gång. Om detta inte är önskvärt tar du bort händelseavlyssnaren från Stage3D-objektet innan du anropar dispose() eller anger parametern recreate som false.

Parametrar

recreate:Boolean (default = true)

Relaterade API-element

    drawToBitmapData

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: AIR 3

Ritar upp den aktuella återgivningsbufferten i en bitmapp.

Det aktuella innehållet i bakåtåtergivningsbufferten kopieras till ett BitmapData-objekt. Detta kan vara en långsam åtgärd som kan ta upp till en sekund. Det ska användas med stor försiktighet. Observera att denna funktion inte kopierar framåtåtergivningsbufferten (den som visas på scenen) utan den som den ritas i. Om du vill hämta den återgivna bilden på scenen ska du anropa drawToBitmapData() omedelbart före present()-anropet.

Från och med AIR 25 har två nya parametrar lagts till i API:t drawToBitmapData(). Detta API har nu tre parametrar. Den första är den befintliga parametern destination:BitmapData. Den andra parametern är srcRect:Rectangle, som är målrektangeln för stage3D. Den tredje parametern är destPoint:Point, som är koordinaten på målbitmappen. Parametrarna srcRect och destPoint är valfria och standardvärdena är (0,0,bitmapWidth,bitmapHeight) respektive (0,0).

När bilden ritas upp kommer den inte att skalförändras för att anpassas till bitmappen. I stället kommer innehållet att klippas till den storlek som gäller för målbitmappen.

I Flash BitmapData-objekt lagras färger som redan är multiplicerade med alfakomponenten. Om till exempel de "rena" RGB-färgskomponenterna för en pixel är (0x0A, 0x12, 0xBB) och alfakomponenten är 0x7F (.5), kommer pixeln att lagras i BitmapData-objektet med RGBA-värdena (0x05, 0x09, 0x5D, 0x7F). Du kan ställa in blandningsfaktoren så att färgerna som återges för bufferten multipliceras med alfa eller utföra åtgärden i fragmentskuggningen. Det återgivna sammanhanget validerar inte att färgerna är lagrade i ett förmultiplicerat format.

Parametrar

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


Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.
 
Error — 3802: Om någon av parametrarna destPoint:Point eller srcRect:Rectangle ligger utanför bitmap-/stage3D-koordinaterna eller om icke-numeriska (NaN) värden används som indata.

Exempel  ( Så här använder du exemplet )

I följande exempel återges två trianglar till både den normala återgivningsbufferten och till ett BitmapData-objekt. BitmapData-objektet som visas med hjälp av ett Bitmap-objekt som lagts till i den normala visningslistan. Ett skuggfilter används på bitmappsåtergivningen.
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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Återge de angivna trianglarna med hjälp av de aktuella buffertarna och läget för detta Context3D-objekt.

För varje triangel bearbetas triangelhörnpunkterna med vertex-skuggningsprogram och triangels yta med pixel-skuggningsprogram. Färgresultatet från pixel-programmet för varje pixel ritas på återgivningsmålet beroende på stencil-operationerna, djuptestet, källan och mål-alfa samt på det aktuella blandningsläget. Målet för återgivningen kan vara huvudåtergivningsbufferten eller textur.

Om culling är aktiverad (med metoden setCulling()), kommer trianglarna att tas bort från scenen innan pixel-programmet körs. Om stencil- och djuptestning är aktiverade, kan resultatpixlar från pixel-programmet tas bort utan att återgivningsmålet uppdateras. Dessutom kan pixel-programmet avstå från att leverera resultat för en färg för en pixel.

De återgivna trianglarna visas inte i visningsporten förrän du anropar metoden present(). Efter varje present()-anrop, måste metoden clear() anropas före det första drawTriangles()-anropet. I annat fall kommer återgivningen att misslyckas.

När enableErrorChecking är false, kommer den här funktionen att returneras omedelbart utan att vänta på något resultat och generera undantag bara om denna COntext3D-instans har kasserats eller om det finns alltför många ritanrop. Om återgivningssammanhangsläget är ogiltigt kommer återgivningen att misslyckas. När egenskapen enableErrorChecking är true, returneras den här funktionen efter det att trianglarna har ritats upp, och undantag genereras för alla ritfel och ogiltiga sammanhangslägen.

Parametrar

indexBuffer:IndexBuffer3D — en uppsättning vertex-index som refererar de vertex som ska återges.
 
firstIndex:int (default = 0) — indexet för det första vertex-indexet som valts för att återges. Standard är 0.
 
numTriangles:int (default = -1) — antalet trianglar som ska återges. Varje triangel upptar tre index. Skicka -1 för att rita alla trianglar i index-bufferten. Standard är -1.


Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Om denna metod anropas alltför många gånger mellan anrop av present(). Högsta antal anrop är 32 768.

Följande fel genereras endast när egenskapen enableErrorChecking är true:

 
Error — Behöver rensas för ritning: Om bufferten inte har rensats sedan det senaste present()-anropet.
 
Error — Om ett giltigt Program3D-objekt inte är inställt.
 
Error — Ingen giltig indexbuffert är inställd: Om ett IndexBuffer3D-objekt inte är inställt.
 
Error — Tillståndskontroll av parametrar misslyckades: När antalet trianglar som ska ritas eller när firstIndex överstiger tillåtna värden.
 
RangeError — Inte tillräckligt många index i bufferten: När det inte finns tillräckligt många index i bufferten för att definiera antalet trianglar som ska ritas.
 
Error — Sampel som binder textur binds även till återgivning: När återgivningsmålet är en textur och när den texturen är tilldelad till ett texturinvärde i det aktuella fragment-programmet.
 
Error — Sampel binder ogiltig textur: En ogiltig textur anges som invärde för det aktuella fragment-programmet.
 
Error — Sampler-format matchar inte texturformat: När texturen som är tilldelad som invärdet till det aktuella fragment-programmet har ett annat format än det som är angivet för sampler-registret. När till exempel en 2D-textur är tilldelad till ett kubtextur-sampler.
 
Error — Sampel binder odefinierad textur: Det aktuella fragment-programmet har åtkomst till ett texturregister som inte har ställts in (med setTextureAt()).
 
Error — Samma textur behöver samma sampler-parametrar: Om en textur används för mer än ett sampler-register, måste alla sampler ha samma inställningar. Du kan till exempel inte ange att sampler ska klämma och det andra omsluta.
 
Error — Texturen är bunden men används inte: En textur är inställd som skuggningsindata, men den används inte.
 
Error — Flödet används inte: En vertex-buffert är tilldelad till ett vertex-attributinvärde, men vertex-programmet refererar inte till motsvarande register.
 
Error — Flödet är ogiltigt: Ett VertexBuffer3D-objekt som är tilldelat till ett vertex-programinvärde är inte ett giltigt objekt.
 
RangeError — Flödet har inte tillräckligt många vertex: En vertex-buffert med data för att rita den angivna triangeln har inte tillräckligt med data.
 
RangeError — Förskjutning för flödes-vertex utanför tillåtet intervall: Förskjutningen som anges i ett setVertexBufferAt()-anrop är negativet eller ligger utanför bufferten.
 
Error — Flödet läses men ställs inte in: Ett vertex-attribut som används i det aktuella vertex-programmet är inte inställt (med setVertexBufferAt()).

Relaterade API-element


Exempel  ( Så här använder du exemplet )

Följande klass ritar två trianglar till en Stage3D-visningsport på scenen. Trianglarna delar ett hörn som är placerat i origo (0,0,0).

Trianglarna är definierade med vertex-bufferten och index-bufferten. Vertex-bufferten innehåller position och färginformationen för varje triangelhörn. Index-bufferten innehåller index för vertex-bufferten. Tre index behövs för att definiera en triangel. En triangel som till exempel bestäms av de tre första punkterna i vertex-bufferten visas som 0,1,2 i index-bufferten.

I detta enkla exempel utförs inga 3D-omformningar. Endast objekt i det kanoniska visningsområdet (en 2x2x1 stor volym) kan visas och trianglarnas koordinater definieras så att de ligger innanför detta område. När emellertid en vanlig 3D-scen återges projicerar du de objekt som ska återges från världskoordinatsystemet till visningsområdet med hjälp av antingen en perspektivprojektion eller en ortografisk projektion.

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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: AIR 20.0

Återge de angivna triangelinstanserna med hjälp av de aktuella bufferterna och läget för Context3D-objektet.

Triangelhörnpunkterna för varje triangelinstans bearbetas med vertex-skuggningsprogrammet och trianglarnas ytor bearbetas med pixelskuggningsprogram. Färgresultatet från pixel-programmet för varje pixel ritas på återgivningsmålet beroende på stencil-operationerna, djuptestet, källan och mål-alfa samt på det aktuella blandningsläget. Målet för återgivningen kan vara huvudåtergivningsbufferten eller textur.

Om culling är aktiverad (med metoden setCulling()), kommer trianglarna att tas bort från scenen innan pixel-programmet körs. Om stencil- och djuptestning är aktiverade, kan resultatpixlar från pixel-programmet tas bort utan att återgivningsmålet uppdateras. Dessutom kan pixel-programmet avstå från att leverera resultat för en färg för en pixel.

De återgivna triangelinstanserna visas inte i visningsporten förrän du anropar metoden present(). Efter varje present()-anrop, måste metoden clear() anropas före det första drawTrianglesInstanced()-anropet, annars misslyckas återgivningen.

När enableErrorChecking är false, kommer den här funktionen att returneras omedelbart utan att vänta på något resultat och generera undantag bara om denna COntext3D-instans har kasserats eller om det finns alltför många ritanrop. Om återgivningssammanhangsläget är ogiltigt kommer återgivningen att misslyckas. När egenskapen enableErrorChecking är true, returneras den här funktionen efter det att trianglarna har ritats upp, och undantag genereras för alla ritfel och ogiltiga sammanhangslägen.

Den här metoden kan generera ett undantagsfel om den instansierade bufferten sekvenseras felaktigt med SetVertexAt(). Med Direct3D 9 måste till exempel indexerade geometridata och antalet instanser som ska ritas alltid ställas in på ”stream zero” med API:t SetStreamSourceFreq().

Det innebär att vertexbufferten som skapas med CreateVertexBufferForInstance() inte bör placeras med det lägsta indexnumret när den ordnas med SetVertexBufferAt() som indata för vertexskuggningsprogrammet. Den vertexbuffert som genereras med CreateVertexBuffer() måste placeras med ett lägre indexnummer än det för CreateVertexBufferForInstance(). I allmänhet måste geometridata placeras före data per instans med SetVertexBufferAt().

Parametrar

indexBuffer:IndexBuffer3D — en uppsättning vertex-index som refererar de vertex som ska återges.
 
numInstances:int — antal instanser som ska återges.
 
firstIndex:int (default = 0) — indexet för det första vertex-indexet som valts för att återges. Standard är 0.
 
numTriangles:int (default = -1) — antalet trianglar som ska återges. Varje triangel upptar tre index. Skicka -1 för att rita alla trianglar i index-bufferten. Standard är -1.


Utlöser
Error — Objekt har tagits bort: om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.
 
Error — Om denna metod anropas alltför många gånger mellan anrop av present(). Högsta antal anrop är 32 768.
 
Error — Utökad standardprofil eller bättre krävs: om den här metoden anropas när den begärda profilen är lägre än den utökade standardprofilen.
 
Error — Om den här metoden anropas med negativa numInstances.

Följande fel genereras endast när egenskapen enableErrorChecking är true:

 
Error — Behöver rensas för ritning: Om bufferten inte har rensats sedan det senaste present()-anropet.
 
Error — Om ett giltigt Program3D-objekt inte är inställt.
 
Error — Ingen giltig indexbuffert är inställd: Om ett IndexBuffer3D-objekt inte är inställt.
 
Error — Tillståndskontroll av parametrar misslyckades: När antalet trianglar som ska ritas eller när firstIndex överstiger tillåtna värden.
 
RangeError — Inte tillräckligt många index i bufferten: När det inte finns tillräckligt många index i bufferten för att definiera antalet trianglar som ska ritas.
 
Error — Sampel som binder textur binds även till återgivning: När återgivningsmålet är en textur och när den texturen är tilldelad till ett texturinvärde i det aktuella fragment-programmet.
 
Error — Sampel binder ogiltig textur: En ogiltig textur anges som invärde för det aktuella fragment-programmet.
 
Error — Sampler-format matchar inte texturformat: När texturen som är tilldelad som invärdet till det aktuella fragment-programmet har ett annat format än det som är angivet för sampler-registret. När till exempel en 2D-textur är tilldelad till ett kubtextur-sampler.
 
Error — Sampel binder odefinierad textur: Det aktuella fragment-programmet har åtkomst till ett texturregister som inte har ställts in (med setTextureAt()).
 
Error — Samma textur behöver samma sampler-parametrar: Om en textur används för mer än ett sampler-register, måste alla sampler ha samma inställningar. Du kan till exempel inte ange att sampler ska klämma och det andra omsluta.
 
Error — Texturen är bunden men används inte: En textur är inställd som skuggningsindata, men den används inte.
 
Error — Flödet används inte: En vertex-buffert är tilldelad till ett vertex-attributinvärde, men vertex-programmet refererar inte till motsvarande register.
 
Error — Flödet är ogiltigt: Ett VertexBuffer3D-objekt som är tilldelat till ett vertex-programinvärde är inte ett giltigt objekt.
 
RangeError — Flödet har inte tillräckligt många vertex: En vertex-buffert med data för att rita den angivna triangeln har inte tillräckligt med data.
 
RangeError — Förskjutning för flödes-vertex utanför tillåtet intervall: Förskjutningen som anges i ett setVertexBufferAt()-anrop är negativet eller ligger utanför bufferten.
 
Error — Flödet läses men ställs inte in: Ett vertex-attribut som används i det aktuella vertex-programmet är inte inställt (med setVertexBufferAt()).
 
Error — Vertexbuffertströmmen innehåller inte tillräckligt många element för instanser: Om en vertexbuffertström inte innehåller tillräckligt många element för antalet instanser.
 
Error — Vertexbuffertströmmen för instanser är felaktigt inställd med lägsta indexattribut: Om den vertexbuffert som genereras med CreateVertexBuffer() får ett högre indexnummer än den vertexbuffert som genereras med CreateVertexBufferForInstance().

Relaterade API-element


Exempel  ( Så här använder du exemplet )

Följande klass ritar tre trianglar med instansritfunktionen med ett enkelt ritanrop i stället för flera ritanrop.
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.
        }    
    }
}

Följande klass ritar tre trianglar med instansritfunktionen med ett enkelt ritanrop i stället för flera ritanrop.
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

()metod 
public function present():void

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Visar bakåtåtergivningsbufferten.

Anrop av metoden present() synliggör resultat från alla återgivningsåtgärder sedan senaste present()-anropet och en ny återgivningscykel påbörjas. Efter present-anropet måste du anropa clear() innan du gör ytterligare ett drawTriangles()-anrop. I annat fall kommer den här funktionen att alternativt rensa återgivningsbufferten till gult eller grönt eller, om enableErrorChecking är true, så kommer ett undantag att genereras.

Anrop av present() återställer även återgivningsmålet, precis som anrop av setRenderToBackBuffer().


Utlöser
Error — Behöver rensa före ritning: Om clear() inte har anropats efter det föregående present()-anropet. (Två efterföljande present()-anrop är inte tillåtna utan att ett clear()-anrop görs däremellan.)
 
Error — 3768: Programmeringsgränssnittet för Stage3D kan inte användas under bakgrundskörning.

setBlendFactors

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger de faktorer som används för att blanda utdatafärgen för en ritoperation med den befintliga färgen.

Utdatafärgen (källfärgen) för pixelskuggningsprogrammet kombineras med befintlig färg (målfärg) på den pixeln enligt följande formel:

resultatfärg = (källfärg * sourceFactor) + (målfärg * destinationFactor)

Målfärgen är den aktuella färgen i återgivningsbufferten för den pixeln. Det är således resultatet av det senaste clear()-anropet och eventuella mellanliggande drawTriangles()-anrop.

Använd setBlendFactors() för att ställa in de faktorer som ska användas för att multiplicera käll- och målfärgerna innan de läggs samman. Standardblandningsfaktorn är, sourceFactor = Context3DBlendFactor.ONE och destinationFactor = Context3DBlendFactor.ZERO, vilket resulterar i att källfärgen skriver över målfärgen (med andra ord, de båda färgerna blandas inte). För normal alfablandning använder du sourceFactor = Context3DBlendFactor.SOURCE_ALPHA och destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA.

Använd konstanterna som definierats i klassen Context3DBlendFactor för att ställa in parametrar för den här funktionen.

Parametrar

sourceFactor:String — Den faktor som källfärgen ska multipliceras med. Är som standard Context3DBlendFactor.ONE.
 
destinationFactor:String — Den faktor som målfärgen ska multipliceras med. Är som standard Context3DBlendFactor.ZERO.


Utlöser
Error — Ogiltig uppräkning: När sourceFactor eller destinationFactor inte är ett av de erkända värdena som definieras i klassen Context3DBlendFactor.

Relaterade API-element


Exempel  ( Så här använder du exemplet )

Följande klass visar olika blandningsfaktorer. I exemplet ritas fyra olika färglagda rektanglar till återgivningsbufferten. Den här uppsättningen med rektanglar är "blandningsmålet". Därefter anges blandningsläget för källan och målet och en större rektangel, "blandningskällan", ritas. Använd tangenterna "1" och "2" för att bläddra igenom källans blandningslägen. Använd tangenterna "3" och "4" för att bläddra igenom målets blandningslägen.
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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in masken som används när färger skrivs till återgivningsbufferten.

Endast färgkomponenterna för vilka motsvarande färgmaskparametrar är true uppdateras när en färg skrivs till återgivningsbufferten. Om du till exempel anropar setColorMask(true, false, false, false) skrivs endast den röda komponenten av färgen till bufferten tills nästa gång du ändrar färgmasken. Färgmasken påverkar inte beteendet för metoden clear().

Parametrar

red:Boolean — ange false för att blockera ändringar i den röda kanalen.
 
green:Boolean — ange false för att blockera ändringar i den gröna kanalen.
 
blue:Boolean — ange false för att blockera ändringar i den blå kanalen.
 
alpha:Boolean — ange false för att blockera ändringar i alfakanalen.


Exempel  ( Så här använder du exemplet )

Följande exempel visar effekten av att ange färgmasken. I exemplet ritas två trianglar som har samma färg. Den övre triangeln ritas innan masken anges och återges därför som vit. Den nedre triangeln ritas efter att alla kanaler utom den röda har maskerats. Eftersom bara den röda kanalen kan uppdateras återges den vita triangeln som röd.
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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställ in culling-läge för triangel.

Trianglar kan uteslutas från scenen tidigt i återgivningstillvägagångssättet baserat på deras orientering i förhållande till visningsplanet. Ange vertex-ordningen på ett konsekvent sätt (medurs eller moturs) som om den sågs från utsidan av modellen för att plockning ska ske korrekt.

Parametrar

triangleFaceToCull:String — cullingläget. Använd en av konstanterna som definieras i Context3DTriangleFace-klassen.


Utlöser
Error — Ogiltig uppräkning: När triangleFaceToCull inte är något av de värden som definieras i klassen Context3DTriangleFace.

Relaterade API-element

setDepthTest

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger den jämförelsetyp som används för djuptestning.

Djupet för utdata för källpixeln från pixelskuggningsprogrammet jämförs med det aktuella värdet i djupbufferten. Om jämförelsen resulterar i false, kommer källpixeln att ignoreras. Om det är true bearbetas källpixeln i nästa steg i återgivningstillvägagångssättet, stenciltestet. Dessutom uppdateras djupbufferten med djupet på källpixeln så länge som parametern depthMask är true.

Ställer in testet som ska användas för att jämföra djupvärden för källan och målpixlar. Källpixeln blandas med målpixeln när jämförelsen är true. Jämförelseoperatorn används som en infix-operator mellan käll- och målpixelvärdena, i den ordningen.

Parametrar

depthMask:Boolean — måldjupvärdet kommer att uppdateras från källpixeln vid true.
 
passCompareMode:String — åtgärden för djupjämförelsetestet. Ett av värdena för Context3DCompareMode.

Relaterade API-element

    setFillMode

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: AIR 16

Ange fyllningsläget som används för återgivning. Gränssnittet är endast tillgängligt för datorprogrammet AIR.

Parametrar

fillMode:String — om värdet är WIREFRAME, visas objektet i ett nät rader. om värdet är SOLID, visas objektet i heltäckande skuggade polygoner.

Relaterade API-element

setProgram

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in vertex- och fragment-skuggningsprogram som ska användas för efterföljande återgivning.

Parametrar

program:Program3D — Program3D-objektet som representerar de vertex- och fragment-program som ska användas.

Relaterade API-element


Exempel  ( Så här använder du exemplet )

I det här exemplet visas hur du skapar, överför och aktiverar ett par vertex- och pixel-program till ett återgivningssammanhang. Tänk på att objektet, renderContext, är en instans av klassen Context3D. Programmen i exemplet har skrivits i AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

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

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

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

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

setProgramConstantsFromByteArray

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.1, AIR 3.1

Ange konstanter som ska användas av skuggningsprogram med värden som lagras i en ByteArray.

Anger konstanter som det går att komma åt från vertex- eller fragment-programmet.

Parametrar

programType:String — en Context3DProgramType.
 
firstRegister:int — indexet för den första skuggningsprogramkonstanten som ska ställas in.
 
numRegisters:int — antalet register som ska anges. Varje register läses som fyra flyttal.
 
data:ByteArray — ByteArray-källobjektet
 
byteArrayOffset:uint — en förskjutning in i ByteArray för läsning


Utlöser
TypeError — kNullPointerError när data är null.
 
RangeError — kConstantRegisterOutOfBounds när försök görs att ställa in fler än maximalt antal skuggningskonstanter.
 
RangeError — kBadInputSize om byteArrayOffset är större än eller lika med längden på data eller antalet element i data - byteArrayOffset är mindre än numRegisters*16

Relaterade API-element

setProgramConstantsFromMatrix

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in konstanter som ska användas i skuggningsprogram med hjälp av värden lagrade i ett Matrix3D.

Använd den här funktionen för att skicka en matris till ett skuggningsprogram. Funktionen ställer in fyra konstantregister som används i vertex- eller fragment-program. Matrisen är tilldelad till registren rad för rad. Den första konstanten är tilldelad till den översta raden i matrisen. Du kan ange 128 register för ett vertex-program och 28 för ett fragment-program.

Parametrar

programType:String — Typen av skuggningsprogram, antingen Context3DProgramType.VERTEX eller Context3DProgramType.FRAGMENT.
 
firstRegister:int — index för det första konstantregistret som ska ställas in. Eftersom Matrix3D har 16 värden, ställs fyra register in.
 
matrix:Matrix3D — matrisen som innehåller de konstanta värdena.
 
transposedMatrix:Boolean (default = false) — om true kopieras matrisposterna till registret i omvänd ordning. Standardvärdet är false.


Utlöser
TypeError — Null-pekarfel: När matrix är null.
 
RangeError — Konstantregister utanför tillåtet intervall: När försök görs att ställa in fler än maximalt antal skuggningskonstantregister.

Lär dig mer

Relaterade API-element

setProgramConstantsFromVector

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in konstantindata för skuggningsprogrammen.

Ställer in en array med konstanter som ska användas i ett vertex- eller fragment-skuggningsprogram. Konstanter som ställs in i Program3D kan användas i skuggningsprogrammen som konstantregister. Varje konstantregister består av fyra flyttalsvärden (x, y, z, w). Därför krävs det för varje register fyra poster i datavektorn. Antalet register som du kan ställa in för vertexprogram och fragmentprogram beror på Context3DProfile.

Parametrar

programType:String — Typen av skuggningsprogram, antingen Context3DProgramType.VERTEX eller Context3DProgramType.FRAGMENT.
 
firstRegister:int — index för det första konstantregistret som ska ställas in.
 
data:Vector.<Number> — värden för flyttalskonstanter. Det måste åtminstone finnas fyra numRegisters-element i data.
 
numRegisters:int (default = -1) — antalet konstanter som ska ställas in. Ange -1, standardvärdet, för att ange tillräckligt många register för att kunna använda alla tillgängliga data.


Utlöser
TypeError — Null-pekarfel: När data är null.
 
RangeError — Konstantregister utanför tillåtet intervall: När försök görs att ställa in fler än maximalt antal skuggningskonstantregister.
 
RangeError — Felaktig indatastorlek: När antalet element i data är mindre än numRegisters*4

Lär dig mer

Relaterade API-element

setRenderToBackBuffer

()metod 
public function setRenderToBackBuffer():void

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in bakåtåtergivningsbufferten som återgivningsmålet. Efterföljande anrop av metoderna drawTriangles() och clear() kommer att resultera i uppdateringar av bakåtbufferten. Använd den här metoden för att återta normal återgivning sedan metoden setRenderToTexture() har använts.

setRenderToTexture

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger den angivna texturen som återgivningsmål.

Efterföljande anrop till metoderna drawTriangles() och clear() uppdaterar den angivna texturen i stället för bakåtbufferten. Mipmappar skapas automatiskt. Använd setRenderToBackBuffer() för att återta normal återgivning till bakåtbufferten.

Det krävs ingen rensning innan du ritar. Om ingen rensningsåtgärd utförs bevaras återgivningsinnehållet. Djupbufferten och stencilbufferten rensas inte heller. Rensning tvingas dock fram vid den första ritåtgärden. Vid anrop av present() återställs målet till bakåtbufferten.

Parametrar

texture:flash.display3D.textures:TextureBase — måltexturen som ska återges till. Ange som null för att återta återgivning till bakåtbufferten (även setRenderToBackBuffer() och present återställer målet till bakåtbufferten).
 
enableDepthAndStencil:Boolean (default = false) — om true är djup- och stenciltestning tillgänglig. Om false ignoreras alla djup- och stencillägen för efterföljande ritoperationer.
 
antiAlias:int (default = 0) — kantutjämningskvaliteten. Använd 0 för att inaktivera kantutjämning. Ett högre värde förbättrar kantutjämningskvaliteten, men fler beräkningar krävs. Värdet ignoreras för tillfället av mobilplattformen och programåtergivningssammanhanget.
 
surfaceSelector:int (default = 0) — ange vilka element av texturen som ska uppdateras. Texturobjekt har ingen yta så du måste ange 0, standardvärdet. CubeTexture-objekt har sex ytor så du måste ange ett heltal mellan 0 och 5.
 
colorOutputIndex:int (default = 0) — Registret för utdatafärgen. Måste vara 0 för begränsat läge eller baslinjeläge. I annat fall anges registret för utdatafärgen.


Utlöser
ArgumentError — för ett icke matchande surfaceSelector-parameter. Värdet måste vara 0 för 2D-texturer och 0 till 5 för kubmappningar.
 
ArgumentError texture är inte härledd från klassen TextureBase (antingen klasserna Texture eller CubeTexture).
 
ArgumentError colorOutputIndex måste vara ett heltal från 0 till 3.
 
ArgumentError — det här anropet kräver ett Context3D som har skapats med standardprofilen eller en mer avancerad profil.

Relaterade API-element

setSamplerStateAt

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.6, AIR 3.6

Åsidosätt textursamplerläget manuellt.

Textursamplerläget ställs vanligtvis in när setProgram anropas. Du kan emellertid åsidosätta textursamplerläget med den här funktionen. Om du inte vill att programmet ska ändra samplerläget anger du biten ignoresamnpler i AGAL och använder den här funktionen.

Parametrar

sampler:int — sampler. Samplerregistret som ska användas. Mappar till samplerregistret i AGAL.
 
wrap:String — Brytningsläge. Definieras i Context3DWrapMode. Standardvärdet är repeat.
 
filter:String — Texturfiltreringsläge. Definieras i Context3DTextureFilter. Standardvärdet är nearest.
 
mipfilter:String — Mipmappfilter. Definieras i Context3DMipFilter. Standardvärdet är none.


Utlöser
Error — sampler utanför intervall
 
Error — brytning, filter, dålig uppräkning av mip-filter
 
Error — Objektet har tagits bort: Om detta Context3D-objekt har tagits bort genom ett anrop av dispose() eller genom att underliggande återgivningsmaskinvara har förlorats.

Relaterade API-element

setScissorRectangle

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in en scissor-rektangel, vilket är en typ av ritmask. Renderaren ritar endast i området innanför scissor-rektangeln. Scissor-hantering påverkar inte rensningsåtgärder.

Skicka null för att stänga av scissor-hantering.

Parametrar

rectangle:Rectangle — Rektangeln som det ska ritas i. Ange rektangelpositionen och mått i pixlar. Koordinatsystemsorigo är det övre vänstra hörnet i visningsporten, med de positiva värdena ökande neråt och åt höger (samma som koordinatsystemet för visning i Flash).


Exempel  ( Så här använder du exemplet )

Med följande klass ritas två trianglar på en 640x480 pixlar stor visningsport på scenen. Trianglarna delar ett hörn som är placerat i origo (0,0,0).

Trianglarna är definierade med vertex-bufferten och index-bufferten. Vertex-bufferten innehåller position och färginformationen för varje triangelhörn. Index-bufferten innehåller index för vertex-bufferten. Tre index behövs för att definiera en triangel. En triangel som till exempel bestäms av de tre första punkterna i vertex-bufferten visas som 0,1,2 i index-bufferten.

I detta enkla exempel utförs inga 3D-omformningar. Endast objekt i det kanoniska visningsområdet (en 2x2x2 stor kubvolym centrerad vid origo) visas. När emellertid en vanlig 3D-scen återges, projicerar du objekten som ska återges till visningsområdet med hjälp av antingen en perspektivprojektion eller en ortografisk projektion.

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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in stencilläge och åtgärd.

Ett 8-bitars stencilreferensvärde kan associeras med varje ritanrop. Under återgivning kan referensvärdet testas mot tidigare lagrade värden i bildrutebufferten. Resultatet av testet kan kontrollera ritåtgärden och om eller hur det lagrade stencilvärdet uppdateras. Dessutom kontrolleras med djuptestning om stenciltestning utförs. En misslyckad djuptest kan även användas för att kontrollera åtgärder som vidtas i stencilbufferten.

I pixelbearbetningsflödet är det djuptestning som utförs först. Om djuptestet misslyckas kan en uppdateringsåtgärd för stencilbufferten utföras, men ingen ytterligare utvärdering av stencilbuffertvärdet ska göras. Om djuptestet lyckas kommer stenciltestet att utföras. Andra åtgärder kan vidtas beroende på resultatet av stenciltestet.

Stencilreferensvärdet ställs in med setStencilReferenceValue().

Parametrar

triangleFace:String (default = "frontAndBack") — triangelorienteringarna som är tillåtna för att bidra till stencilåtgärden. En av Context3DTriangleFace.
 
compareMode:String (default = "always") — testoperatorn som används för att jämföra det aktuella stencilreferensvärdet och målpixelstencilvärdet. Uppdatering av målpixelfärg och djup utförs när jämförelsen är true. Stencilåtgärder utförs enligt begäran från följande åtgärdsparametrar. Jämförelseoperatorn används som en infix-operator mellan det aktuella referensvärdet och målreferensvärdet, i den ordningen (i pseudokod: skicka om stencilReference OPERATOR stencilbuffert). Använd en av konstanterna som definieras i Context3DCompareMode-klassen.
 
actionOnBothPass:String (default = "keep") — åtgärd som ska vidtas när både djup- och stenciljämförelser skickas. Använd en av konstanterna som definieras i Context3DStencilAction-klassen.
 
actionOnDepthFail:String (default = "keep") — åtgärd som ska vidtas när djupjämförelse misslyckas. Använd en av konstanterna som definieras i Context3DStencilAction-klassen.
 
actionOnDepthPassStencilFail:String (default = "keep") — åtgärd som ska vidtas när djupjämförelse skickas och stenciljämförelse misslyckas. Använd en av konstanterna som definieras i Context3DStencilAction-klassen.


Utlöser
Error — Ogiltig uppräkning: När triangleFace inte är ett av de värden som definieras i klassen Context3DTriangleFace.
 
Error — Ogiltig uppräkning: När compareMode inte är ett av de värden som definieras i klassen Context3DCompareMode.
 
Error — Ogiltig uppräkning: När actionOnBothPass, actionOnDepthFail eller actionOnDepthPassStencilFail inte är ett av de värden som definieras i klassen Context3DStencilAction.

Relaterade API-element


Exempel  ( Så här använder du exemplet )

Följande klass visar hur du ritar en stencil och använder den som en mask för efterföljande ritåtgärder. Följande steg utförs i det här exemplet:
  • Stencilbufferten rensas till 0.
  • Ange att stencilåtgärden ska ökas stegvis när stenciltestet blir godkänt.
  • Ange stencilens referensvärde som 0.
  • Rita den triangelformade masken. Oavsett var triangeln ritas godkänns stenciltestet, eftersom stencilbufferten har rensats till 0 och referensvärdet är 0. Följaktligen ökas stencilbufferten till 1 där triangelmasken ritas.
  • Ändra stencilåtgärden till KEEP så att efterföljande ritåtgärder inte förändrar stencilbufferten.
  • Rita en helskärmsrektangel (flerfärgad). Eftersom stencilens referensvärde fortfarande är 0 godkänns inte stenciltestet i det maskerade området. Följaktligen ritas rektangeln överallt utom i det maskerade området.
  • Ändra stencilens referensvärde till 1.
  • Rita en helskärmsrektangel till (röd). Nu underkänns stenciltestet i alla områden utom det maskerade området, som ökats till 1. Följaktligen ritas rektangeln bara i det maskerade området.

För musen över exemplet om du vill visa huvudstegen i sekvensen.

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

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Ställer in stenciljämförelsevärdet som ska användas för stenciltester.

Endast de lägre åtta bitarna av referensvärdet används. Även stencilbuffertvärdet är åtta bitar långt. Använd readMask och writeMask för att använda stencilbufferten som ett bit-fält.

Parametrar

referenceValue:uint — ett 8-bitars referensvärde som används i jämförelsetester för referensvärden.
 
readMask:uint (default = 255) — en 8-bitars mask för att tillämpas på både det aktuella stencilbuffertvärdet och referensvärdet före jämförelsen.
 
writeMask:uint (default = 255) — en 8-bitars mask för att tillämpas på referensvärdet före uppdatering av stencilbufferten.

Relaterade API-element

setTextureAt

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger texturen som ska användas för ett texturinvärdesregister för ett fragment-program.

Ett fragment-program kan läsa information från upp till åtta texturobjekt. Använd den här funktionen för att tilldela ett Texture- eller CubeTexture-objekt till samplerregistren som används i fragment-programmet.

Obs! Om du ändrar det aktiva fragment-programmet (med setProgram) till ett skuggningsprogram som använder färre texturer, ska du ställa in null för register som inte används:

         setTextureAt( 7, null );
         

Parametrar

sampler:int — registerindex för sampler, ett värde mellan 0 och 7.
 
texture:flash.display3D.textures:TextureBase — texturobjektet som ska göras tillgängligt, antingen en Texture- eller en CubeTexture-instans.

Lär dig mer

Relaterade API-element

Texture
CubeTexture

setVertexBufferAt

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

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11, AIR 3

Anger vilka vertex-datakomponenter som motsvarar ett enskilt invärde för vertex-skuggningsprogram.

Använd metoden setVertexBufferAt för att identifiera vilka datakomponenter, som definieras för varje vertex i en VertexBuffer3D-buffert, som tillhör vilka invärden i vertex-programmet. Utvecklaren av vertex-program bestämmer hur mycket data som behövs per vertex. Dessa data mappas från en eller flera VertexBuffer3D-direktuppspelningar till attributregistret för vertex-skuggningsprogrammet.

Den minsta dataenheten som används i vertex-skuggningen är 32-bitars data. Förskjutningar till vertex-direktuppspelningen anges i multiplar om 32-bitar.

Som ett exempel kan en programmerare definiera varje vertex med följande data:
position:  x    float32
           y    float32
           z    float32
color:     r    unsigned byte
           g    unsigned byte
           b    unsigned byte
           a    unsigned byte
Om vertexen definierades i ett VertexBuffer3D-objekt, kan den tilldelas till en vertex-skuggning med följande kod:
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

Parametrar

index:int — index för attributregistret i vertex-skuggningen (0 till 7).
 
buffer:VertexBuffer3D — bufferten som innehåller de käll-vertex-data som ska föras till vertex-skuggningen.
 
bufferOffset:int (default = 0) — en förskjutning från början av data för ett enskilt vertex där läsning av detta attribut ska börja. I exemplet ovan har data en förskjutning på 0 eftersom det är det första attributet, färg har en förskjutning på 3 eftersom färgattributet följer de tre 32-bitars positionsvärdena. Förskjutningen anges i 32-bitars enheter.
 
format:String (default = "float4") — ett värde från klassen Context3DVertexBufferFormat som anger datatypen för detta attribut.


Utlöser
Error — Ogiltig uppräkning: När formatet inte är ett av de värden som definieras i klassen Context3DVertexBufferFormat.
 
RangeError — Attributregister utanför tillåtet intervall: När parametern index ligger utanför intervallet 0 till 7. (Maximalt åtta vertex-attributregister kan användas i ett skuggningsprogram.)

Lär dig mer

Relaterade API-element

Context3DExample.as

Följande klass ritar en roterande kub med perspektivprojektion.
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 ]Varför på engelska?
Innehåll i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen är på engelska

Det är inte alla delar av Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen som översätts till alla språk. Om ett språkelement inte översätts visas det på engelska. Klassen ga.controls.HelpBox översätts till exempel inte till något språk. I den svenska versionen av referenshandboken visas därför klassen ga.controls.HelpBox på engelska.