ActionScript® 3.0 Referenzhandbuch für die Adobe® Flash®-Plattform
Home  |  Liste der Pakete und Klassen ausblenden |  Pakete  |  Klassen  |  Neue Funktionen  |  Stichwortverzeichnis  |  Anhänge  |  Warum auf Englisch?
Filter: AIR 30.0 und früher, Flash Player 30.0 und früher, Flash Lite 4
Flex 4.6 und früher, Flash Pro CS6 und früher
Filter ausblenden
flash.display3D 

Context3D  - AS3

Paketex

Oberste Ebene
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

Sprachelemente

Globale Konstanten
Globale Funktionen
Operatoren
Anweisungen, Schlüsselwörter und Direktiven
Sondertypen

Anhänge

Neue Funktionen
Compiler-Fehler
Compiler-Warnungen
Laufzeitfehler
Migration zu ActionScript 3
Unterstützte Zeichensätze
Nur MXML-Tags
Motion-XML-Elemente
Timed Text-Tags
Liste veralteter Elemente
Konstanten für die Implementierung von Eingabehilfen
Verwendung der ActionScript-Beispiele
Rechtliche Hinweise
Paketflash.display3D
Klassepublic final class Context3D
VererbungContext3D Inheritance EventDispatcher Inheritance Object

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Die Context3D-Klasse stellt einen Kontext für das Rendering geometrisch definierter Grafiken bereit.

Ein Renderingkontext beinhaltet eine Zeichenoberfläche und deren zugeordnete Ressourcen und Zustände. Der Renderingkontext verwendet nach Möglichkeit die Hardware-GPU (Grafikprozessor). Andernfalls verwendet der Renderingkontext Software. (Wenn das Rendering durch Context3D auf einer Plattform nicht unterstützt wird, enthält die stage3Ds-Eigenschaft des Stage-Objekts eine leere Liste.)

Der Context3D-Renderingkontext ist eine programmierbare Pipeline, die große Ähnlichkeit mit OpenGL ES 2 hat, allerdings abstrahiert ist, sodass sie mit einer Reihe von Hardware- und GPU-Schnittstellen vergleichbar ist. Obwohl sie für 3D-Grafiken entwickelt wurde, schreibt die Renderingpipeline nicht vor, dass das Rendering dreidimensional ist. Deshalb können Sie einen 2D-Renderer erstellen, indem Sie die entsprechenden Vertex- und Pixelfragmentprogramme bereitstellen. Sowohl für 3D als auch 2D wird als einzige geometrische Grundform das Dreieck unterstützt.

Ruft eine Instanz der Context3D-Klasse ab, indem die requestContext3D()-Methode eines Stage3D-Objekts aufgerufen wird. Eine begrenzte Anzahl von Context3D-Objekten kann pro Bühne vorhanden sein; eine für jedes Stage3D-Objekt in der Stage.stage3Ds-Liste. Wenn der Kontext erstellt wird, setze das Stage3D-Objekt ein context3DCreate-Ereignis ab. Ein Renderingkontext kann jederzeit zerstört und neu erstellt werden, zum Beispiel wenn eine andere Anwendung, die die GPU verwendet, den Fokus erhält. Sie sollten den Empfang mehrerer context3DCreate-Ereignisse einkalkulieren. Positionieren Sie den Renderbereich auf der Bühne, indem Sie die x- und y-Eigenschaften der zugeordneten Stage3D-Instanz verwenden.

Zum Rendern und Anzeigen einer Szene (nach dem Abrufen eines Context3D-Objekts) sind die folgenden Schritte typisch:

  1. Konfigurieren Sie die Attribute des Hauptanzeigepuffers durch den Aufruf von configureBackBuffer().
  2. Erstellen und initialisieren Sie Ihre Renderingressourcen, darunter:
    • Vertex- und Indexpuffer, die die Szenengeometrie definieren
    • Vertex- und Pixelprogramme (Shader) zum Rendern der Szene
    • Texturen
  3. Rendern eines Bildes:
    • Legen Sie den Renderzustand für ein Objekt oder eine Gruppe von Objekten in der Szene fest.
    • Rufen Sie die drawTriangles()-Methode auf, um eine Gruppe von Dreiecken zu rendern.
    • Ändern Sie den Renderingzustand für die nächste Gruppe von Objekten.
    • Rufen Sie drawTriangles() auf, um Dreiecke zu zeichnen, die die Objekte definieren.
    • Wiederholen Sie den Vorgang, bis die gesamte Szene gerendert wurde.
    • Rufen Sie die present()-Methode auf, um die gerenderte Szene auf der Bühne anzuzeigen.

Für das Rendering gelten die folgenden Einschränkungen:

Ressourceneinschränkungen:

RessourceZulässige AnzahlGesamtspeicher
Vertexbuffer 4096256 MB
Indexbuffer 4096128 MB
Programme 409616 MB
Texturen 4096128 MB
Würfeltexturen 4096256 MB

AGAL-Limits: 200 Opcodes pro Programm.

Zeichenaufruf-Limits: 32.768 Aufrufe von drawTriangles() für jeden present()-Aufruf.

Für Texturen gelten die folgenden Einschränkungen:

Texturenbeschränkungen für AIR 32-Bit:

TextureMaximale GrößeGPU-Gesamtspeicher
Normale Textur (unterhalb der erweiterten Baseline) 2048 x 2048512 MB
Normale Textur (erweiterte Baseline und darüber) 4096 x 4096512 MB
Rechteckige Textur (unterhalb der erweiterten Baseline) 2048 x 2048512 MB
Rechteckige Textur (erweiterte Baseline und darüber) 4096 x 4096512 MB
Würfeltextur 1024 x 1024256 MB

Texturenbeschränkungen für AIR 64-Bit (Desktop):

TextureMaximale GrößeGPU-Gesamtspeicher
Normale Textur (unterhalb der erweiterten Baseline) 2048 x 2048512 MB
Normale Textur (erweiterte Baseline bis Standard) 4096 x 4096512 MB
Normale Textur (Standard erweitert und darüber) 4096 x 40962048 MB
Rechteckige Textur (unterhalb der erweiterten Baseline) 2048 x 2048512 MB
Rechteckige Textur (erweiterte Baseline bis Standard) 4096 x 4096512 MB
Rechteckige Textur (Standard erweitert und darüber) 4096 x 40962048 MB
Würfeltextur 1024 x 1024256 MB

512 MB ist das absolute Limit für Texturen, einschließlich des Texturspeichers, der für Mipmaps benötigt wird. Für Würfeltexturen beträgt die maximale Speicherkapazität hingegen 256 MB.

Sie können Context3D-Objekte nicht mit dem Context3D-Konstruktor erstellen. Es wird als Eigenschaft einer Stage3D-Instanz konstruiert und ist als solche verfügbar. Die Context3D-Klasse kann sowohl auf Desktop- als auch auf mobilen Plattformen verwendet werden; dies gilt für die Ausführung in Flash Player und in AIR.

Beispiele anzeigen

Verwandte API-Elemente



Öffentliche Eigenschaften
 EigenschaftDefiniert von
  backBufferHeight : int
[schreibgeschützt] Gibt die Höhe des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()-Methode geändert werden.
Context3D
  backBufferWidth : int
[schreibgeschützt] Gibt die Breite des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()-Methode geändert werden.
Context3D
 Inheritedconstructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz.
Object
  driverInfo : String
[schreibgeschützt] Der Typ des Grafikbibliothekstreibers, der von diesem Renderingkontext verwendet wird.
Context3D
  enableErrorChecking : Boolean
Gibt an, ob vom Renderer gefundene Fehler der Anwendung gemeldet werden.
Context3D
  maxBackBufferHeight : int
Legt die maximale Höhe des Hintergrundpuffers fest.
Context3D
  maxBackBufferWidth : int
Gibt die maximale Breite des Hintergrundpuffers an.
Context3D
  profile : String
[schreibgeschützt] Das funktionsunterstützte Profil wird von diesem Context3D-Objekt verwendet.
Context3D
  supportsVideoTexture : Boolean
[statisch] [schreibgeschützt] Gibt an, ob Context3D Videotextur unterstützt.
Context3D
  totalGPUMemory : Number
[schreibgeschützt] Gibt den Gesamt-GPU-Speicher zurück, der von den Stage3D-Datenstrukturen einer Anwendung zugeordnet wurde. Wenn ein GPU-Ressourcenobjekt erstellt wird, wird der verwendete Speicher in Context3D gespeichert.
Context3D
Öffentliche Methoden
 MethodeDefiniert von
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registriert ein Ereignis-Listener-Objekt bei einem EventDispatcher-Objekt, sodass der Listener über ein Ereignis benachrichtigt wird.
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
Löscht die Farb-, Tiefen- und Schablonenbuffer, die diesem Context3D-Objekt zugeordnet sind, und füllt sie mit den angegebenen Werten.
Context3D
  
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Legt die Viewportabmessungen und andere Attribute des Renderpuffers fest.
Context3D
  
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Erstellt ein CubeTexture-Objekt.
Context3D
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Erstellt ein IndexBuffer3D-Objekt.
Context3D
  
Erstellt ein Program3D-Objekt.
Context3D
  
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Erstellt ein RectangleTexture-Objekt.
Context3D
  
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Erstellt ein Texture-Objekt.
Context3D
  
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Erstellt ein VertexBuffer3D-Objekt.
Context3D
  
    createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Erstellt ein VertexBuffer3D-Objekt für Instanzdaten.
Context3D
  
Erstellt ein VideoTexture-Objekt.
Context3D
 Inherited
Sendet ein Ereignis in den Ereignisablauf.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Macht alle Ressourcen und internen Speicher frei, die/der mit diesem Context3D-Objekt verknüpft sind.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Zeichnet den aktuellen Renderpuffer in eine Bitmap.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts.
Context3D
  
    drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts.
Context3D
 Inherited
Überprüft, ob das EventDispatcher-Objekt Listener für einen bestimmten Ereignistyp registriert hat.
EventDispatcher
 Inherited
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde.
Object
 Inherited
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde.
Object
  
Zeigt den Hintergrund-Renderpuffer an.
Context3D
 Inherited
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Entfernt einen Listener aus dem EventDispatcher-Objekt.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Legt die Faktoren fest, die zum Mischen der Ausgabefarbe eines Zeichenvorgangs mit der vorhandenen Farbe verwendet werden.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Legt die Maske fest, die beim Schreiben der Farben in den Renderbuffer verwendet wird.
Context3D
  
setCulling(triangleFaceToCull:String):void
Legt den Dreieckcullingmodus fest.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Legt den Vergleichstyp fest, der für Tiefentests verwendet wird.
Context3D
  
    setFillMode(fillMode:String):void
Füllmodus für das Rendern festlegen.
Context3D
  
Legt Vertex- und Fragmentshaderprogramme fest, die für das nachfolgende Rendern verwendet werden.
Context3D
  
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem ByteArray-Objekt gespeicherte Werte verwendet werden.
Context3D
  
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem Matrix3D-Objekt gespeicherte Werte verwendet werden.
Context3D
  
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Legt die Konstanteneingaben für die Shaderprogramme fest.
Context3D
 Inherited
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest.
Object
  
Legt den Hintergrund-Renderpuffer als Renderziel fest.
Context3D
  
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Legt die angegebene Textur als Renderziel fest.
Context3D
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Textursamplerstatus manuell überschreiben.
Context3D
  
Legt ein Scherenrechteck fest, was eine Art von Zeichenmaske ist.
Context3D
  
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Legt den Schablonenmodus und -vorgang fest.
Context3D
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Legt den Schablonenvergleichswert fest, der für Schablonentests verwendet wird.
Context3D
  
Gibt die Textur an, die für ein Textureingaberegister eines Fragmentprogramms verwendet werden soll.
Context3D
  
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Gibt an, welche Vertexdatenkomponenten einer einzelnen Vertexshaderprogrammeingabe entsprechen.
Context3D
 Inherited
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas.
Object
 Inherited
Gibt das angegebene Objekt als String zurück.
Object
 Inherited
Gibt den Grundwert des angegebenen Objekts zurück.
Object
 Inherited
Überprüft, ob bei diesem EventDispatcher-Objekt oder bei einem seiner Vorgänger ein Ereignis-Listener für einen bestimmten Ereignistyp registriert ist.
EventDispatcher
Ereignisse
 Ereignis Übersicht Definiert von
 Inherited[broadcast event] Wird ausgelöst, wenn Flash Player oder eine AIR-Anwendung den Betriebssystemfokus erhält und aktiv wird.EventDispatcher
 Inherited[broadcast event] Wird ausgelöst, wenn Flash Player- oder die AIR-Anwendung den Fokus verliert und inaktiv wird.EventDispatcher
Eigenschaftendetails

backBufferHeight

Eigenschaft
backBufferHeight:int  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 15, AIR 15

Gibt die Höhe des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()-Methode geändert werden. Die Höhe kann bei einer Änderung des Browser-Zoomfaktors geändert werden, wenn für wantsBestResolutionOnBrowserZoom der Wert true im letzten erfolgreichen Aufruf der configureBackBuffer()-Methode festgelegt wurde. Die Änderung der Höhe kann erkannt werden, indem ein Ereignis-Listener für die Änderung des Browser-Zooms registriert wird.



Implementierung
    public function get backBufferHeight():int

Verwandte API-Elemente

backBufferWidth

Eigenschaft 
backBufferWidth:int  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 15, AIR 15

Gibt die Breite des Hintergrundpuffers an. Dies kann durch einen erfolgreichen Aufruf der configureBackBuffer()-Methode geändert werden. Die Breite kann bei einer Änderung des Browser-Zoomfaktors geändert werden, wenn für wantsBestResolutionOnBrowserZoom der Wert true im letzten erfolgreichen Aufruf der configureBackBuffer()-Methode festgelegt wurde. Die Änderung der Breite kann erkannt werden, indem ein Ereignis-Listener für die Änderung des Browser-Zooms registriert wird.



Implementierung
    public function get backBufferWidth():int

Verwandte API-Elemente

driverInfo

Eigenschaft 
driverInfo:String  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Der Typ des Grafikbibliothekstreibers, der von diesem Renderingkontext verwendet wird. Gibt an, ob für das Rendering Software, ein DirectX-Treiber oder ein OpenGL-Treiber verwendet wird. Gibt auch an, ob das Hardwarerendern fehlgeschlagen ist. Wenn das Hardwarerendern fehlschlägt, verwendet Flash Player Softwarerendern für Stage3D, und driverinfo enthält einen der folgenden Werte:

  • "Software Hw_disabled=userDisabled" - Das Kontrollkästchen „Hardwarebeschleunigung aktivieren“ in den Einstellungen von Adobe Flash Player wurde nicht ausgewählt.
  • "Software Hw_disabled=oldDriver" - Es gibt bekannte Probleme mit dem Hardwaregrafiktreiber. Möglicherweise kann das Problem durch eine Aktualisierung des Grafiktreibers behoben werden.
  • "Software Hw_disabled=unavailable" - Bekannte Probleme mit dem Hardwaregrafiktreiber oder Initialisierungsfehler mit der Grafikhardware.
  • "Software Hw_disabled=explicit" - Der Inhalt hat über requestContext3D ausdrücklich das Softwarerendern angefordert.
  • "Software Hw_disabled=domainMemory" - Der Inhalt verwendet domainMemory, wofür im Fall der Verwendung mit Stage3D-Hardwarerendering eine Lizenz erforderlich ist. Besuchen Sie adobe.com/go/fpl_de.



Implementierung
    public function get driverInfo():String

enableErrorChecking

Eigenschaft 
enableErrorChecking:Boolean

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Gibt an, ob vom Renderer gefundene Fehler der Anwendung gemeldet werden.

Wenn enableErrorChecking den Wert true hat, sind die clear()- und drawTriangles()-Methoden synchron und können Fehler ausgeben. Wenn enableErrorChecking den Wert false hat, was die Standardeinstellung ist, sind die clear()- und drawTriangles()-Methoden asynchron und es werden keine Fehler gemeldet. Durch die Aktivierung der Fehlerüberprüfung wird die Renderingleistung beeinträchtigt. Sie sollten die Fehlerüberprüfung nur beim Debugging aktivieren.



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

Verwandte API-Elemente

maxBackBufferHeight

Eigenschaft 
maxBackBufferHeight:int

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 15, AIR 15

Legt die maximale Höhe des Hintergrundpuffers fest. Der Anfangswert ist der Systemgrenzwert der Plattform. Für diese Eigenschaft kann ein Wert festgelegt werden, der kleiner oder gleich der Systemgrenze ist, er kann diese jedoch nicht überschreiten. Für diese Eigenschaft kann ein Wert festgelegt werden, der größer oder gleich dem unteren Grenzwert ist, er kann diesen jedoch nicht unterschreiten. Der untere Grenzwert ist der konstante Wert 32, wenn der Hintergrundpuffer nicht konfiguriert ist. Der untere Grenzwert ist der Wert des Parameters für die Höhe im letzten erfolgreichen Aufruf der configureBackBuffer()-Methode, nachdem der Hintergrundpuffer konfiguriert wurde.



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

maxBackBufferWidth

Eigenschaft 
maxBackBufferWidth:int

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 15, AIR 15

Gibt die maximale Breite des Hintergrundpuffers an. Der Anfangswert ist der Systemgrenzwert der Plattform. Für diese Eigenschaft kann ein Wert festgelegt werden, der kleiner oder gleich der Systemgrenze ist, er kann diese jedoch nicht überschreiten. Für diese Eigenschaft kann ein Wert festgelegt werden, der größer oder gleich dem unteren Grenzwert ist, er kann diesen jedoch nicht unterschreiten. Der untere Grenzwert ist der konstante Wert 32, wenn der Hintergrundpuffer nicht konfiguriert ist. Der untere Grenzwert ist der Wert des Parameters für die Breite im letzten erfolgreichen Aufruf der configureBackBuffer()-Methode, nachdem der Hintergrundpuffer konfiguriert wurde.



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

profile

Eigenschaft 
profile:String  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 12, AIR 4

Das funktionsunterstützte Profil wird von diesem Context3D-Objekt verwendet.



Implementierung
    public function get profile():String

Verwandte API-Elemente

supportsVideoTexture

Eigenschaft 
supportsVideoTexture:Boolean  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 17.0, Flash Player 18.0

Gibt an, ob Context3D Videotextur unterstützt.



Implementierung
    public static function get supportsVideoTexture():Boolean

totalGPUMemory

Eigenschaft 
totalGPUMemory:Number  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 21, AIR 21

Gibt den Gesamt-GPU-Speicher zurück, der von den Stage3D-Datenstrukturen einer Anwendung zugeordnet wurde.

Wenn ein GPU-Ressourcenobjekt erstellt wird, wird der verwendete Speicher in Context3D gespeichert. Dieser Arbeitsspeicher enthält Indexpuffer, Vertexpuffer, Texturen (ohne Videotextur) und Programme, die über dieses Context3D-Objekt erstellt wurden.

API totalGPUMemory gibt den Gesamtspeicher an den Benutzer zurück, der von den oben genannten Ressourcen verbraucht wurde. Der zurückgegebene Standardwert ist 0. Der zurückgegebene Gesamtspeicher ist in Bytes. Die Informationen werden nur auf dem Mobilgerät im direkten Modus und im direkten und GPU-Modus auf dem Desktop bereitgestellt. (Wenn auf dem Desktop <renderMode>gpu</renderMode> fällt zurück auf <renderMode>direct</renderMode> verwendet wird)

Diese API kann verwendet werden, wenn die SWF-Version 32 oder höher ist.



Implementierung
    public function get totalGPUMemory():Number
Methodendetails

clear

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Löscht die Farb-, Tiefen- und Schablonenbuffer, die diesem Context3D-Objekt zugeordnet sind, und füllt sie mit den angegebenen Werten.

Legen Sie den mask-Parameter fest, um die zu löschenden Buffer anzugeben. Verwenden Sie die in der Context3DClearMask-Klasse definierten Konstanten, um den mask-Parameter festzulegen. Verwenden Sie den bitweisen OR-Operator, „|“, um mehrere Puffer zur Maske hinzuzufügen (oder verwenden Sie Context3DClearMask.ALL). Beim Rendern in den Hintergrundpuffer muss die configureBackBuffer()-Methode vor allen Aufrufen von clear() aufgerufen werden.

Hinweise: Wenn Sie einen Parameterwert außerhalb des zulässigen Bereichs festlegen, werden numerische Parameterwerte ohne Meldung an den Bereich null bis eins gehängt. Wenn stencil größer als 0xff ist, wird es auf 0xff gesetzt.

Parameter

red:Number (default = 0.0) — die rote Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins.
 
green:Number (default = 0.0) — die grüne Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins.
 
blue:Number (default = 0.0) — die blaue Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins.
 
alpha:Number (default = 1.0) — die Alpha-Komponente der Farbe, mit der der Farbbuffer gelöscht wird, im Bereich null bis eins. Die Alpha-Komponenten wird nicht zum Mischen verwendet. Sie wird direkt in den Puffer-Alpha geschrieben.
 
depth:Number (default = 1.0) — der Wert, mit dem der Tiefenbuffer gelöscht wird, im Bereich null bis eins.
 
stencil:uint (default = 0) — der 8-Bit-Wert, mit dem der Schablonenbuffer gelöscht wird, in einem Bereich von 0x00 bis 0xff.
 
mask:uint (default = 0xffffffff) — gibt an, welche Buffer gelöscht werden sollen.


Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.

Verwandte API-Elemente

configureBackBuffer

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt die Viewportabmessungen und andere Attribute des Renderpuffers fest.

Rendering wird doppelt gepuffert. Der Backbuffer wird mit dem sichtbaren Frontbuffer getauscht, wenn die present()-Methode aufgerufen wird. Die Mindestgröße des Puffers ist 32x32 Pixel. Die maximale Hintergrundpuffergröße wird von den Gerätefunktionen eingeschränkt und kann außerdem vom Benutzer über die Eigenschaften maxBackBufferWidth und maxBackBufferHeight festgelegt werden. Die Pufferkonfiguration ist ein langsamer Vorgang. Vermeiden Sie das Ändern der Puffergröße oder -attribute während normaler Renderingvorgänge.

Parameter

width:int — Breite des Puffers in Pixel.
 
height:int — Höhe des Puffers in Pixel.
 
antiAlias:int — ein ganzzahliger Wert, der die angeforderte Anti-Alias-Qualität angibt. Der Wert korreliert mit der Anzahl der Subsamples, die beim Antialiasing verwendet werden. Bei Verwendung von mehr Subsamples müssen mehr Berechnungen ausgeführt werden, obwohl die relative Leistungsbeeinträchtigung von der jeweiligen Renderinghardware abhängig ist. Der Antialiasingtyp und ob Antialiasing überhaupt ausgeführt wird, ist vom Gerät und vom Rendermodus abhängig. Antialiasing wird vom Softwarerenderkontext nicht unterstützt.
0Kein Antialiasing
2Minimales Antialiasing.
4Antialiasing hoher Qualität.
16Antialiasing sehr hoher Qualität.
 
enableDepthAndStencil:Boolean (default = true)false zeigt an, dass kein Tiefen- oder Schablonenpuffer erstellt wird, mit true wird ein Tiefen- und Schablonenpuffer erstellt. Für AIR-Anwendungen mit AIR-Version 3.2 oder höher, die mit SWF-Version 15 oder höher kompiliert werden, und deren renderMode-Element in der Anwendungsdeskriptordatei den Wertdirect hat, muss das depthAndStencil-Element in der Anwendungsdeskriptordatei denselben Wert wie dieses Argument haben. Standardmäßig hat das depthAndStencil-Element den Wert false.
 
wantsBestResolution:Boolean (default = false)true gibt an, dass, wenn das Gerät HiDPI-Bildschirme unterstützt, versucht wird, einen größeren Hintergrundpuffer zuzuordnen, als mit den width- und height-Parametern angegeben ist. Da hierbei mehr Pixel hinzugefügt werden und das Ergebnis der Shadervorgänge geändert werden kann, ist dies standardmäßig deaktiviert. Verwenden Sie Stage.contentsScaleFactor, um festzulegen, wie weit der native Hintergrundpuffer heraufskaliert wurde.
 
wantsBestResolutionOnBrowserZoom:Boolean (default = false)true gibt an, dass der Hintergrundpuffer proportional zum Browser-Zoomfaktor vergrößert werden soll. Die Einstellung dieses Werts ist für mehrere Browser-Zoomvorgänge persistent. Der Standardwert des Parameters ist false. Legen Sie die Eigenschaften maxBackBufferWidth und maxBackBufferHeight fest, um die Vergrößerung des Hintergrundpuffers zu beschränken. Verwenden Sie backBufferWidth und backBufferHeight, um die aktuelle Größe des Hintergrundpuffers zu bestimmen.


Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Fehlerhafte Eingabegröße: Der Breiten- oder Höhen-Parameter ist entweder kleiner als die zulässige minimale Hintergrundpuffergröße oder größer als die maximale Hintergrundpuffergröße.
 
Error — 3709: Das depthAndStencil-Flag im Anwendungsdeskriptor muss mit dem booleschen enableDepthAndStencil-Wert übereinstimmen, der an configureBackBuffer() im Context3D-Objekt übergeben wurde.

createCubeTexture

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Erstellt ein CubeTexture-Objekt.

Verwenden Sie ein CubeTexture-Objekt, um Würfeltexturbitmaps in den Renderkontext hochzuladen und während des Rendervorgangs auf eine Würfeltextur zu verweisen. Eine Würfeltextur besteht aus sechs quadratischen Texturen gleicher Größe, die würfelförmig angeordnet sind und beim Beschreiben von Umgebungsmaps hilfreich sind.

Sie können CubeTexture-Objekte nicht mit einem CubeTexture-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein CubeTexture-Objekt erstellt haben, laden Sie die Texturbitmapdaten mit der CubeTexture-Methode uploadFromBitmapData(), uploadFromByteArray() oder uploadCompressedTextureFromByteArray() hoch.

Parameter

size:int — Die Länge der Texturkante in Texel.
 
format:String — Das Texelformat der von Context3DTextureFormat aufgezählten Liste.

Mithilfe der Texturkomprimierung können Sie Texturbilder im komprimierten Format direkt auf der GPU speichern, wodurch GPU-Speicher und Speicherbrandbreite eingespart werden können. Normalerweise werden komprimierte Texturen offline komprimiert und auf die GPU in komprimierter Form mithilfe der Methode „Texture.uploadCompressedTextureFromByteArray“ hochgeladen. Flash Player 11.4 und AIR 3.4 auf Desktopplattformen unterstützen Laufzeittexturkomprimierung, was in bestimmten Situationen hilfreich sein kann, zum Beispiel, wenn dynamische Texturen von Vektorbildern dargestellt werden sollen. Beachten Sie, dass diese Funktion derzeit nicht auf mobilen Plattformen verfügbar ist und ein ArgumentError (Texturformatdiskrepanz) stattdessen ausgegeben wird. Führen Sie die folgenden Schritte aus, um die Texturkomprimierung zur Laufzeit zu verwenden. 1. Erstellen Sie das Texturobjekt, indem Sie die Methode „Context3D.createCubeTexture()“ aufrufen und dabei entweder „flash.display3D.Context3DTextureFormat.COMPRESSED“ oder „flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA“ als Formatparameter übergeben. 2. Mithilfe der Instanz „flash.display3D.textures.Texture“, die von „createCubeTexture()“ zurückgegeben wurde, rufen Sie entweder „flash.display3D.textures.CubeTexture.uploadFromBitmapData()“ oder „flash.display3D.textures.CubeTexture.uploadFromByteArray()“ auf, um die Textur mit einem Schritt hochzuladen und zu komprimieren.

 
optimizeForRenderToTexture:Boolean — Hat den Wert true, wenn die Textur wahrscheinlich als Renderziel verwendet wird.
 
streamingLevels:int (default = 0) — Das MIP-Map-Level, das geladen sein muss, bevor das Bild gerendert wird. Texturstreaming bietet die Möglichkeit die kleinsten MIP-Level zuerst zu laden und anzuzeigen, wobei beim Laden der Testuren schrittweise Bilder mit besserer Qualität angezeigt werden. Endbenutzer können qualitativ schlechtere Bilder in einer Anwendung anzeigen, während die Bilder mit besserer Qualität geladen werden.

Der Standardwert für streamingLevels ist 0, was bedeutet, dass das Bild mit der höchsten Qualität in der MIP-Map geladen sein muss, bevor das Bild dargestellt wird. Dieser Parameter wurde für Flash Player 11.3 und AIR 3.3 hinzugefügt. Wenn Sie den Standardwert verwenden, wird das Verhalten früherer Versionen von Flash Player und AIR beibehalten.

Stellen Sie streamingLevels auf einen Wert zwischen 1 und der Anzahl der Bilder in der MIP-Map ein, um Texturstreaming zu ermöglichen. Beispiel: Sie haben eine MIP-Map, die ein Hauptbild mit der höchsten Qualität von 64x64 Pixel enthält. Bilder mit geringerer Qualität in der MIP-Map haben die Auflösung 32x32, 16x16, 8x8, 4x4, 2x2 und 1x1 Pixel für insgesamt 7 Bilder oder 7 Ebenen. Ebene 0 enthält das Bild mit der höchsten Qualität. Der Höchstwert für diese Eigenschaft ist log2(min(width,height)). Deshalb hat für ein Hauptbild mit der Auflösung 64x64 Pixel streamingLevels den Höchstwert 7. Stellen Sie diese Eigenschaft auf 3 ein, um das Bild zu rendern, nachdem das Bild mit der Auflösung 8x8 Pixel geladen wurde.

Hinweis: Das Einstellen dieser Eigenschaft auf einen Wert > 0 kann Speicherauslastung und Leistung beeinträchtigen.

Rückgabewerte
flash.display3D.textures:CubeTexture

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
 
ArgumentError — Tiefentextur nicht implementiert: wenn Sie versuchen, eine Tiefentextur zu erstellen.
 
ArgumentError — Texturgröße ist null: wenn der size-Parameter nicht größer als null ist.
 
ArgumentError — Textur keine Zweierpotenz: wenn der size-Parameter keine Zweierpotenz ist.
 
ArgumentError — Textur zu groß: wenn der size-Parameter größer als 1024 ist.
 
Error — Textur konnte nicht erstellt werden: wenn das CubeTexture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
 
ArgumentError — Ungültiges Streaming: wenn streamingLevels größer oder gleich log2(size) ist.

Verwandte API-Elemente

createIndexBuffer

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Erstellt ein IndexBuffer3D-Objekt.

Verwenden Sie ein IndexBuffer3D-Objekt, um einen Satz Dreieckindizes in den Renderkontext hochzuladen und für das Rendern auf diesen Indexsatz zu verweisen. Jeder Index im Indexpuffer verweist auf einen entsprechenden Vertex im Vertexpuffer. Jeder Satz aus drei Indizes stellt ein Dreieck dar. Übergeben Sie das IndexBuffer3D-Objekt an die drawTriangles()-Methode, um eines oder mehrere der im Indexpuffer definierten Dreiecke zu rendern.

Sie können IndexBuffer3D-Objekte nicht mit dem IndexBuffer3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein IndexBuffer3D-Objekt erstellt haben, laden Sie die Indizes mithilfe der IndexBuffer3D-Methoden uploadFromVector() oder uploadFromByteArray() hoch.

Parameter

numIndices:int — die Anzahl der Scheitelpunkte, die im Puffer gespeichert werden.
 
bufferUsage:String (default = "staticDraw") — die erwartete Pufferverwendung. Verwenden Sie eine der Konstanten, die in Context3DBufferUsage definiert ist. Der Hardwaretreiber kann die entsprechende Optimierung vornehmen, wenn Sie ihn richtig festlegen. Dieser Parameter ist nur nach Flash 12/AIR 4 verfügbar.

Rückgabewerte
IndexBuffer3D

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Indexpuffer erstellt werden oder wenn der Speicher, der Indexpuffern zugewiesen wurde, überschritten wird.
 
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
 
ArgumentError — Puffer zu groß: Wenn numIndices größer als oder gleich 0xf0000 ist.

Verwandte API-Elemente

createProgram

()Methode 
public function createProgram():Program3D

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Erstellt ein Program3D-Objekt.

Verwenden Sie ein Program3D-Objekt, um Shaderprogramme in den Renderkontext hochzuladen und während des Rendervorgangs auf die hochgeladenen Programme zu verweisen. Ein Program3D-Objekt speichert zwei Programme, ein Vertexprogramm und ein Fragmentprogramm (auch Pixelprogramm genannt). Die Programme werden in einer binären Shader-Aufbausprache geschrieben.

Sie können Program3D-Objekte nicht mit dem Program3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein Program3D-Objekt erstellt haben, laden Sie die Programme mithilfe der Program3D-Methode upload() hoch.

Rückgabewerte
Program3D

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Die Anzahl der Programme übersteigt 4096 oder die Gesamtspeichergröße übersteigt 16 MB (verwenden Sie dispose, um Program3D-Ressourcen freizugeben).

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Dieses Beispiel veranschaulicht, wie ein Paar von Vertex- und Pixelprogrammen für einen Renderingkontext erstellt, hochgeladen und aktiviert wird. Beachten Sie, dass das Objekt, renderContext, eine Instanz der Context3D-Klasse ist. Die Programme in diesem Beispiel sind in Adobe Graphics Assembly Language (AGAL) geschrieben.
//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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.8, AIR 3.8

Erstellt ein RectangleTexture-Objekt.

Verwenden Sie ein RectangleTexture-Objekt, um Texturbitmaps in den Renderkontext hochzuladen und während des Rendervorgangs auf eine Textur zu verweisen.

Sie können RectangleTexture-Objekte nicht mit dem RectangleTexture-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein RectangleTexture-Objekt erstellt haben, laden Sie die Texturbitmaps mit der Texture-Methode uploadFromBitmapData() oder uploadFromByteArray() hoch.

Beachten Sie, dass 32-Bit-Ganzzahltexturen in einem komprimierten BGRA-Format gespeichert werden, damit sie dem Flash-BitmapData-Format entsprechen. Gleitkommatexturen verwenden ein konventionelles RGBA-Format.

Rechtecktexturen unterscheiden sich dadurch von regulären 2D-Texturen, dass die Breite und Höhe keine Zweierpotenzen sein müssen. Außerdem enthalten sie keine Mipmaps. Sie sind am hilfreichsten beim Rendern in Texturen. Wenn eine Rechtecktextur mit einem Sampler verwendet wird, der Mipmapfilterung oder Repeat-Wrapping verwendet, schlägt der Aufruf von drawTriangles fehl. Rechtecktexturen lassen auch kein Streaming zu. Die einzigen Texturformate, die von Rechtecktexturen unterstützt werden, sind BGRA, BGR_PACKED, BGRA PACKED. Die komprimierten Texturformate werden nicht von Rechtecktexturen unterstützt.

Parameter

width:int — Die Breite der Textur in Pixel.
 
height:int — Die Höhe der Textur in Pixel.
 
format:String — Das Texelformat der von Context3DTextureFormat aufgezählten Liste.
 
optimizeForRenderToTexture:Boolean — Hat den Wert true, wenn die Textur wahrscheinlich als Renderziel verwendet wird.

Rückgabewerte
flash.display3D.textures:RectangleTexture

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
 
ArgumentError — Texturgröße ist null: wenn weder der width- noch der height-Parameter größer als null ist.
 
ArgumentError — Textur zu groß: wenn entweder der width- oder der height-Parameter größer als 2048 ist.
 
Error — Textur konnte nicht erstellt werden: wenn das Texture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
 
Error — Erfordert Baseline-Profil oder höher: Wenn rechteckige Textur mit eingeschränktem Baseline-Profil erstellt wird.

Verwandte API-Elemente

createTexture

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Erstellt ein Texture-Objekt.

Verwenden Sie ein Texture-Objekt, um Texturbitmaps in den Renderkontext hochzuladen und während des Rendervorgangs auf eine Textur zu verweisen.

Sie können Texture-Objekte nicht mit einem Texture-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein Texture-Objekt erstellt haben, laden Sie die Texturbitmaps mit der Texture-Methode uploadFromBitmapData(), uploadFromByteArray() oder uploadCompressedTextureFromByteArray() hoch.

Beachten Sie, dass 32-Bit-Ganzzahltexturen in einem komprimierten BGRA-Format gespeichert werden, damit sie dem Flash-BitmapData-Format entsprechen. Gleitkommatexturen verwenden ein konventionelles RGBA-Format.

Parameter

width:int — Die Breite der Textur in Pixel.
 
height:int — Die Höhe der Textur in Pixel.
 
format:String — Das Texelformat der von Context3DTextureFormat aufgezählten Liste.

Mithilfe der Texturkomprimierung können Sie Texturbilder im komprimierten Format direkt auf der GPU speichern, wodurch GPU-Speicher und Speicherbrandbreite eingespart werden können. Normalerweise werden komprimierte Texturen offline komprimiert und auf die GPU in komprimierter Form mithilfe der Methode „Texture.uploadCompressedTextureFromByteArray“ hochgeladen. Flash Player 11.4 und AIR 3.4 auf Desktopplattformen unterstützen Laufzeittexturkomprimierung, was in bestimmten Situationen hilfreich sein kann, zum Beispiel, wenn dynamische Texturen von Vektorbildern dargestellt werden sollen. Beachten Sie, dass diese Funktion derzeit nicht auf mobilen Plattformen verfügbar ist und ein ArgumentError (Texturformatdiskrepanz) stattdessen ausgegeben wird. Führen Sie die folgenden Schritte aus, um die Texturkomprimierung zur Laufzeit zu verwenden. 1. Erstellen Sie das Texturobjekt, indem Sie die Methode „Context3D.createTexture()“ aufrufen und dabei entweder „flash.display3D.Context3DTextureFormat.COMPRESSED“ oder „flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA“ als Formatparameter übergeben. 2. Mithilfe der Instanz „flash.display3D.textures.Texture“ die von „createTexture()“ zurückgegeben wurde, rufen Sie entweder „flash.display3D.textures.Texture.uploadFromBitmapData()“ oder „flash.display3D.textures.Texture.uploadFromByteArray()“ auf, um die Textur mit einem Schritt hochzuladen und zu komprimieren.

 
optimizeForRenderToTexture:Boolean — Hat den Wert true, wenn die Textur wahrscheinlich als Renderziel verwendet wird.
 
streamingLevels:int (default = 0) — Das MIP-Map-Level, das geladen sein muss, bevor das Bild gerendert wird. Texturstreaming bietet die Möglichkeit die kleinsten MIP-Level zuerst zu laden und anzuzeigen, wobei beim Laden der Testuren schrittweise Bilder mit besserer Qualität angezeigt werden. Endbenutzer können qualitativ schlechtere Bilder in einer Anwendung anzeigen, während die Bilder mit besserer Qualität geladen werden.

Der Standardwert für streamingLevels ist 0, was bedeutet, dass das Bild mit der höchsten Qualität in der MIP-Map geladen sein muss, bevor das Bild dargestellt wird. Dieser Parameter wurde für Flash Player 11.3 und AIR 3.3 hinzugefügt. Wenn Sie den Standardwert verwenden, wird das Verhalten früherer Versionen von Flash Player und AIR beibehalten.

Stellen Sie streamingLevels auf einen Wert zwischen 1 und der Anzahl der Bilder in der MIP-Map ein, um Texturstreaming zu ermöglichen. Beispiel: Sie haben eine MIP-Map, die ein Hauptbild mit der höchsten Qualität von 64x64 Pixel enthält. Bilder mit geringerer Qualität in der MIP-Map haben die Auflösung 32x32, 16x16, 8x8, 4x4, 2x2 und 1x1 Pixel für insgesamt 7 Bilder oder 7 Ebenen. Ebene 0 enthält das Bild mit der höchsten Qualität. Der Höchstwert für diese Eigenschaft ist log2(min(width,height)). Deshalb hat für ein Hauptbild mit der Auflösung 64x64 Pixel streamingLevels den Höchstwert 7. Stellen Sie diese Eigenschaft auf 3 ein, um das Bild zu rendern, nachdem das Bild mit der Auflösung 8x8 Pixel geladen wurde.

Hinweis: Das Einstellen dieser Eigenschaft auf einen Wert > 0 kann Speicherauslastung und Leistung beeinträchtigen.

Rückgabewerte
flash.display3D.textures:Texture

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
 
ArgumentError — Tiefentextur nicht implementiert: wenn Sie versuchen, eine Tiefentextur zu erstellen.
 
ArgumentError — Texturgröße ist null: wenn weder der width- noch der height-Parameter größer als null ist.
 
ArgumentError — Textur keine Zweierpotenz: wenn weder der width- noch der height-Parameter eine Zweierpotenz ist.
 
ArgumentError — Textur zu groß: Wenn width- oder height-Parameter größer ist als 2048 für Baseline und eingeschränktes Baseline-Profil sind oder wenn entweder width- oderheight-Parameter größer als 4096 und mehr für das erweiterte Baseline-Profil ist.
 
Error — Textur konnte nicht erstellt werden: wenn das Texture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).
 
ArgumentError — Ungültiges Streaming: wenn streamingLevels größer oder gleich log2(min(width,height)) ist.

Verwandte API-Elemente

createVertexBuffer

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Erstellt ein VertexBuffer3D-Objekt.

Verwenden Sie ein VertexBuffer3D-Objekt, um einen Satz von Vertexdaten in den Renderkontext hochzuladen. Ein Vertexpuffer enthält die Daten, die zum Rendern der einzelnen Punkte in der Szenengeometrie erforderlich sind. Die Datenattribute, die den einzelnen Vertizes zugeordnet sind, umfassen normalerweise Koordinaten für Position, Farbe und Textur und dienen als Eingabe für das Vertexshaderprogramm. Identifizieren Sie die Datenwerte, die einer der Eingaben in das Vertexprogramm entsprechen, indem Sie die setVertexBufferAt()-Methode verwenden. Sie können für jeden Vertex bis zu 64 32-Bit-Werte angeben.

Sie können VertexBuffer3D-Objekte nicht mit dem VertexBuffer3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein VertexBuffer3D-Objekt erstellt haben, laden Sie die Vertexdaten mithilfe der VertexBuffer3D-Methoden uploadFromVector() oder uploadFromByteArray() hoch.

Parameter

numVertices:int — die Anzahl der Scheitelpunkte, die im Puffer gespeichert werden. Die maximale Anzahl von Scheitelpunkten in einem einzelnen Puffer ist 65535.
 
data32PerVertex:int — die Anzahl von 32-Bit (4-Byte)-Datenwerten, die jedem Vertex zugeordnet sind. Die maximale Anzahl von 32-Bit-Datenelementen pro Vertex ist 64 (oder 256 Bytes). Beachten Sie, dass von einem Vertexshaderprogramm jeweils nur auf acht Attributregister zugegriffen werden kann. Verwenden Sie SetVertextBufferAt(), um Attribute aus einem Vertexpuffer heraus auszuwählen.
 
bufferUsage:String (default = "staticDraw") — die erwartete Pufferverwendung. Verwenden Sie eine der Konstanten, die in Context3DBufferUsage definiert ist. Der Hardwaretreiber kann die entsprechende Optimierung vornehmen, wenn Sie ihn richtig festlegen. Dieser Parameter ist nur nach Flash 12/AIR 4 verfügbar.

Rückgabewerte
VertexBuffer3D

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Vertexpuffer erstellt werden oder wenn der Speicher, der Vertexpuffern zugeteilt wurde, überschritten wird.
 
ArgumentError — Puffer zu groß: wenn numVertices größer als 0x10000 oder data32PerVertex größer als 64 ist.
 
ArgumentError — Puffer hat Nullgröße: wenn numVertices oder data32PerVertex null ist.
 
ArgumentError — Puffer konnte nicht erstellt werden: wenn das VertexBuffer3D-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine weiteren Informationen über den Grund verfügbar sind).
 
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Das folgende Beispiel veranschaulicht das Erstellen und Laden eines Vertexdatenpuffers. Der Puffer in diesem Beispiel enthält zwei Datentypen für jeden Vertex: die Position als Koordinaten x, y, z; und die Farbe als rgb-Komponenten. Nachdem der Vertexpuffer erstellt wurde, ruft der Beispielcode die setVertexBufferAt()-Methode auf, um festzulegen, dass die ersten drei Datenpunkte als 3 Gleitkommawerte in va0 und die zweiten drei Datenpunkte als va1 übergeben werden. Für ein Vertexprogramm können auf diese Weise bis zu 8 Eingaben, auch als Vertexattributregister bezeichnet, definiert werden.
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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 20.0

Erstellt ein VertexBuffer3D-Objekt für Instanzdaten.

Verwenden Sie ein VertexBuffer3D-Objekt, um einen Satz von Instanzdaten in den Renderkontext hochzuladen. Der Vertex-Puffer enthält die Daten, die zum Rendern der einzelnen Instanzen in der Szenengeometrie erforderlich sind. Vertex-Puffer mit Instanzdaten bieten Attribute, die alle Scheitelpunkte einer Instanz gemeinsam haben. und dienen als Eingabe für das Vertex-Shader-Programm. Identifizieren Sie die Datenwerte, die einer der Eingaben in das Vertexprogramm entsprechen, indem Sie die setVertexBufferAt()-Methode verwenden. Sie können für jeden Vertex-Puffer bis zu 64 32-Bit-Werte angeben.

Sie können VertexBuffer3D-Objekte nicht mit dem VertexBuffer3D-Konstruktor erstellen; verwenden Sie stattdessen diese Methode. Nachdem Sie ein VertexBuffer3D-Objekt erstellt haben, laden Sie die Vertexdaten mithilfe der VertexBuffer3D-Methoden uploadFromVector() oder uploadFromByteArray() hoch.

Parameter

numVertices:int — die Anzahl von Elementen, die im Puffer gespeichert werden. Die maximale Anzahl von Elementen in einem einzelnen Puffer ist 65535.
 
data32PerVertex:int — die Anzahl von 32-Bit (4-Byte)-Datenwerten, die jedem Element zugeordnet sind. Die maximale Anzahl von 32-Bit-Datenelementen pro Vertex ist 64 (oder 256 Bytes).
 
instancesPerElement:int — die Anzahl der Instanzen, die ein Element des Vertex-Puffers verwendet.
 
bufferUsage:String (default = "staticDraw") — die erwartete Pufferverwendung. Verwenden Sie eine der Konstanten, die in Context3DBufferUsage definiert ist. Der Hardwaretreiber kann die entsprechende Optimierung vornehmen, wenn Sie ihn richtig festlegen. Dieser Parameter ist nur nach Flash 12/AIR 4 verfügbar.

Rückgabewerte
VertexBuffer3D

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Vertexpuffer erstellt werden oder wenn der Speicher, der Vertexpuffern zugeteilt wurde, überschritten wird.
 
ArgumentError — Puffer zu groß: wenn numVertices größer als 0x10000 oder data32PerVertex größer als 64 ist.
 
ArgumentError — Puffer hat Nullgröße: wenn numVertices oder data32PerVertex null ist.
 
ArgumentError — Puffer konnte nicht erstellt werden: wenn das VertexBuffer3D-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine weiteren Informationen über den Grund verfügbar sind).
 
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
 
Error — Erfordert erweitertes Standardprofile oder höher: Wenn diese Methode aufgerufen wird, wenn das angeforderte Profil kleiner als das erweiterte Standardprofil ist.
 
Error — Ungültige Instanzen pro Element: Wenn das instancesPerElement nicht größer als null ist.

Verwandte API-Elemente

createVideoTexture

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 17.0, Flash Player 18.0

Erstellt ein VideoTexture-Objekt.

Verwenden Sie ein VideoTexture-Objekt, um Videobilder als Textur vom NetStream-Objekt oder Camera-Objekt zu erhalten und die Videobilder in den Renderkontext hochzuladen.

Das VideoTexture-Objekt kann nicht mit dem VideoTexture-Konstruktor erstellt werden; verwenden Sie stattdessen diese Methode. Hängen Sie nach dem Erstellen eines VideoTexture-Objekts ein NetStream-Objekt oder Camera-Objekt an, um die Videobilder mit den VideoTexture-Methoden attachNetStream() oder attachCamera() abzurufen.

Beachten Sie, dass diese Methode null zurückgibt, wenn das System diese Funktion nicht unterstützt.

VideoTexture enthält keine Mipmaps. Wenn VideoTexture mit einem Sampler genutzt wird, der Mipmapfilterung oder Repeat-Wrapping verwendet, schlägt der Aufruf von drawTriangles fehl. VideoTexture kann von Shadern als BGRA-Textur behandelt werden. Der Versuch, das VideoTexture-Objekt zu instanziieren, schlägt fehl, wenn Context3D mit dem softwarebasierten Rendermodus angefordert wurde.

Pro Context3D-Instanz sind maximal 4 VideoTexture-Objekte verfügbar. Auf mobilen Geräten kann die tatsächliche Anzahl der unterstützten VideoTexture-Geräte aufgrund von Plattformbeschränkungen niedriger als 4 sein.

Rückgabewerte
flash.display3D.textures:VideoTexture

Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Ressourcenlimit überschritten: wenn zu viele Texture-Objekte erstellt werden oder wenn der Speicher, der Texturen zugewiesen wurde, überschritten wird.
 
Error — Textur konnte nicht erstellt werden: wenn das Texture-Objekt nicht vom Renderingkontext erstellt werden konnte (aber keine Informationen über den Grund verfügbar sind).

dispose

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Macht alle Ressourcen und internen Speicher frei, die/der mit diesem Context3D-Objekt verknüpft sind.

Alle Indexpuffer, Vertexpuffer, Texturen und Programme, die über dieses Context3D-Objekt erstellt wurden, werden entfernt, als ob Sie jeweils dispose() aufrufen. Zusätzlich wird das Context3D-Objekt selbst entfernt, wobei alle temporären Puffer sowie der Hintergrundpuffer freigegeben werden. Beim Aufruf von configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() oder drawToBitmapData() nach dem Aufruf von dispose() wird eine Ausnahme ausgegeben.

Warnung: Bei einem Aufruf von dispose() für ein Context3D-Objekt, während es noch einen Ereignis-Listener für Events.CONTEXT3D_CREATE am zugeordneten Stage3D-Objekt gibt, simuliert der dispose()-Aufruf einen Geräteverlust. Damit wird ein neues Context3D-Objekt am Stage3D-Objekt erstellt und das Events.CONTEXT3D_CREATE-Ereignis erneut abgesetzt. Falls dies nicht erwünscht ist, entfernen Sie den Ereignis-Listener vom Stage3D-Objekt, bevor Sie dispose() aufrufen, oder setzen Sie den Parameter auf „false“.

Parameter

recreate:Boolean (default = true)

Verwandte API-Elemente

    drawToBitmapData

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 3

Zeichnet den aktuellen Renderpuffer in eine Bitmap.

Der aktuelle Inhalt des Hintergrund-Renderpuffers wird in ein BitmapData-Objekt kopiert. Dies ist ein potenziell langsamer Vorgang, der bis zu eine Sekunde dauern kann. Gehen Sie mit Vorsicht vor. Beachten Sie, dass diese Funktion nicht den Frontpuffer (der auf der Bühne gezeigt wird) kopiert, sondern den Puffer, in den gezeichnet wird. Um das gerenderte Bild zu erfassen, wie es auf der Bühne erscheint, rufen Sie drawToBitmapData() direkt vor dem Aufruf von present() auf.

Ab AIR 25 sind zwei neue Parameter in der API drawToBitmapData() vorhanden. Diese API umfasst jetzt drei Parameter. Der erste ist der bereits vorhandene Parameter destination:BitmapData. Der zweite Parameter ist srcRect:Rectangle, ein Rechteck in Stage3D. Der dritte Parameter ist destPoint:Point, die Koordinate im Ziel-Bitmap. Die Parameter srcRect und destPoint sind optional und nehmen die Standardwerte (0,0,bitmapWidth,bitmapHeight) bzw. (0,0) an.

Wenn das Bild gezeichnet wird, wird es nicht an die Größe der Bitmap angepasst. Die Inhalte werden stattdessen auf die Größe der Zielbitmap zugeschnitten.

Flash-BitmapData-Objekte speichern Farben, die bereits von der Alphakomponente multipliziert wurden. Wenn zum Beispiel die reinen RGB-Farbkomponenten eines Pixels (0x0A, 0x12, 0xBB) sind und die Alphakomponente 0x7F (.5) ist, wird das Pixel mit den folgenden rgba-Werten im BitmapData-Objekt gespeichert: (0x05, 0x09, 0x5D, 0x7F). Sie können die Mischfaktoren so einstellen, dass die in den Puffer gerenderten Farben mit Alpha multipliziert werden, oder die Operation im Fragmentshader ausführen. Der Renderkontext überprüft nicht, ob die Farben im vorab multiplizierten Format gespeichert werden.

Parameter

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


Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.
 
Error — 3802: Wenn einer der Parameter destPoint:Point bzw. srcRect:Rectangle außerhalb der Koordinatengrenze „bitmap/stage3D“ liegt oder wenn nicht-numerische Werte (NaN) als Eingabe weitergeleitet werden.

Beispiel  ( Verwendung dieses Beispiels )

Im folgenden Beispiel werden zwei Dreiecke sowohl in den normalen Renderpuffer als auch in ein BitmapData-Objekt gerendert. Das BitmapData-Objekt wird angezeigt, indem ein Bitmap-Objekt der normalen Anzeigeliste hinzugefügt wird. Auf das Bitmaprendering wird ein Schlagschattenfilter angewendet.
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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts.

Für jedes Dreieck werden die Dreieckvertices vom Vertex-Shader-Programm und die Dreieckoberfläche vom Pixel-Shader-Programm verarbeitet. Die Ausgabefarbe aus dem Pixelprogramm für die einzelnen Pixel wird in das Renderziel gezeichnet, abhängig von Schablonenoperationen, Tiefentest, Quell- und Ziel-Alpha sowie aktueller Füllmethode. Das Renderziel kann der Hauptrenderpuffer oder eine Textur sein.

Wenn Culling aktiviert ist (mit der setCulling()-Methode), können Dreiecke aus der Szene entfernt werden, bevor das Pixelprogramm ausgeführt wird. Wenn Schablonen- und Tiefentests aktiviert sind, können die Ausgabepixel aus dem Pixelprogramm verworfen werden, ohne dass das Renderziel aktualisiert werden muss. Zusätzlich kann das Pixelprogramm festlegen, für ein Pixel keine Farbe auszugeben.

Die gerenderten Dreiecke werden im Viewport nicht angezeigt, bis Sie die present()-Methode aufrufen. Nach jedem Aufruf von present() muss die clear()-Methode vor dem ersten Aufruf von drawTriangles() aufgerufen werden, andernfalls schlägt das Rendern fehl.

Wenn enableErrorChecking den Wert false hat, gibt diese Funktion sofort Werte zurück, wartet nicht auf Ergebnisse und gibt Ausnahmen nur dann aus, wenn diese Context3D-Instanz verworfen wurde oder wenn es zu viele Zeichenaufrufe gibt. Wenn der Zustand des Renderingkontextes ungültig ist, schlägt das Rendering ohne weitere Meldung fehl. Wenn die enableErrorChecking-Eigenschaft den Wert true hat, gibt diese Funktion Werte zurück, nachdem die Dreiecke gezeichnet wurden, und gibt Ausnahmen für alle Zeichenfehler oder ungültige Kontextzustände zurück.

Parameter

indexBuffer:IndexBuffer3D — ein Satz von Scheitelpunktindizes, die auf die zu rendernden Scheitelpunkte verweisen.
 
firstIndex:int (default = 0) — der Index des ersten zum Rendern ausgewählten Scheitelpunktindex. Standardwert ist 0.
 
numTriangles:int (default = -1) — die Anzahl der zu rendernden Dreiecke. Jedes Dreieck verbraucht drei Indizes. Übergeben Sie -1, um alle Dreiecke im Indexpuffer zu zeichnen. Standardwert ist -1.


Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Wenn diese Methode zu viele Male zwischen Aufrufen von present() aufgerufen wurde. Die maximale Anzahl von Aufrufen ist 32.768.

Die folgenden Fehler werden nur dann ausgegeben, wenn die enableErrorChecking-Eigenschaft den Wert true hat:

 
Error — Vor dem Zeichnen Löschen erforderlich: Wenn der Puffer seit dem letzten Aufruf von present() nicht geleert wurde.
 
Error — Wenn kein gültiges Program3D-Objekt festgelegt wurde.
 
Error — Kein gültiger Indexpuffer festgelegt: Wenn kein IndexBuffer3D-Objekt festgelegt wurde.
 
Error — Sanity Check für Parameter fehlgeschlagen: wenn die Anzahl der zu zeichnenden Dreiecke oder firstIndex die zulässigen Werte übersteigt.
 
RangeError — Nicht genügend Indizes in diesem Puffer: wenn der Puffer nicht genug Indizes enthält, um die Anzahl der zu zeichnenden Dreiecke zu definieren.
 
Error — Sample bindet Textur, die auch an Renderer gebunden ist: wenn das Renderziel eine Textur ist und diese Textur einer Textureingabe des aktuellen Fragmentprogramm zugewiesen ist.
 
Error — Sample bindet ungültige Textur: Es wurde eine ungültige Textur als Eingabe für das aktuelle Fragmentprogramm eingegeben.
 
Error — Samplerformat stimmt nicht mit Texturformat überein: wenn die als Eingabe für das aktuelle Fragmentprogramm zugewiesene Textur ein anderes Format hat als das dem Samplerregister zugewiesene. Beispiel: eine 2D-Textur wurde einem Würfeltextursampler zugewiesen.
 
Error — Sample bindet nicht definierte Textur: Das aktuelle Fragmentprogramm greift auf ein Texturregister zu, das nicht festgelegt wurde (mit setTextureAt()).
 
Error — Dieselbe Textur benötigt dieselben Samplerparameter: Wenn eine Textur für mehrere Samplerregister verwendet wird, müssen alle Sampler dieselben Einstellungen verwenden. Sie können zum Beispiel nicht für einen Sampler die Fortführung der Randfarben („clamp“) und für den anderen die Kachelung („wrap“) verwenden.
 
Error — Textur gebunden, aber nicht verwendet: Eine Textur ist als Shadereingabe festgelegt, wird jedoch nicht verwendet.
 
Error — Stream wird nicht verwendet: Ein Vertexpuffer ist einer Vertexattributeingabe zugewiesen, das Vertexprogramm verweist jedoch nicht auf das entsprechende Register.
 
Error — Stream ist ungültig: Ein VertexBuffer3D-Objekt, das einer Vertexprogrammeingabe zugewiesen ist, ist kein gültiges Objekt.
 
RangeError — Stream hat nicht genügend Vertizes: Ein Vertexpuffer, der Daten für die angegebenen Dreiecke bereitstellt, hat nicht genügend Daten.
 
RangeError — Streamvertexoffset außerhalb des gültigen Bereichs: Der in einem Aufruf von setVertexBufferAt() angegebene Offset ist negativ oder nach dem Ende des Puffers.
 
Error — Stream gelesen, aber nicht festgelegt: Ein Vertexattribut, das vom aktuellen Vertexprogramm gelesen wird, wurde nicht festgelegt (mit setVertexBufferAt()).

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Die folgende Klasse zeichnet zwei Dreiecke in einen Stage3D-Viewport auf der Bühne. Die Dreiecke haben einen gemeinsamen Vertex, der sich am Ursprung (0,0,0) befindet.

Die Dreiecke werden mithilfe des Vertexbuffers und des Indexbuffers definiert. Der Vertexbuffer enthält die Informationen zu Position und Farbe für jeden Vertex des Dreiecks. Der Indexbuffer enthält Indizes für den Vertexbuffer. Drei Indizes definieren ein Dreieck. Zum Beispiel wird ein Dreieck, das aus den ersten drei Punkten im Vertexbuffer besteht, im Indexbuffer als 0,1,2 aufgeführt.

In diesem einfachen Beispiel wird keine 3D-Transformation ausgeführt. Es können nur Objekte innerhalb des kanonischen Anzeigebereichs (mit dem Volumen 2x2x1) angezeigt werden und die Koordinaten der Dreiecke müssen innerhalb dieses Bereichs definiert werden. Beim Rendern einer typischen 3D-Szene projizieren Sie die Objekte jedoch für das Rendering aus dem Weltkoordinatensystem in diesen Ansichtsbereich, indem Sie entweder eine perspektivische oder orthografische Projektion verwenden.

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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 20.0

Rendert die angegebenen Dreiecke mit den aktuellen Puffern und dem Zustand dieses Context3D-Objekts.

Für jedes Dreieck jeder Instanz werden die Dreieckscheitelpunkte vom Vertex-Shader-Programm und die Dreiecksoberfläche vom Pixel-Shader-Programm verarbeitet. Die Ausgabefarbe aus dem Pixelprogramm für die einzelnen Pixel wird in das Renderziel gezeichnet, abhängig von Schablonenoperationen, Tiefentest, Quell- und Ziel-Alpha sowie aktueller Füllmethode. Das Renderziel kann der Hauptrenderpuffer oder eine Textur sein.

Wenn Culling aktiviert ist (mit der setCulling()-Methode), können Dreiecke aus der Szene entfernt werden, bevor das Pixelprogramm ausgeführt wird. Wenn Schablonen- und Tiefentests aktiviert sind, können die Ausgabepixel aus dem Pixelprogramm verworfen werden, ohne dass das Renderziel aktualisiert werden muss. Zusätzlich kann das Pixelprogramm festlegen, für ein Pixel keine Farbe auszugeben.

Die gerenderten Instanzdreiecke werden im Viewport nicht angezeigt, bis Sie die present()-Methode aufrufen. Nach jedem Aufruf von present(), muss die clear()-Methode vor dem ersten Aufruf von drawTrianglesInstanced() aufgerufen werden, andernfalls schlägt das Rendern fehl.

Wenn enableErrorChecking den Wert false hat, gibt diese Funktion sofort Werte zurück, wartet nicht auf Ergebnisse und gibt Ausnahmen nur dann aus, wenn diese Context3D-Instanz verworfen wurde oder wenn es zu viele Zeichenaufrufe gibt. Wenn der Zustand des Renderingkontextes ungültig ist, schlägt das Rendering ohne weitere Meldung fehl. Wenn die enableErrorChecking-Eigenschaft den Wert true hat, gibt diese Funktion Werte zurück, nachdem die Dreiecke gezeichnet wurden, und gibt Ausnahmen für alle Zeichenfehler oder ungültige Kontextzustände zurück.

Diese Methode gibt eine Ausnahme aus, wenn der Instanz-Puffer inkorrekt mit SetVertexAt() sequenziert ist. Mit Direct 3D 9 müssen z. B. die indizierten Geometriedaten und die Anzahl der zu zeichnenden Instanzen immer in Stream null mit der API SetStreamSourceFreq() eingerichtet sein.

Dies bedeutet, dass der mit CreateVertexBufferForInstance() erstellte Vertex-Puffer nicht mit der Mindest-Indexnummer platziert werden darf, wenn er mit SetVertexBufferAt() als Eingabe für das Vertex-Shader-Programm angeordnet ist. Der mit CreateVertexBuffer() erstellte Vertex-Puffer muss mit einer niedrigeren Indexnummer als jener von CreateVertexBufferForInstance() platziert werden. Im Allgemeinen müssen die Geometriedaten mit SetVertexBufferAt() vor Instanzdaten platziert werden.

Parameter

indexBuffer:IndexBuffer3D — ein Satz von Scheitelpunktindizes, die auf die zu rendernden Scheitelpunkte verweisen.
 
numInstances:int — Anzahl von zu rendernden Instanzen.
 
firstIndex:int (default = 0) — der Index des ersten zum Rendern ausgewählten Scheitelpunktindex. Standardwert ist 0.
 
numTriangles:int (default = -1) — die Anzahl der zu rendernden Dreiecke. Jedes Dreieck verbraucht drei Indizes. Übergeben Sie -1, um alle Dreiecke im Indexpuffer zu zeichnen. Standardwert ist -1.


Auslöser
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.
 
Error — Wenn diese Methode zu viele Male zwischen Aufrufen von present() aufgerufen wurde. Die maximale Anzahl von Aufrufen ist 32.768.
 
Error — Erfordert erweitertes Standardprofile oder höher: Wenn diese Methode aufgerufen wird, wenn das angeforderte Profil kleiner als das erweiterte Standardprofil ist.
 
Error — Wenn diese Methode mit negativen numInstances aufgerufen wird.

Die folgenden Fehler werden nur dann ausgegeben, wenn die enableErrorChecking-Eigenschaft den Wert true hat:

 
Error — Vor dem Zeichnen Löschen erforderlich: Wenn der Puffer seit dem letzten Aufruf von present() nicht geleert wurde.
 
Error — Wenn kein gültiges Program3D-Objekt festgelegt wurde.
 
Error — Kein gültiger Indexpuffer festgelegt: Wenn kein IndexBuffer3D-Objekt festgelegt wurde.
 
Error — Sanity Check für Parameter fehlgeschlagen: wenn die Anzahl der zu zeichnenden Dreiecke oder firstIndex die zulässigen Werte übersteigt.
 
RangeError — Nicht genügend Indizes in diesem Puffer: wenn der Puffer nicht genug Indizes enthält, um die Anzahl der zu zeichnenden Dreiecke zu definieren.
 
Error — Sample bindet Textur, die auch an Renderer gebunden ist: wenn das Renderziel eine Textur ist und diese Textur einer Textureingabe des aktuellen Fragmentprogramm zugewiesen ist.
 
Error — Sample bindet ungültige Textur: Es wurde eine ungültige Textur als Eingabe für das aktuelle Fragmentprogramm eingegeben.
 
Error — Samplerformat stimmt nicht mit Texturformat überein: wenn die als Eingabe für das aktuelle Fragmentprogramm zugewiesene Textur ein anderes Format hat als das dem Samplerregister zugewiesene. Beispiel: eine 2D-Textur wurde einem Würfeltextursampler zugewiesen.
 
Error — Sample bindet nicht definierte Textur: Das aktuelle Fragmentprogramm greift auf ein Texturregister zu, das nicht festgelegt wurde (mit setTextureAt()).
 
Error — Dieselbe Textur benötigt dieselben Samplerparameter: Wenn eine Textur für mehrere Samplerregister verwendet wird, müssen alle Sampler dieselben Einstellungen verwenden. Sie können zum Beispiel nicht für einen Sampler die Fortführung der Randfarben („clamp“) und für den anderen die Kachelung („wrap“) verwenden.
 
Error — Textur gebunden, aber nicht verwendet: Eine Textur ist als Shadereingabe festgelegt, wird jedoch nicht verwendet.
 
Error — Stream wird nicht verwendet: Ein Vertexpuffer ist einer Vertexattributeingabe zugewiesen, das Vertexprogramm verweist jedoch nicht auf das entsprechende Register.
 
Error — Stream ist ungültig: Ein VertexBuffer3D-Objekt, das einer Vertexprogrammeingabe zugewiesen ist, ist kein gültiges Objekt.
 
RangeError — Stream hat nicht genügend Vertizes: Ein Vertexpuffer, der Daten für die angegebenen Dreiecke bereitstellt, hat nicht genügend Daten.
 
RangeError — Streamvertexoffset außerhalb des gültigen Bereichs: Der in einem Aufruf von setVertexBufferAt() angegebene Offset ist negativ oder nach dem Ende des Puffers.
 
Error — Stream gelesen, aber nicht festgelegt: Ein Vertexattribut, das vom aktuellen Vertexprogramm gelesen wird, wurde nicht festgelegt (mit setVertexBufferAt()).
 
Error — Vertex-Puffer-Stream enthält nicht genügend Elemente für Instanzen: Wenn ein Vertex-Puffer-Stream nicht genug Elemente für die Anzahl der Instanzen enthält.
 
Error — Vertex-Puffer-Stream für Instanzen ist unzureichend mit dem Mindestindex-Attributregister eingerichtet: Wenn der mit CreateVertexBuffer() erstellte Vertex-Puffer eine höhere Indexnummer erhält als der mit CreateVertexBufferForInstance() erstellte Vertex-Puffer.

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Die folgende Klasse zeichnet drei Dreiecke mit der instanzierten Zeichnung der Funktion mithilfe eines einzelnen Zeichnenaufrufs anstelle mehrerer Zeichenaufrufe.
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.
        }    
    }
}

Die folgende Klasse zeichnet drei Dreiecke mit der instanzierten Zeichnung der Funktion mithilfe eines einzelnen Zeichnenaufrufs anstelle mehrerer Zeichenaufrufe.
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

()Methode 
public function present():void

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Zeigt den Hintergrund-Renderpuffer an.

Der Aufruf der present()-Methode macht die Ergebnisse aller Rendervorgänge seit dem letzten Aufruf von present() sichtbar und startet einen neuen Renderzyklus. Nachdem Sie present aufgerufen haben, müssen Sie clear() aufrufen, bevor Sie einen weiteren Aufruf von drawTriangles() ausführen. Andernfalls leert diese Funktion den Renderpuffer abwechselnd zu gelb und grün, oder, falls enableErrorChecking den Wert true hat, es wird eine Ausnahme ausgelöst.

Mit dem Aufruf von present() wird auch das Renderziel zurückgesetzt, genau wie beim Aufruf von setRenderToBackBuffer().


Auslöser
Error — Vor dem Zeichnen Löschen erforderlich: Wenn clear() seit dem vorherigen Aufruf von present() nicht aufgerufen wurde. (Zwei aufeinander folgende Aufrufe von present() sind nicht zulässig, ohne dazwischen clear() aufzurufen.)
 
Error — 3768: DasStage3D -API darf nicht bei der Ausführung im Hintergrund verwendet werden.

setBlendFactors

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt die Faktoren fest, die zum Mischen der Ausgabefarbe eines Zeichenvorgangs mit der vorhandenen Farbe verwendet werden.

Die Ausgabefarbe (Ausgangsfarbe) des Pixel-Shader-Programms wird mit der vorhandenen Farbe (Zielfarbe) an diesem Pixel gemäß der folgenden Formel kombiniert:

Ergebnisfarbe = (Ausgangsfarbe * sourceFactor) + (Zielfarbe * destinationFactor)

Die Zielfarbe ist die derzeit im Renderbuffer vorhandene Farbe für dieses Pixel. Somit ist sie das Ergebnis des letzten Aufrufs von clear() und der Aufrufe von drawTriangles().

Verwenden Sie setBlendFactors(), um die Faktoren festzulegen, mit denen die Ausgangs- und Zielfarbe vor dem Addieren multipliziert werden. Die Standardmischfaktoren sind sourceFactor = Context3DBlendFactor.ONE und destinationFactor = Context3DBlendFactor.ZERO, was dazu führt, dass die Ausgangsfarbe die Zielfarbe überschreibt (anders ausgedrückt findet kein Mischen der beiden Farben statt). Verwenden Sie für das normale Alpha-Mischen sourceFactor = Context3DBlendFactor.SOURCE_ALPHA und destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA.

Legen Sie die Parameter dieser Funktion mithilfe der Konstanten fest, die in der Context3DBlendFactor-Klasse definiert sind.

Parameter

sourceFactor:String — Der Faktor, mit dem die Ausgangsfarbe multipliziert wird. Die Standardvorgabe ist Context3DBlendFactor.ONE.
 
destinationFactor:String — Der Faktor, mit dem die Zielfarbe multipliziert wird. Die Standardvorgabe ist Context3DBlendFactor.ZERO.


Auslöser
Error — Ungültige Aufzählung: wenn sourceFactor oder destinationFactor keiner der anerkannten Werte ist, die in der Context3DBlendFactor-Klasse definiert sind.

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Die folgende Klasse veranschaulicht die verschiedenen Mischfaktoren. Das Beispiel zeichnet vier unterschiedlich gefärbte Rechtecke in den Renderpuffer. Diese Gruppe von Rechtecken ist das Misch-„Ziel“. Als Nächstes werden die Quell- und Zielmischmodi festgelegt und ein größeres Rechteck, die Misch-„Quelle“, wird gezeichnet. Verwenden Sie die Tasten „1“ und „2“, um durch die Quellmischmodi zu schalten. Verwenden Sie die Tasten „3“ und „4“, um durch die Zielmischmodi zu schalten.
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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt die Maske fest, die beim Schreiben der Farben in den Renderbuffer verwendet wird.

Nur Farbkomponenten, für die der entsprechende Parameter der Farbmaske auf true gesetzt ist, werden aktualisiert, wenn eine Farbe in den Renderbuffer geschrieben wird. Wenn Sie zum Beispiel setColorMask( true, false, false, false ) aufrufen, wird nur die rote Komponente einer Farbe in den Puffer geschrieben, bis Sie die Farbmaske wieder ändern. Die Farbmaske wirkt sich nicht auf das Verhalten der clear()-Methode aus.

Parameter

red:Boolean — mit false werden Änderungen am roten Kanal blockiert.
 
green:Boolean — mit false werden Änderungen am grünen Kanal blockiert.
 
blue:Boolean — mit false werden Änderungen am blauen Kanal blockiert.
 
alpha:Boolean — mit false werden Änderungen am Alpha-Kanal blockiert.


Beispiel  ( Verwendung dieses Beispiels )

Im folgenden Beispiel wird der Effekt des Festlegens der Farbmaske veranschaulicht. Der Beispielcode zeichnet zwei Dreiecke von derselben Farbe. Das obere Dreieck wird vor dem Festlegen der Maske gezeichnet und wird deshalb weiß gerendert. Das untere Dreieck wird gezeichnet, nachdem alle Kanäle mit Ausnahme des roten maskiert wurden. Da nur der rote Kanal aktualisiert werden kann, wird das weiße Dreieck rot gerendert.
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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt den Dreieckcullingmodus fest.

Dreiecke können basierend auf ihrer Ausrichtung relativ zur Sichtebene früh in der Renderingpipeline von der Szene ausgeschlossen werden. Gibt die Vertexreihenfolge konsistent an (im Uhrzeigersinn oder gegen den Uhrzeigersinn) wie von außerhalb des Modells aus gesehen, um ein korrektes Culling auszuführen.

Parameter

triangleFaceToCull:String — der Cullingmodus. Verwenden Sie eine der Konstanten, die in der Context3DTriangleFace-Klasse definiert sind.


Auslöser
Error — Fehler wegen ungültiger Aufzählung: wenn triangleFaceToCull nicht einer der in der Context3DTriangleFace-Klasse definierten Werte ist.

Verwandte API-Elemente

setDepthTest

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt den Vergleichstyp fest, der für Tiefentests verwendet wird.

Die Tiefe der Ausgangspixelausgabe vom Pixel-Shader-Programm wird mit dem aktuellen Wert im Tiefenpuffer verglichen. Wenn der Vergleich false ergibt, wird das Ausgangspixel verworfen. Bei dem Wert true wird das Ausgangspixel vom nächsten Schritt in der Renderingpipeline, dem Schablonentest, verarbeitet. Außerdem wird der Tiefenpuffer mit der Tiefe des Ausgangspixels aktualisiert, solange der Parameter depthMask den Wert true hat.

Legt den Test fest, der zum Vergleich der Tiefenwerte für Quell- und Zielpixel verwendet wird. Das Quellpixel wird mit dem Zielpixel zusammengesetzt, wenn „comparison“ den Wert „true“ hat. Der Vergleichsoperator wird als Infix-Operator zwischen den Quell- und Zielpixelwerten verwendet, in dieser Reihenfolge.

Parameter

depthMask:Boolean — bei der Einstellung „true“ wird der Zieltiefenwert aus dem Quellpixel aktualisiert.
 
passCompareMode:String — der Tiefenvergleichstestvorgang. Einer der Werte von Context3DCompareMode.

Verwandte API-Elemente

    setFillMode

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: AIR 16

Füllmodus für das Rendern festlegen. Die Benutzeroberfläche ist nur in AIR-Desktop verfügbar.

Parameter

fillMode:String — wenn der Wert WIREFRAME ist, wird das Objekt in einem Gitter von Linien angezeigt. wenn der Wert SOLID ist, wird das Objekt in fest schattierten Polygonen angezeigt.

Verwandte API-Elemente

setProgram

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt Vertex- und Fragmentshaderprogramme fest, die für das nachfolgende Rendern verwendet werden.

Parameter

program:Program3D — das Program3D-Objekt, das die zu verwendenden Vertex- und Fragmentprogramme darstellt.

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Dieses Beispiel veranschaulicht, wie ein Paar von Vertex- und Pixelprogrammen für einen Renderingkontext erstellt, hochgeladen und aktiviert wird. Beachten Sie, dass das Objekt, renderContext, eine Instanz der Context3D-Klasse ist. Die Programme in diesem Beispiel sind in Adobe Graphics Assembly Language (AGAL) geschrieben.
//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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.1, AIR 3.1

Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem ByteArray-Objekt gespeicherte Werte verwendet werden.

Legt Konstanten fest, auf die das Vertex- oder Fragmentprogramm zugreifen kann.

Parameter

programType:String — einer der Werte von Context3DProgramType.
 
firstRegister:int — der Index der ersten festzulegenden Shader-Programmkonstante.
 
numRegisters:int — die Anzahl der festzulegenden Register. Jedes Register wird als vier Gleitkommawerte gelesen.
 
data:ByteArray — das ByteArray-Quellobjekt
 
byteArrayOffset:uint — ein Offset für das Lesen im ByteArray


Auslöser
TypeError — kNullPointerError, wenn data null ist.
 
RangeError — kConstantRegisterOutOfBounds, wenn versucht wird, mehr als die maximal zulässige Anzahl von Shader-Konstanten festzulegen.
 
RangeError — kBadInputSize, wenn byteArrayOffset größer oder gleich der Länge von data ist. von Elementen in data - byteArrayOffset kleiner als numRegisters * 16

Verwandte API-Elemente

setProgramConstantsFromMatrix

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt Konstanten für die Verwendung durch Shader-Programme fest, indem in einem Matrix3D-Objekt gespeicherte Werte verwendet werden.

Verwenden Sie diese Funktion, um eine Matrix an ein Shaderprogramm zu übergeben. Die Funktion legt vier Konstantenregister fest, die vom Vertex- oder Fragmentprogramm verwendet. Die Matrix wird Zeile für Zeile Registern zugewiesen. Das erste Konstantenregister ist der obersten Zeile der Matrix zugewiesen. Sie können 128 Register für ein Vertexprogramm und 28 für ein Fragmentprogramm festlegen.

Parameter

programType:String — Der Typ des Shaderprogramms, entweder Context3DProgramType.VERTEX oder Context3DProgramType.FRAGMENT.
 
firstRegister:int — der Index des ersten Konstantenregisters, das festgelegt werden soll. Da ein Matrix3D-Objekt 16 Werte hat, werden vier Register festgelegt.
 
matrix:Matrix3D — die Matrix, die die Konstantenwerte enthält.
 
transposedMatrix:Boolean (default = false) — bei der Einstellung true werden die Matrixeinträge in der transponierten Reihenfolge in Register kopiert. Der Standardwert ist false.


Auslöser
TypeError — Nullzeigerfehler: wenn matrix null ist.
 
RangeError — Konstantenregister außerhalb des gültigen Bereichs: wenn versucht wird, mehr Shaderkonstantenregister festzulegen als zulässig.

Weitere Informationen

Verwandte API-Elemente

setProgramConstantsFromVector

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt die Konstanteneingaben für die Shaderprogramme fest.

Legt ein Array von Konstanten fest, auf das von einem Vertex- oder Fragmentprogramm zugegriffen werden kann. Auf Konstanten, die in Programm3D festgelegt werden, wird in den Shader-Programmen als Konstantenregister zugegriffen. Jedes Konstantenregister besteht aus 4 Gleitkommawerten (x, y, z, w). Deshalb benötigt jedes Register 4 Einträge im data-Vektor. Die Anzahl der Registrierungen für Scheitelpunkt- und Fragmentprogramm, die Sie festlegen können, hängt vom Context3DProfile ab.

Parameter

programType:String — Der Typ des Shaderprogramms, entweder Context3DProgramType.VERTEX oder Context3DProgramType.FRAGMENT.
 
firstRegister:int — der Index des ersten Konstantenregisters, das festgelegt werden soll.
 
data:Vector.<Number> — die Gleitkommakonstantenwerte. Es muss wenigstens 4 numRegisters-Elemente in data geben.
 
numRegisters:int (default = -1) — die Anzahl der festzulegenden Konstanten. Geben Sie -1, den Standardwert, an, um genügend Register festzulegen, damit alle verfügbaren Daten verwendet werden.


Auslöser
TypeError — Nullzeigerfehler: wenn data den Wert null hat.
 
RangeError — Konstantenregister außerhalb des gültigen Bereichs: wenn versucht wird, mehr Shaderkonstantenregister festzulegen als zulässig.
 
RangeError — Fehlerhafte Eingabegröße: Wenn die Anzahl der Elemente in data kleiner als numRegisters ist *4

Weitere Informationen

Verwandte API-Elemente

setRenderToBackBuffer

()Methode 
public function setRenderToBackBuffer():void

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt den Hintergrund-Renderpuffer als Renderziel fest. Nachfolgende Aufrufe der drawTriangles()- und clear()-Methoden führen dazu, dass der Hintergrundpuffer aktualisiert wird. Verwenden Sie diese Methode, um das normale Rendern wiederaufzunehmen, nachdem die setRenderToTexture()-Methode verwendet wurde.

setRenderToTexture

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt die angegebene Textur als Renderziel fest.

Nachfolgende Aufrufe der drawTriangles()- und clear()-Methoden aktualisieren die angegebene Textur statt des Backpuffers. Mipmaps werden automatisch erstellt. Verwenden Sie setRenderToBackBuffer(), um das normale Rendern in den Backpuffer fortzusetzen.

Vor dem Zeichnen ist kein Löschvorgang erforderlich. Erfolgt kein Löschvorgang, bleibt der gerenderte Inhalt erhalten. Tiefenpuffer und Schablonenpuffer werden ebenfalls nicht gelöscht. Beim ersten Zeichenvorgang wird dies jedoch erzwungen. Der Aufruf von present() setzt das Ziel auf den Hintergrundpuffer zurück.

Parameter

texture:flash.display3D.textures:TextureBase — die Zieltextur für das Rendern. Setzen Sie dies auf null, um das Rendern in den Backpuffer fortzusetzen (setRenderToBackBuffer() und present setzen das Ziel ebenfalls auf den Backpuffer zurück).
 
enableDepthAndStencil:Boolean (default = false) — bei der Einstellung true sind Tiefen- und Schablonentests verfügbar. Bei der Einstellung false wird der Tiefen- und Schablonenstatus für nachfolgende Zeichenvorgänge ignoriert.
 
antiAlias:int (default = 0) — die Antialiasingqualität. Verwenden Sie 0, um Antialiasing zu deaktivieren; höhere Werte verbessern die Qualität des Antialiasing, erfordern jedoch mehr Rechenleistung. Der Wert wird zur Zeit nach Mobilplattform und Softwarerenderkontext ignoriert.
 
surfaceSelector:int (default = 0) — legt fest, welches Element der Textur aktualisiert werden soll. Texture-Objekte haben eine Oberfläche, deshalb müssen Sie den Standardwert, 0, angeben. CubeTexture-Objekte haben sechs Oberflächen, deshalb können Sie eine Ganzzahl zwischen 0 und 5 angeben.
 
colorOutputIndex:int (default = 0) — Das Ausgabefarbregister. Muss 0 sein für eingeschränkten oder Grundlinienmodus. Gibt andernfalls das Ausgabefarberegister an.


Auslöser
ArgumentError — für einen nicht passenden surfaceSelector-Parameter. Der Wert muss für 2D-Texturen 0 und für Cubemaps 0...5 sein.
 
ArgumentError texture wird nicht von der TextureBase-Klasse abgeleitet (entweder Texture- oder CubeTexture-Klassen).
 
ArgumentError colorOutputIndex muss eine Ganzzahl zwischen 0 und 3 sein.
 
ArgumentError — This call requires a Context3D that is created with profile baseline or above (Dieser Aufruf erfordert eine Context3D, die mit dem Standardprofil oder höher erstellt wird).

Verwandte API-Elemente

setSamplerStateAt

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.6, AIR 3.6

Textursamplerstatus manuell überschreiben..

Textursamplerstatus wird beim Aufrufen von setProgram festgelegt. Sie können den Textursamplerstatus jedoch mit dieser Funktion überschreiben. Wenn Sie nicht möchten, dass das Programm den Samplerstatus ändert, setzen Sie das ignoresamnpler-Bit in AGAL und verwenden Sie diese Funktion.

Parameter

sampler:int — sampler Das zu verwendende Samplerregister. Ist dem Samplerregister in AGAL zugeordnet.
 
wrap:String — Wrappingmodus. In Context3DWrapMode definiert. Der Standardwert ist „repeat“ (wiederholen).
 
filter:String — Texturfiltermodus. In Context3DTextureFilter definiert. Der Standardwert ist „nearest“ (nächster).
 
mipfilter:String — Mipmap-Filter. In Context3DMipFilter definiert. Der Standardwert ist „none“ (ohne).


Auslöser
Error — Sampler außerhalb des gültigen Bereichs
 
Error — Fehlerhafte Aufzählung Wrap, Filter, Mipfilter
 
Error — Objekt verworfen: Falls dieses Context3D-Objekt durch einen Aufruf von dispose() oder durch den Verlust der zu Grunde liegenden Renderhardware verworfen wurde.

Verwandte API-Elemente

setScissorRectangle

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt ein Scherenrechteck fest, was eine Art von Zeichenmaske ist. Der Renderer zeichnet nur in den Bereich innerhalb des Scherenrechtecks. Das Ausschneiden mit Schere hat keine Auswirkungen auf Löschvorgänge.

Übergeben Sie null, um das Ausschneiden mit Schere auszuschalten.

Parameter

rectangle:Rectangle — Das Rechteck, in das gezeichnet werden soll. Legt die Position und die Abmessungen des Rechtecks in Pixeln fest. Der Ursprung des Koordinatensystems befindet sich in der oberen linken Ecke des Viewports, mit positiven Werten, die nach unten und nach rechts zunehmen (wie beim normalen Flash-Koordinatensystem).


Beispiel  ( Verwendung dieses Beispiels )

Die folgende Klasse zeichnet zwei Dreiecke in einen 640x480-Pixel-Viewport auf der Bühne. Die Dreiecke haben einen gemeinsamen Vertex, der sich am Ursprung (0,0,0) befindet.

Die Dreiecke werden mithilfe des Vertexbuffers und des Indexbuffers definiert. Der Vertexbuffer enthält die Informationen zu Position und Farbe für jeden Vertex des Dreiecks. Der Indexbuffer enthält Indizes für den Vertexbuffer. Drei Indizes definieren ein Dreieck. Zum Beispiel wird ein Dreieck, das aus den ersten drei Punkten im Vertexbuffer besteht, im Indexbuffer als 0,1,2 aufgeführt.

In diesem einfachen Beispiel wird keine 3D-Transformation ausgeführt. Es werden nur Objekte innerhalb des kanonischen Ansichtsbereichs (ein 2x2x2-Würfelkörper am Ursprungspunkt) angezeigt. Beim Rendern einer typischen 3D-Szene projizieren Sie die Objekte jedoch für das Rendering in diesen Ansichtsbereich, indem Sie entweder eine perspektivische oder orthografische Projektion verwenden.

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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt den Schablonenmodus und -vorgang fest.

Ein 8-Bit-Schablonenreferenzwert kann mit jedem Aufruf von call verknüpft werden. Beim Rendering kann der Referenzwert anhand der zuvor im Bildpuffer gespeicherten Werte getestet werden. Das Ergebnis des Tests kann die Zeichenaktion steuern und bestimmen, ob und wie der gespeicherte Schablonenwert aktualisiert wird. Zusätzlich steuert der Tiefentest, ob Schablonentests ausgeführt werden. Ein fehlgeschlagener Tiefentest kann auch verwendet werden, um die Aktion, die für den Schablonenpuffer ausgeführt wird, zu steuern.

In der Pixelverarbeitungspipeline werden zuerst Tiefentests ausgeführt. Wenn der Tiefentest fehlschlägt, kann eine Updateaktion für den Schablonenpuffer ausgeführt werden, eine weitere Evaluierung des Schablonenpufferwerts ist jedoch nicht möglich. Wenn der Tiefentest erfolgreich verläuft, wird der Schablonentest ausgeführt. Je nach Ergebnis des Schablonentests können verschiedene Aktionen ausgeführt werden.

Der Schablonenreferenzwert wird mithilfe von setStencilReferenceValue() festgelegt.

Parameter

triangleFace:String (default = "frontAndBack") — die Dreieckausrichtungen, die zum Schablonenvorgang beitragen können. Eines von Context3DTriangleFace.
 
compareMode:String (default = "always") — der Testoperator, der zum Vergleich des aktuellen Schablonenreferenzwerts und des Zielpixelschablonenwerts verwendet wird. Wenn der Vergleich „true“ ist, werden Zielpixelfarbe und -tiefe aktualisiert. Die Schablonenaktionen werden wie in den folgenden Aktionsparametern angefordert ausgeführt. Der Vergleichsoperator wird als ein Infixoperator zwischen dem aktuellen und dem Zielreferenzwert angewendet, in dieser Reihenfolge (in Pseudocode: if stencilReference OPERATOR stencilbuffer then pass). Verwenden Sie eine der Konstanten, die in der Context3DCompareMode-Klasse definiert sind.
 
actionOnBothPass:String (default = "keep") — Aktion, die ausgeführt wird, wenn sowohl Tiefen- als auch Schablonenvergleich bestanden werden. Verwenden Sie eine der Konstanten, die in der Context3DStencilAction-Klasse definiert sind.
 
actionOnDepthFail:String (default = "keep") — Aktion, die ausgeführt wird, wenn der Tiefenvergleich fehlschlägt. Verwenden Sie eine der Konstanten, die in der Context3DStencilAction-Klasse definiert sind.
 
actionOnDepthPassStencilFail:String (default = "keep") — Aktion, die ausgeführt wird, wenn der Tiefenvergleich erfolgreich ist und der Schablonenvergleich fehlschlägt. Verwenden Sie eine der Konstanten, die in der Context3DStencilAction-Klasse definiert sind.


Auslöser
Error — Fehler wegen ungültiger Aufzählung: wenn triangleFace nicht einer der in der Context3DTriangleFace-Klasse definierten Werte ist.
 
Error — Fehler wegen ungültiger Aufzählung: wenn compareMode nicht einer der in der Context3DCompareMode-Klasse definierten Werte ist.
 
Error — Fehler wegen ungültiger Aufzählung: wenn actionOnBothPass, actionOnDepthFail oder actionOnDepthPassStencilFail nicht einer der in der Context3DStencilAction-Klasse definierten Werte ist.

Verwandte API-Elemente


Beispiel  ( Verwendung dieses Beispiels )

Die folgende Klasse veranschaulicht, wie eine Schablone gezeichnet wird und als Maske für nachfolgende Zeichenvorgänge verwendet wird. Das Beispiel führt die folgenden Schritte aus:
  • Schablonenpuffer auf 0 leeren.
  • Schablonenaktion auf Inkrementieren bei erfolgreichem Schablonentest festlegen.
  • Schablonenreferenzwert auf 0 setzen.
  • Dreieckige Maske zeichnen. Unabhängig davon, wo das Dreieck gezeichnet wird, verläuft der Schablonentest erfolgreich, da der Schablonenpuffer auf 0 geleert wurde und der Referenzwert 0 ist. Deshalb wird der Schablonenpuffer auf 1 erhöht, wo die Dreiecksmaske gezeichnet wird.
  • Schablonenaktion auf „Beibehalten“ ändern, sodass nachfolgende Zeichenvorgänge den Schablonenpuffer nicht ändern.
  • Vollbildrechteck zeichnen (mehrfarbig). Da der Schablonenreferenzwert immer noch 0 ist, schlägt der Schablonentest im maskierten Bereich fehl. Deshalb wird das Rechteck überall mit Ausnahme des maskierten Bereichs gezeichnet.
  • Schablonenreferenzwert auf 1 ändern.
  • Ein weiteres Vollbildrechteck zeichnen (rot). Jetzt schlägt der Schablonentest überall fehl, nur nicht im maskierten Bereich, für den der Wert auf 1 erhöht wurde. Deshalb wird das Rechteck nur im maskierten Bereich gezeichnet.

Bewegen Sie die Maus über das Beispiel, um die Hauptschritte nacheinander zu sehen.

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

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Legt den Schablonenvergleichswert fest, der für Schablonentests verwendet wird.

Es werden nur die unteren 8 Bits des Referenzwerts verwendet. Der Schablonenpufferwert ist ebenfalls 8 Bit lang. Verwenden Sie readMask und writeMask, um den Schablonenpuffer als Bitfeld zu verwenden.

Parameter

referenceValue:uint — ein 8-Bit-Referenzwert, der in Referenzwertvergleichstests verwendet wird.
 
readMask:uint (default = 255) — eine 8-Bit-Maske, die vor dem Vergleich auf den aktuellen Schablonenpufferwert und den Referenzwert angewendet wird.
 
writeMask:uint (default = 255) — eine 8-Bit-Maske, die vor dem Aktualisieren des Schablonenpuffers auf den Referenzwert angewendet wird.

Verwandte API-Elemente

setTextureAt

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Gibt die Textur an, die für ein Textureingaberegister eines Fragmentprogramms verwendet werden soll.

Ein Fragmentprogramm kann Informationen aus bis zu acht Texturobjekten lesen. Verwenden Sie diese Funktion, um ein Texture- oder CubeTexture-Objekt einem der vom Fragmentprogramm verwendeten Samplerregister zuzuweisen.

Hinweis: Wenn Sie das aktive Fragmentprogramm (mit setProgram) zu einem Shader ändern, der weniger Texturen verwendet, setzen Sie die nicht verwendeten Register auf null:

         setTextureAt( 7, null );
         

Parameter

sampler:int — der Samplerregisterindex, ein Wert zwischen 0 und 7.
 
texture:flash.display3D.textures:TextureBase — das Texturobjekt, das verfügbar gemacht werden soll, entweder eine Texture- oder eine CubeTexture-Instanz.

Weitere Informationen

Verwandte API-Elemente

Texture
CubeTexture

setVertexBufferAt

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11, AIR 3

Gibt an, welche Vertexdatenkomponenten einer einzelnen Vertexshaderprogrammeingabe entsprechen.

Verwenden Sie die setVertexBufferAt-Methode, um festzustellen, welche Komponenten der für jeden Vertex in einem VertexBuffer3D-Puffer definierten Daten zu welchen Eingaben des Vertexprogramms gehören. Der Entwickler des Vertexprogramms bestimmt, wie viele Daten pro Vertex benötigt werden. Diese Daten werden von einem oder mehreren VertexBuffer3D-Streams den Attributregistern des Vertexprogramms zugeordnet.

Die kleinste Einheit der vom Vertex-Shader verbrauchten Daten sind 32-Bit-Daten. Offsets im Vertexstream werden in Vielfachen von 32 Bits angegeben.

Beispiel: Ein Programmierer kann jeden Vertex mit den folgenden Daten definieren:
position:  x    float32
           y    float32
           z    float32
color:     r    unsigned byte
           g    unsigned byte
           b    unsigned byte
           a    unsigned byte
Angenommen, der Vertex wurde in einem VertexBuffer3D mit dem Namen buffer definiert, wird er mit dem folgenden Code einem Vertex-Shader zugewiesen:
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

Parameter

index:int — der Index des Attributregisters im Vertexshader (0 bis 7).
 
buffer:VertexBuffer3D — der Puffer, der die Quellvertexdaten enthält, die in den Vertex-Shader eingegeben werden sollen.
 
bufferOffset:int (default = 0) — ein Offset vom Start der Daten für einen einzelnen Vertex, bei dem mit dem Lesen dieses Attributs begonnen werden soll. Im Beispiel oben haben die Positionsdaten einen Offset von 0, da es sich um das erste Attribut handelt; Farbe hat einen Offset von 3, da das color-Attribut den drei 32-Bit-Positionswerten folgt. Der Offset wird in Einheiten von 32 Bits angegeben.
 
format:String (default = "float4") — ein Wert aus der Context3DVertexBufferFormat-Klasse, der den Datentyp dieses Attributs angibt.


Auslöser
Error — Ungültige Aufzählung: wenn das Format nicht einer der in der Context3DVertexBufferFormat-Klasse definierten Werte ist.
 
RangeError — Attributregister außerhalb des gültigen Bereichs: wenn der index-Parameter außerhalb des Bereichs von 0 bis 7 liegt. (Von einem Shader können höchstens acht Vertexattribute verwendet werden.)

Weitere Informationen

Verwandte API-Elemente

Context3DExample.as

Die folgende Klasse zeichnet einen sich drehenden Würfel mithilfe einer perspektivischen Projektion.
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 ]Warum auf Englisch?
Inhalt des ActionScript 3.0-Referenzhandbuchs wird in englischer Sprache angezeigt

Nicht alle Teile des ActionScript 3.0-Referenzhandbuchs wurden in alle Sprachen übersetzt. Wenn der Text zu einem Sprachelement nicht übersetzt wurde, wird er auf Englisch angezeigt. Zum Beispiel wurden die Informationen zur ga.controls.HelpBox-Klasse nicht in andere Sprachen übersetzt. In der deutschen Version des Referenzhandbuchs erscheint der Abschnitt zur ga.controls.HelpBox-Klasse deshalb auf Englisch.