ActionScript® 3.0 — dokumentacja dla platformy Adobe® Flash®
Strona główna  |  Ukryj listę pakietów i klas |  Pakiety  |  Klasy  |  Nowości  |  Indeks  |  Dodatki  |  Dlaczego język angielski?
Filtry: AIR 30.0 i wcześniejsze, Flash Player 30.0 i wcześniejsze, Flash Lite 4
Flex 4.6 i wcześniejsze, Flash Pro CS6 i wcześniejsze
Ukryj filtry
flash.display3D 

Context3D  - AS3

Pakietyx

Najwyższy poziom
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

Elementy językowe

Stałe globalne
Funkcje globalne
Operatory
Instrukcje, słowa kluczowe i dyrektywy
Typy specjalne

Dodatki

Nowości
Błędy kompilatora
Ostrzeżenia kompilatora
Błędy czasu wykonywania
Migracja kodu ActionScript 3
Obsługiwane zestawy znaków
Tylko MXML
Elementy XML dotyczące ruchu
Znaczniki tekstu z synchronizacją czasową
Przestarzały indeks
Stałe implementacji dostępności
Instrukcje dotyczące przykładów
Informacje prawne
Pakietflash.display3D
Klasapublic final class Context3D
DziedziczenieContext3D Inheritance EventDispatcher Inheritance Object

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Klasa Context3D udostępnia kontekst dla renderowania grafiki zdefiniowanej za pomocą kształtów geometrycznych.

Kontekst renderowania obejmuje powierzchnię rysowania oraz powiązane z nią zasoby i stan. Jeśli to możliwe, kontekst renderowania korzysta ze sprzętowego procesora graficznego (GPU, graphic processing unit). W pozostałych przypadkach kontekst renderowania korzysta z renderowania programowego. (Jeśli platforma nie obsługuje renderowania za pośrednictwem klasy Context3D, właściwość stage3Ds obiektu Stage zawiera pustą listę).

Kontekst renderowania Context3D to programowalny proces bardzo podobny do biblioteki OpenGL ES 2, oferujący jednak środowisko abstrakcyjne zgodne z wieloma interfejsami sprzętowymi i GPU. Proces renderowania opracowano z myślą o grafice 3D, ale jego zastosowania nie są ograniczone do danych 3D. Można tworzyć moduły renderujące 2D, podając odpowiednie programy fragmentów dla wierzchołków i pikseli. Zarówno w przypadku renderowania 3D, jak i 2D jedynym obsługiwanym podstawowym kształtem geometrycznym jest trójkąt.

Wystąpienie klasy Context3D można utworzyć za pomocą wywołania metody requestContext3D() obiektu Stage3D. Liczba dozwolonych obiektów Context3D na stole montażowym jest ograniczona do jednego obiektu na każdy obiekt Stage3D z listy Stage.stage3Ds. W momencie utworzenia kontekstu obiekt Stage3D wywołuje zdarzenie context3DCreate. Kontekst renderowania może zostać w dowolnym momencie zniszczony i utworzony ponownie, na przykład w sytuacji uaktywnienia innej aplikacji korzystającej z GPU. Kod powinien uwzględniać możliwość odebrania wielu zdarzeń context3DCreate. Obszar renderowania można ustawić na stole montażowym przy użyciu właściwości x i y skojarzonego wystąpienia klasy Stage3D.

Renderowanie i wyświetlanie sceny (po utworzeniu obiektu Context3D) wymaga zwykle wykonania następujących czynności:

  1. Skonfigurowanie atrybutów głównego bufora wyświetlacza za pomocą wywołania metody configureBackBuffer()
  2. Utworzenie i zainicjowanie zasobów renderowania, takich jak:
    • Bufory wierzchołków i indeksów definiujące geometrię sceny
    • Programy wierzchołków i pikseli (moduły cieniujące) do renderowania sceny
    • Tekstury
  3. Przeprowadzenie renderowania klatki:
    • Ustawienie stanu renderowania odpowiedniego dla obiektu lub kolekcji obiektów znajdujących się na scenie
    • Wywołanie metody drawTriangles() w celu przeprowadzenia renderowania zestawu trójkątów
    • Zmiana stanu renderowania dla następnej grupy obiektów
    • Wywołanie metody drawTriangles() w celu narysowania trójkątów definiujących obiekty
    • Powtarzanie tych czynności do momentu zakończenia renderowania całej sceny
    • Wywołanie metody present() w celu wyświetlenia wyrenderowanej sceny na stole montażowym

Renderowanie podlega następującym ograniczeniom:

Limity dotyczące zasobów:

ZasóbDozwolona liczbaCałkowita ilość pamięci
Bufory wierzchołków 4096256 MB
Bufory indeksów 4096128 MB
Programy 409616 MB
Tekstury 4096128 MB
Tekstury sześcienne 4096256 MB

Limity dotyczące kodu AGAL: 200 kodów operacji na program

Limity dotyczące wywołań rysowania: 32 768 wywołań metody drawTriangles() na każde wywołanie metody present()

Tekstury podlegają następującym ograniczeniom:

Limity tekstur dla 32-bitowego środowiska AIR:

TextureMaksymalny rozmiarCałkowita ilość pamięci procesora graficznego
Tekstura normalna (podstawowa rozszerzona lub niższa) 2048 × 2048512 MB
Tekstura normalna (podstawowa rozszerzona lub wyższa) 4096×4096512 MB
Tekstura prostokątna (podstawowa rozszerzona lub niższa) 2048 × 2048512 MB
Tekstura prostokątna (podstawowa rozszerzona lub wyższa) 4096×4096512 MB
Tekstura sześcienna 1024x1024256 MB

Limity tekstur dla 64-bitowego środowiska AIR (komputer):

TextureMaksymalny rozmiarCałkowita ilość pamięci procesora graficznego
Tekstura normalna (podstawowa rozszerzona lub niższa) 2048 × 2048512 MB
Tekstura normalna (podstawowa rozszerzona do standardowej) 4096×4096512 MB
Tekstura normalna (standardowa rozszerzona lub wyższa) 4096×40962048 MB
Tekstura prostokątna (podstawowa rozszerzona lub niższa) 2048 × 2048512 MB
Tekstura prostokątna (podstawowa rozszerzona do standardowej) 4096×4096512 MB
Tekstura prostokątna (standardowa rozszerzona lub wyższa) 4096×40962048 MB
Tekstura sześcienna 1024x1024256 MB

512 MB to całkowity limit dotyczący tekstur. Obejmuje to również pamięć tekstur wymaganą na mipmapy. Jednak w przypadku tekstur sześciennych obowiązuje limit pamięci 256 MB.

Nie można tworzyć obiektów Context3D przy użyciu konstruktora Context3D. Obiekty te są tworzone i dostępne jako właściwości wystąpienia klasy Stage3D. Klasa Context3D może być używana na platformach komputerowych i mobilnych — zarówno podczas pracy w programie Flash Player, jak i w środowisku AIR.

Wyświetl przykłady

Powiązane elementy interfejsu API



Właściwości publiczne
 WłaściwośćZdefiniowane przez
  backBufferHeight : int
[tylko do odczytu] Określa wysokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer().
Context3D
  backBufferWidth : int
[tylko do odczytu] Określa szerokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer().
Context3D
 Inheritedconstructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu.
Object
  driverInfo : String
[tylko do odczytu] Typ sterownika biblioteki graficznej używanego w tym kontekście renderowania.
Context3D
  enableErrorChecking : Boolean
Określa, czy błędy napotkane przez mechanizm renderujący mają być zgłaszane aplikacji.
Context3D
  maxBackBufferHeight : int
Określa maksymalną wysokość bufora tylnego.
Context3D
  maxBackBufferWidth : int
Określa maksymalną szerokość bufora tylnego.
Context3D
  profile : String
[tylko do odczytu] Profil obsługiwanych funkcji jest używany przez ten obiekt Context3D.
Context3D
  supportsVideoTexture : Boolean
[statyczny] [tylko do odczytu] Wskazuje, czy obiekt Context3D obsługuje teksturę wideo.
Context3D
  totalGPUMemory : Number
[tylko do odczytu] Zwraca całkowitą pamięć GPU przydzieloną przez struktury danych obiektów Stage3D aplikacji. Po każdym utworzeniu obiektu zasobu GPU wykorzystana pamięć zostaje zapisana w klasie Context3D.
Context3D
Metody publiczne
 MetodaZdefiniowane przez
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Rejestruje obiekt detektora zdarzeń w obiekcie EventDispatcher, dzięki czemu detektor będzie otrzymywał powiadomienia o zdarzeniu.
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
Służy do oczyszczania buforów kolorów, głębi i szablonów powiązanych z danym obiektem Context3D i wypełniania ich określonymi wartościami.
Context3D
  
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Ustawia wymiary widoku i innych atrybutów bufora renderowania.
Context3D
  
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Tworzy obiekt CubeTexture.
Context3D
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Tworzy obiekt IndexBuffer3D.
Context3D
  
Tworzy obiekt Program3D.
Context3D
  
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Tworzy obiekt RectangleTexture.
Context3D
  
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Tworzy obiekt Texture.
Context3D
  
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Tworzy obiekt VertexBuffer3D.
Context3D
  
    createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Tworzy obiekt VertexBuffer3D na dane wystąpień.
Context3D
  
Tworzy nowy obiekt VideoTexture.
Context3D
 Inherited
Wywołuje zdarzenie, tj. kieruje je do przepływu zdarzeń.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Zwalnia wszystkie zasoby i cały magazyn wewnętrzny związane z danym obiektem Context3D.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Rysuje w bitmapie bieżący bufor mechanizmu renderującego.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Metoda umożliwia renderowanie określonych trójkątów z użyciem bieżących buforów i stanu obiektu Context3D.
Context3D
  
    drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Metoda umożliwia renderowanie wystąpień trójkątów z użyciem bieżących buforów i stanu obiektu Context3D.
Context3D
 Inherited
Sprawdza, czy obiekt EventDispatcher zawiera jakiekolwiek detektory zarejestrowane dla konkretnego typu zdarzeń.
EventDispatcher
 Inherited
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość.
Object
 Inherited
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr.
Object
  
Wyświetla tylny bufor renderowania.
Context3D
 Inherited
Wskazuje, czy określona właściwość istnieje i jest przeliczalna.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Usuwa detektor z obiektu EventDispatcher.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Określa współczynniki użyte do mieszania koloru wyjściowego operacji rysowania z istniejącym kolorem.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Ustawia maskę używaną podczas zapisywania kolorów w buforze renderowania.
Context3D
  
setCulling(triangleFaceToCull:String):void
Ustawia tryb wyłączania trójkątów.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Ustawia typ porównywania używanego do testowania głębi.
Context3D
  
    setFillMode(fillMode:String):void
Pozwala ustawić tryb wypełniania przy renderowaniu.
Context3D
  
Konfiguruje programy modułów cieniujących wierzchołków i fragmentów do użytku w dalszym renderowaniu.
Context3D
  
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie ByteArray.
Context3D
  
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie Matrix3D.
Context3D
  
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Ustawia stałe parametry wejściowe dla programów modułów cieniujących.
Context3D
 Inherited
Ustawia dostępność właściwości dynamicznej używanej w pętlach.
Object
  
Ustawia tylny bufor renderowania jako cel renderowania.
Context3D
  
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Ustawia określoną teksturę jako cel renderowania.
Context3D
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Pozwala ręcznie przesłonić stan próbnika tekstury.
Context3D
  
Ustawia prostokąt nożyczek. Jest to typ maski rysowania.
Context3D
  
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Ustawia tryb i operację szablonu.
Context3D
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Ustawia wartość porównawczą szablonu stosowaną w testach szablonów.
Context3D
  
Określa teksturę, która ma być stosowana w rejestrze tekstur wejściowych programu fragmentów.
Context3D
  
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Określa, które składniki danych wierzchołków odpowiadają pojedynczym danym wejściowym programu modułu cieniującego wierzchołków.
Context3D
 Inherited
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych.
Object
 Inherited
Zwraca ciąg reprezentujący określony obiekt.
Object
 Inherited
Zwraca pierwotną wartość dla określonego obiektu.
Object
 Inherited
Sprawdza, czy detektor zdarzeń określonego typu jest zarejestrowany w tym obiekcie EventDispatcher lub jego elementach macierzystych.
EventDispatcher
Zdarzenia
 Zdarzenie Podsumowanie Zdefiniowane przez
 Inherited[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja środowiska wykonawczego AIR uzyskuje fokus w systemie operacyjnym i przechodzi w stan aktywny.EventDispatcher
 Inherited[zdarzenie broadcast] Wywoływane, gdy program Flash Player lub aplikacja AIR traci fokus w systemie operacyjnym i przechodzi w stan nieaktywny.EventDispatcher
Szczegół właściwości

backBufferHeight

właściwość
backBufferHeight:int  [tylko do odczytu]

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 15, AIR 15

Określa wysokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer(). Wysokość można zmienić, gdy zmieni się współczynnik powiększenia przeglądarki, a parametr wantsBestResolutionOnBrowserZoom zostanie ustawiony na true w ostatnim pomyślnym wywołaniu metody configureBackBuffer(). Zmianę wysokości można wykryć, rejestrując detektor zdarzeń zmiany powiększenia przeglądarki.



Implementacja
    public function get backBufferHeight():int

Powiązane elementy interfejsu API

backBufferWidth

właściwość 
backBufferWidth:int  [tylko do odczytu]

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 15, AIR 15

Określa szerokość bufora tylnego, którą można zmienić przez pomyślne wywołanie metody configureBackBuffer(). Szerokość można zmienić, gdy zmieni się współczynnik powiększenia przeglądarki, a parametr wantsBestResolutionOnBrowserZoom zostanie ustawiony na true w ostatnim pomyślnym wywołaniu metody configureBackBuffer(). Zmianę szerokości można wykryć, rejestrując detektor zdarzeń zmiany powiększenia przeglądarki.



Implementacja
    public function get backBufferWidth():int

Powiązane elementy interfejsu API

driverInfo

właściwość 
driverInfo:String  [tylko do odczytu]

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Typ sterownika biblioteki graficznej używanego w tym kontekście renderowania. Wskazuje, czy renderowanie odbywa się przy użyciu oprogramowania, sterownika DirectX czy sterownika OpenGL. Wskazuje również, gdy nie powiodło się renderowanie sprzętowe. W przypadku niepowodzenia renderowania sprzętowego program Flash Player używa renderowania programowego obiektu Stage3D, a właściwość driverInfo zawiera jedną z następujących wartości:

  • „Software Hw_disabled=userDisabled” — Nie jest zaznaczone pole wyboru włączania przyspieszania sprzętowego w interfejsie użytkownika ustawień programu Adobe Flash Player.
  • „Software Hw_disabled=oldDriver” — Są znane problemy ze sterownikiem karty graficznej. Aktualizacja sterownika karty graficznej może rozwiązać ten problem.
  • „Software Hw_disabled=unavailable” — Są znane problemy ze sterownikiem karty graficznej lub wystąpił błąd podczas inicjowania tej karty.
  • „Software Hw_disabled=explicit” — Zawartość jawnie zażądała renderowania programowego za pośrednictwem właściwości requestContext3D.
  • „Software Hw_disabled=domainMemory” — Zawartość używa właściwości domainMemory, która wymaga licencji w przypadku stosowania razem z renderowaniem sprzętowym obiektu Stage3D. Informacje na ten temat można uzyskać na stronie adobe.com/go/fpl_pl.



Implementacja
    public function get driverInfo():String

enableErrorChecking

właściwość 
enableErrorChecking:Boolean

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Określa, czy błędy napotkane przez moduł renderujący mają być zgłaszane aplikacji.

Jeśli właściwość enableErrorChecking ma wartość true, metody clear() i drawTriangles() są synchroniczne i mogą generować błędy. Jeśli właściwość enableErrorChecking ma wartość false, która jest wartością domyślną, metody clear(), i drawTriangles() są asynchroniczne, a błędy nie są zgłaszane. Włączenie sprawdzania błędów zmniejsza wydajność renderowania. Sprawdzanie błędów powinno być włączone tylko podczas debugowania.



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

Powiązane elementy interfejsu API

maxBackBufferHeight

właściwość 
maxBackBufferHeight:int

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 15, AIR 15

Określa maksymalną wysokość bufora tylnego. Wartością początkową jest limit systemowy na danej platformie. Tę właściwość można ustawić na wartość nie większą niż limit systemowy. Tę właściwość można ustawić na wartość nie mniejszą niż minimum systemowe. Gdy bufor tylny nie jest skonfigurowany, minimum jest wartością stałą wynoszącą 32. Po skonfigurowaniu bufora tylnego minimum przyjmuje wartość parametru wysokości z ostatniego pomyślnego wywołania metody configureBackBuffer().



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

maxBackBufferWidth

właściwość 
maxBackBufferWidth:int

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 15, AIR 15

Określa maksymalną szerokość bufora tylnego. Wartością początkową jest limit systemowy na danej platformie. Tę właściwość można ustawić na wartość nie większą niż limit systemowy. Tę właściwość można ustawić na wartość nie mniejszą niż minimum systemowe. Gdy bufor tylny nie jest skonfigurowany, minimum jest wartością stałą wynoszącą 32. Po skonfigurowaniu bufora tylnego minimum przyjmuje wartość parametru szerokości z ostatniego pomyślnego wywołania metody configureBackBuffer().



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

profile

właściwość 
profile:String  [tylko do odczytu]

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 12, AIR 4

Profil obsługiwanych funkcji jest używany przez ten obiekt Context3D.



Implementacja
    public function get profile():String

Powiązane elementy interfejsu API

supportsVideoTexture

właściwość 
supportsVideoTexture:Boolean  [tylko do odczytu]

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: AIR 17.0, Flash Player 18.0

Wskazuje, czy obiekt Context3D obsługuje teksturę wideo.



Implementacja
    public static function get supportsVideoTexture():Boolean

totalGPUMemory

właściwość 
totalGPUMemory:Number  [tylko do odczytu]

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 21, AIR 21

Zwraca całkowitą pamięć GPU przydzieloną przez struktury danych obiektów Stage3D aplikacji.

Po każdym utworzeniu obiektu zasobu GPU wykorzystana pamięć zostaje zapisana w klasie Context3D. Pamięć ta zawiera bufory indeksów, bufory wierzchołków (z wyjątkiem tekstury wideo) i programy utworzone za pomocą tej klasy Context3D.

Właściwość totalGPUMemory API zwraca użytkownikowi całkowitą pamięć zużytą przez powyższe zasoby. Domyślnie zwracana jest wartość 0. Zwracana całkowita ilość pamięci GPU jest wyrażona w bajtach. Informacja te jest dostępna tylko w trybie pośrednim na urządzeniu mobilnym oraz w trybie pośrednim i GPU na komputerze. (W przypadku komputera użycie opcji <renderMode>gpu</renderMode> spowoduje powrót do <renderMode>direct</renderMode>)

Tego API można używać w przypadku SWF w wersji 32 lub nowszej.



Implementacja
    public function get totalGPUMemory():Number
Szczegół metody

clear

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Służy do oczyszczania buforów kolorów, głębi i szablonów powiązanych z danym obiektem Context3D i wypełniania ich określonymi wartościami.

Skonfigurowanie parametru mask umożliwia określenie buforów, które mają zostać wyczyszczone. Do konfigurowania parametru mask służą stałe zdefiniowane w klasie Context3DClearMask. Za pomocą operatora sumy bitowej („|”) do parametru mask można dodać wiele buforów. Można również zastosować wywołanie Context3DClearMask.ALL. Podczas renderowania do bufora tylnego należy wywołać metodę configureBackBuffer() przed jakimkolwiek wywołaniem metody clear().

Uwaga: Jeżeli określona wartość parametru wykracza poza dozwolony zakres, wartości liczbowe parametrów są sprowadzane do zakresu od 0 do 1 bez powiadamiania o tej operacji. Jeśli wartość parametru stencil jest większa niż 0xff, zostaje dla niego ustawiona wartość 0xff.

Parametry

red:Number (default = 0.0) — Czerwony składnik koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1.
 
green:Number (default = 0.0) — Zielony składnik koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1.
 
blue:Number (default = 0.0) — Niebieski składnik koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1.
 
alpha:Number (default = 1.0) — Składnik alfa koloru służący do czyszczenia bufora koloru, wyrażony jako wartość z zakresu od 0 do 1. Składnik alfa nie jest używany do mieszania. Jest on zapisywany bezpośrednio w buforze alfa.
 
depth:Number (default = 1.0) — Wartość służąca do czyszczenia bufora głębi, należąca do zakresu od 0 do 1.
 
stencil:uint (default = 0) — Wartość 8-bitowa służący do czyszczenia bufora szablonu, należąca do zakresu od 0x00 do 0xFF.
 
mask:uint (default = 0xffffffff) — Parametr określający bufory, które mają zostać wyczyszczone.


Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.

Powiązane elementy interfejsu API

configureBackBuffer

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia wymiary widoku i innych atrybutów bufora renderowania.

Renderowanie jest wykonywane przy użyciu dwóch buforów. Bufor tylny zastępuje widoczny bufor przedni w momencie wywołania metody present(). Minimalny rozmiar bufora wynosi 32 x 32 pikseli. Maksymalny rozmiar bufora tylnego jest ograniczony możliwościami urządzenia. Może go też ustawić użytkownik za pomocą parametrów maxBackBufferWidth i maxBackBufferHeight. Konfigurowanie bufora jest czasochłonną operacją. Należy unikać zmieniania rozmiaru lub atrybutów bufora w ramach normalnych operacji renderowania.

Parametry

width:int — Szerokość bufora wyrażona w pikselach.
 
height:int — Wysokość bufora wyrażona w pikselach.
 
antiAlias:int — Liczba całkowita określająca żądaną jakość wygładzania. Wartość ta odpowiada liczbie podpróbek używanych podczas wygładzania. Użycie większej liczby podpróbek wymaga dodatkowych obliczeń, jednak rzeczywisty wpływ tego procesu na wydajność zależy od konkretnego sprzętu używanego do renderowania. Typ wygładzania i to, czy wygładzanie jest w ogóle wykonywane, zależy od urządzenia i trybu renderowania. Wygładzanie nie jest obsługiwane w kontekście renderowania programowego.
0Brak wygładzania
2Minimalne wygładzanie
4Wygładzanie wysokiej jakości
16Wygładzanie bardzo wysokiej jakości
 
enableDepthAndStencil:Boolean (default = true) — Wartość false oznacza, że nie jest tworzona głębia ani nie jest tworzony szablon, a wartość true powoduje utworzenie głębi i bufora szablonu. Jeśli w aplikacji przeznaczonej dla środowiska AIR 3.2 lub nowszego skompilowanej przy użyciu formatu SWF w wersji 15 lub nowszej element renderMode w pliku deskryptora aplikacji ma wartość direct, to element depthAndStencil w tym pliku deskryptora aplikacji musi mieć taką samą wartość jak ten argument. Domyślnie element depthAndStencil ma wartość false.
 
wantsBestResolution:Boolean (default = false) — Wartość true wskazuje, że jeśli urządzenie obsługuje ekrany o wysokiej rozdzielczości, to próbuje przydzielić bufor tylny większy, niż wskazują na to parametry szerokości i wysokości. Ta funkcja dodaje więcej pikseli i potencjalnie zmienia wyniki operacji modułu cieniującego, dlatego domyślnie jest wyłączona. Aby określić stopień powiększenia natywnego bufora tylnego, należy użyć właściwości Stage.contentsScaleFactor.
 
wantsBestResolutionOnBrowserZoom:Boolean (default = false) — Wartość true oznacza, że rozmiar bufora tylnego powinien być zwiększany proporcjonalnie do współczynnika powiększenia przeglądarki. Ustawienie tej wartości jest zachowywane dla różnych powiększeń przeglądarki. Wartość domyślna tego parametru to false. Aby ograniczyć stopień powiększenia bufora tylnego, można ustawić parametry maxBackBufferWidth i maxBackBufferHeight. Parametry backBufferWidth i backBufferHeight pozwalają określić bieżący rozmiar bufora tylnego.


Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Nieprawidłowy rozmiar danych wejściowych: Parametr szerokości lub wysokości jest mniejszy niż minimalny lub większy niż maksymalny dopuszczalny rozmiar bufora tylnego.
 
Error — 3709: flaga depthAndStencil w deskryptorze aplikacji musi odpowiadać wartości enableDepthAndStencil (typu Boolean) przekazanej do metody configureBackBuffer() obiektu Context3D.

createCubeTexture

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Tworzy obiekt CubeTexture.

Obiekt CubeTexture służy do wysyłania bitmap tekstur sześciennych do kontekstu renderowania. Pozwala także odnosić się do tekstury sześciennej w trakcie renderowania. Tekstura sześcienna składa się z sześciu tekstur kwadratów o tej samej wielkości ułożonych w topologii sześciennej i jest przydatna do opisywania map środowiska.

Nie można tworzyć obiektów CubeTexture przy użyciu konstruktora klasy CubeTexture. Należy korzystać z omawianej metody. Po utworzeniu obiektu CubeTexture należy wysłać dane bitmapy tekstury za pomocą metody uploadFromBitmapData(), uploadFromByteArray() lub uploadCompressedTextureFromByteArray() klasy CubeTexture.

Parametry

size:int — Długość krawędzi tekstury w tekselach.
 
format:String — Format tekseli (z listy numerowanej Context3DTextureFormat).

Kompresja tekstur umożliwia przechowywanie obrazów tekstur bezpośrednio w GPU, co zapewnia oszczędność pamięci i redukuje wymaganą przepustowości pamięci. Tekstury są zazwyczaj kompresowane offline i wysyłane do GPU w formie skomprezowanej przy użyciu metody Texture.uploadCompressedTextureFromByteArray. Platformy komputerowe Flash Player 11.4 i AIR 3.4 obsługują obecnie kompresję tekstur w czasie wykonywania. Może to być przydatne w pewnych sytuacjach, na przykład w przypadku renderowania tekstur dynamicznych z grafiki wektorowej. Ta funkcja nie jest dostępna na platformach przenośnych. Jest na nich generowany wyjątek ArgumentError (Texture Format Mismatch). Aby użyć kompresji w czasie wykonywania, wykonaj następujące czynności: 1. Utwórz obiekt tekstury przez wywołanie metody Context3D.createCubeTexture(), przekazując jako parametr formatu wartość flash.display3D.Context3DTextureFormat.COMPRESSED lub flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Za pomocą wystąpienia klasy flash.display3D.textures.Texture zwróconego przez metodę createCubeTexture() wywołaj metodę flash.display3D.textures.CubeTexture.uploadFromBitmapData() lub flash.display3D.textures.CubeTexture.uploadFromByteArray(), aby wysłać i skompresować teksturę w jednym kroku.

 
optimizeForRenderToTexture:Boolean — Należy ustawić wartość true, jeśli tekstura będzie prawdopodobnie używana jako element docelowy renderowania.
 
streamingLevels:int (default = 0) — Poziom mipmapy musi zostać wczytany przed renderowaniem obrazu. Przesyłanie strumieniowe tekstur umożliwia wczytywanie i wyświetlanie najpierw najniższych poziomów mipmap, a następnie wyświetlanie kolejnych obrazów o wyższej jakości w miarę wczytywania tekstur. Użytkownicy końcowi widzą w aplikacji obrazy o niskiej jakości w trakcie wczytywania obrazów o wyższej jakości.

Domyślnie wartość streamingLevels wynosi 0, co oznacza konieczność wczytania mipmapy o najwyższej jakości przed renderowaniem obrazu. Tan parametr dodano w programie Flash Player 11.3 i środowisku AIR 3.3. Aby uzyskać zachowanie analogiczne do wcześniejszych wersji programu Flash Player i środowiska AIR, należy użyć wartości domyślnej.

Aby umożliwić przesyłanie strumieniowe tekstur, należy ustawić dla właściwości streamingLevels wartość między 1 a liczbą obrazów w mipmapie. Załóżmy na przykład, że mipmapa zawiera obraz główny o najwyższej jakości w wymiarach 64 x 64 pikseli. Oznacza to łącznie 7 poziomów obrazów mipmapy o niższej jakości, o wymiarach w pikselach: 32x32, 16x16, 8x8, 4x4, 2x2 i 1x1. Poziom 0 oznacza obraz o najlepszej jakości. Maksymalna wartość tej właściwości wynosi log2(minimum(szerokość,wysokość)). Z tego powodu dla obrazu głównego o wymiarach 64 x 64 pikseli wartość maksymalna właściwości streamingLevels wynosi 7. Ustawienie dla tej właściwości wartości 3 powoduje renderowanie obrazu po wczytaniu obrazu 8 x 8 pikseli.

Uwaga: Ustawienie wartości wyższej niż 0 dla tej właściwości może zwiększyć użycie pamięci i obniżyć wydajność.

Zwraca
flash.display3D.textures:CubeTexture

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
 
ArgumentError — Brak implementacji tekstury głębi: w przypadku próby utworzenia tekstury głębi.
 
ArgumentError — Zerowy rozmiar tekstury: jeśli parametr size nie jest większy niż zero.
 
ArgumentError — Rozmiar tekstury inny niż potęga liczby 2: jeśli wartość parametru size nie jest potęgą liczby 2.
 
ArgumentError — Zbyt duża tekstura: jeśli parametr size ma wartość większą niż 1024.
 
Error — Niepowodzenie tworzenia tekstury: jeśli kontekst renderowania nie może utworzyć obiektu CubeTexture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
 
ArgumentError — Nieprawidłowy poziom przesyłania strumieniowego: Jeśli wartość streamingLevels jest nie mniejsza niż log2(rozmiar).

Powiązane elementy interfejsu API

createIndexBuffer

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Tworzy obiekt IndexBuffer3D.

Obiekt IndexBuffer3D umożliwia wysłanie zestawu indeksów trójkątów do kontekstu renderowania. Pozwala też odnosić się do tego zestawu indeksów na potrzeby renderowania. Każdy indeks w buforze indeksów odnosi się do odpowiadającego mu wierzchołka w buforze wierzchołków. Każdy zestaw trzech indeksów identyfikuje trójkąt. Przekazując obiekt IndexBuffer3D do metody drawTriangles(), można renderować trójkąt lub trójkąty zgodnie z definicją w buforze indeksów.

Nie można tworzyć obiektów IndexBuffer3D przy użyciu konstruktora klasy IndexBuffer3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu IndexBuffer3D do wysyłania indeksów można używać metod uploadFromVector() i uploadFromByteArray() klasy IndexBuffer3D.

Parametry

numIndices:int — Liczba wierzchołków, które mają być przechowywane w buforze.
 
bufferUsage:String (default = "staticDraw") — Oczekiwane użycie bufora. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DBufferUsage. Sterownik sprzętowy może przeprowadzić optymalizację, jeśli zostanie prawidłowo skonfigurowany. Ten parametr jest dostępny od wersji Flash 12/AIR 4.

Zwraca
IndexBuffer3D

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów indeksów lub zostanie przekroczona ilość pamięci przydzielonej na bufory indeksów.
 
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
 
ArgumentError — Zbyt duży bufor: Gdy wartość numIndices jest nie mniejsza niż 0xf0000.

Powiązane elementy interfejsu API

createProgram

()metoda 
public function createProgram():Program3D

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Tworzy obiekt Program3D.

Obiekt Program3D służy do wysyłania programów modułów cieniujących do kontekstu renderowania i pozwala odnosić się do wysłanych programów w trakcie renderowania. Obiekt Program3D przechowuje dwa programy — program wierzchołków i program fragmentów (określany także jako program pikseli). Te programy są napisane w binarnym języku modułu cieniującego.

Nie można tworzyć obiektów Program3D przy użyciu konstruktora klasy Program3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu Program3D należy wysłać do niego programy za pomocą metody upload() klasy Program3D.

Zwraca
Program3D

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Liczba programów przekracza 4096 lub całkowity rozmiar w pamięci przekracza 16 MB. (Należy zwolnić zasoby obiektu Program3D za pomocą metody dispose).

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Ten przykład ilustruje sposób tworzenia, wysyłania i uaktywniania pary programów wierzchołków i pikseli dla kontekstu renderowania. Obiekt renderContext jest wystąpieniem klasy Context3D. Programy w tym przykładzie są napisane w języku AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

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

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

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

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

createRectangleTexture

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11.8, AIR 3.8

Tworzy obiekt RectangleTexture.

Obiekt RectangleTexture służy do wysyłania bitmap tekstur do kontekstu renderowania i pozwala odnosić się do tekstury w trakcie renderowania.

Nie można tworzyć obiektów RectangleTexture przy użyciu konstruktora klasy RectangleTexture. Należy używać omawianej metody. Po utworzeniu obiektu RectangleTexture można wysłać bitmapy tekstur za pomocą metody uploadFromBitmapData() lub uploadFromByteArray() klasy Texture.

Tekstury oparte na 32-bitowych liczbach całkowitych są przechowywane w spakowanym formacie BGRA, tak aby pasowały do formatu BitmapData programu Flash. Tekstury zmiennoprzecinkowe korzystają ze zwykłego formatu RGBA.

Tekstury prostokątne różnią się od zwykłych tekstur 2D tym, że ich szerokości i wysokości nie muszą być potęgami liczby 2. Nie zawierają one także mipmap. Są one najbardziej przydatne w przypadku renderowania do tekstur. Użycie tekstury prostokątnej z próbnikiem korzystającym z filtrowania mipmap lub wielokrotnego opakowania powoduje niepowodzenie wywołania metody drawTriangles. Tekstury prostokątne nie pozwalają też na przesyłanie strumieniowe. W przypadku tekstur prostokątnych są obsługiwane tylko formaty tekstur BGRA, BGR_PACKED, BGRA_PACKED. Tekstury prostokątne nie pozwalają korzystać z formatów tekstur skompresowanych.

Parametry

width:int — Szerokość tekstury w tekselach.
 
height:int — Wysokość tekstury w tekselach.
 
format:String — Format tekseli (z listy numerowanej Context3DTextureFormat).
 
optimizeForRenderToTexture:Boolean — Należy ustawić wartość true, jeśli tekstura będzie prawdopodobnie używana jako element docelowy renderowania.

Zwraca
flash.display3D.textures:RectangleTexture

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
 
ArgumentError — Zerowy rozmiar tekstury: Jeśli dowolny z parametrów width i height nie ma wartości większej niż zero.
 
ArgumentError — Zbyt duża tekstura: jeśli dowolny z parametrów width i height ma wartość większą niż 2048.
 
Error — Niepowodzenie tworzenia tekstury: jeśli kontekst renderowania nie może utworzyć obiektu Texture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
 
Error — Wymaga co najmniej profilu podstawowego: Jeśli tekstura prostokątna zostanie utworzona z profilem podstawowym ograniczonym.

Powiązane elementy interfejsu API

createTexture

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Tworzy obiekt Texture.

Obiekt Texture służy do wysyłania bitmap tekstur do kontekstu renderowania i pozwala odnosić się do tekstury w trakcie renderowania.

Nie można tworzyć obiektów Texture przy użyciu konstruktora klasy Texture. Należy korzystać z omawianej metody. Po utworzeniu obiektu Texture należy wysłać bitmapy tekstur za pomocą metody uploadFromBitmapData(), uploadFromByteArray() lub uploadCompressedTextureFromByteArray() klasy Texture.

Tekstury oparte na 32-bitowych liczbach całkowitych są przechowywane w spakowanym formacie BGRA, tak aby pasowały do formatu BitmapData programu Flash. Tekstury zmiennoprzecinkowe korzystają ze zwykłego formatu RGBA.

Parametry

width:int — Szerokość tekstury w tekselach.
 
height:int — Wysokość tekstury w tekselach.
 
format:String — Format tekseli (z listy numerowanej Context3DTextureFormat).

Kompresja tekstur umożliwia przechowywanie obrazów tekstur bezpośrednio w GPU, co zapewnia oszczędność pamięci i redukuje wymaganą przepustowości pamięci. Tekstury są zazwyczaj kompresowane offline i wysyłane do GPU w formie skomprezowanej przy użyciu metody Texture.uploadCompressedTextureFromByteArray. Platformy komputerowe Flash Player 11.4 i AIR 3.4 obsługują obecnie kompresję tekstur w czasie wykonywania. Może to być przydatne w pewnych sytuacjach, na przykład w przypadku renderowania tekstur dynamicznych z grafiki wektorowej. Ta funkcja nie jest dostępna na platformach przenośnych. Jest na nich generowany wyjątek ArgumentError (Texture Format Mismatch). Aby użyć kompresji w czasie wykonywania, wykonaj następujące czynności: 1. Utwórz obiekt tekstury przez wywołanie metody Context3D.createTexture(), przekazując jako parametr formatu wartość flash.display3D.Context3DTextureFormat.COMPRESSED lub flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA. 2. Za pomocą wystąpienia klasy flash.display3D.textures.Texture zwróconego przez metodę createTexture() wywołaj metodę flash.display3D.textures.Texture.uploadFromBitmapData() lub flash.display3D.textures.Texture.uploadFromByteArray(), aby wysłać i skompresować teksturę w jednym kroku.

 
optimizeForRenderToTexture:Boolean — Należy ustawić wartość true, jeśli tekstura będzie prawdopodobnie używana jako element docelowy renderowania.
 
streamingLevels:int (default = 0) — Poziom mipmapy musi zostać wczytany przed renderowaniem obrazu. Przesyłanie strumieniowe tekstur umożliwia wczytywanie i wyświetlanie najpierw najniższych poziomów mipmap, a następnie wyświetlanie kolejnych obrazów o wyższej jakości w miarę wczytywania tekstur. Użytkownicy końcowi widzą w aplikacji obrazy o niskiej jakości w trakcie wczytywania obrazów o wyższej jakości.

Domyślnie wartość streamingLevels wynosi 0, co oznacza konieczność wczytania mipmapy o najwyższej jakości przed renderowaniem obrazu. Tan parametr dodano w programie Flash Player 11.3 i środowisku AIR 3.3. Aby uzyskać zachowanie analogiczne do wcześniejszych wersji programu Flash Player i środowiska AIR, należy użyć wartości domyślnej.

Aby umożliwić przesyłanie strumieniowe tekstur, należy ustawić dla właściwości streamingLevels wartość między 1 a liczbą obrazów w mipmapie. Załóżmy na przykład, że mipmapa zawiera obraz główny o najwyższej jakości w wymiarach 64 x 64 pikseli. Oznacza to łącznie 7 poziomów obrazów mipmapy o niższej jakości, o wymiarach w pikselach: 32x32, 16x16, 8x8, 4x4, 2x2 i 1x1. Poziom 0 oznacza obraz o najlepszej jakości. Maksymalna wartość tej właściwości wynosi log2(minimum(szerokość,wysokość)). Z tego powodu dla obrazu głównego o wymiarach 64 x 64 pikseli wartość maksymalna właściwości streamingLevels wynosi 7. Ustawienie dla tej właściwości wartości 3 powoduje renderowanie obrazu po wczytaniu obrazu 8 x 8 pikseli.

Uwaga: Ustawienie wartości wyższej niż 0 dla tej właściwości może zwiększyć użycie pamięci i obniżyć wydajność.

Zwraca
flash.display3D.textures:Texture

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
 
ArgumentError — Brak implementacji tekstury głębi: w przypadku próby utworzenia tekstury głębi.
 
ArgumentError — Zerowy rozmiar tekstury: jeśli dowolny z parametrów width i height nie ma wartości większej niż zero.
 
ArgumentError — Rozmiar tekstury inny niż potęga liczby 2: jeśli dowolny z parametrów width i height nie ma wartości będącej potęgą liczby 2.
 
ArgumentError — Zbyt duża tekstura: jeśli dowolny z parametrów width i height ma wartość większą niż 2048 w przypadku profilu podstawowego i podstawowego ograniczonego albo jeden z parametrów width i height ma wartość większą niż 4096 w przypadku profilu podstawowego rozszerzonego lub wyższego.
 
Error — Niepowodzenie tworzenia tekstury: jeśli kontekst renderowania nie może utworzyć obiektu Texture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
 
ArgumentError — Nieprawidłowy poziom przesyłania strumieniowego: Jeśli wartość streamingLevels jest nie mniejsza niż log2(minimim(szerokość,wysokość)).

Powiązane elementy interfejsu API

createVertexBuffer

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Tworzy obiekt VertexBuffer3D.

Obiekt VertexBuffer3D służy do wysyłania zestawów danych wierzchołków do kontekstu renderowania. Bufor wierzchołków zawiera dane potrzebne do renderowania wszystkich punktów w geometrii sceny. Atrybuty danych skojarzone z każdym wierzchołkiem zazwyczaj obejmują jego położenie, kolor i współrzędne tekstury. Są stosowane jako dane wejściowe programu modułu cieniującego wierzchołków. Metoda setVertexBufferAt() pozwala określić wartości danych powiązane z jednym z parametrów wejściowych programu wierzchołków. Dla każdego wierzchołka można określić maksymalnie 60 wartości 32-bitowych.

Nie można tworzyć obiektów VertexBuffer3D przy użyciu konstruktora klasy VertexBuffer3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu VertexBuffer3D do wysyłania danych wierzchołków można używać metod uploadFromVector() i uploadFromByteArray() klasy VertexBuffer3D.

Parametry

numVertices:int — Liczba wierzchołków, które mają być przechowywane w buforze. Maksymalna liczba wierzchołków w pojedynczym buforze wynosi 65535.
 
data32PerVertex:int — Liczba 32-bitowych (4-bajtowych) wartości danych skojarzonych z każdym wierzchołkiem. Maksymalna liczba 32-bitowych elementów danych w wierzchołku wynosi 64 (256 bajtów). Program modułu cieniującego wierzchołków może uzyskiwać dostęp tylko do ośmiu rejestrów atrybutów naraz. Do wybierania atrybutów z bufora wierzchołków należy używać metody SetVertextBufferAt().
 
bufferUsage:String (default = "staticDraw") — Oczekiwane użycie bufora. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DBufferUsage. Sterownik sprzętowy może przeprowadzić optymalizację, jeśli zostanie prawidłowo skonfigurowany. Ten parametr jest dostępny od wersji Flash 12/AIR 4.

Zwraca
VertexBuffer3D

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów buforów wierzchołków lub zostanie przekroczona ilość pamięci przydzielonej na bufory wierzchołków.
 
ArgumentError — Zbyt duży bufor: gdy właściwość numVertices ma wartość większą niż 0x10000 lub parametr data32PerVertex ma wartość większą niż 64.
 
ArgumentError — Zerowy rozmiar bufora: gdy właściwość numVertices lub data32PerVertex ma wartość zero.
 
ArgumentError — Niepowodzenie tworzenia bufora: jeśli kontekst renderowania nie może utworzyć obiektu VertexBuffer3D (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
 
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Poniższy przykład ilustruje sposób tworzenia i wysyłania bufora danych wierzchołków. Bufor używany w tym przykładzie zawiera dane dwóch typów dla każdego wierzchołka: położenie w formie współrzędnych x, y i z oraz kolor w formie składników RGB. Po utworzeniu bufora wierzchołków w przykładowym kodzie jest wywoływana metoda setVertexBufferAt() w celu wskazania, że pierwsze trzy punkty danych są przekazywane do programu wierzchołków jako 3 wartości zmiennoprzecinkowe w tablicy va0, a kolejne trzy punkty danych są przekazywane w tablicy va1. Dla programu wierzchołków można w ten sposób zdefiniować maksymalnie 8 parametrów wejściowych (tak zwanych rejestrów atrybutów wierzchołków).
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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: AIR 20.0

Tworzy obiekt VertexBuffer3D na dane wystąpień.

Obiekt VertexBuffer3D służy do wysyłania zestawów danych wystąpień do kontekstu renderowania. Bufor wierzchołków zawiera dane potrzebne do renderowania wszystkich wystąpień w geometrii sceny. Bufory wierzchołków z danymi wystąpień zawierają atrybuty wspólne dla wszystkich wierzchołków danego wystąpienia. Służą one jako dane wejściowe programu modułu cieniującego wierzchołków. Metoda setVertexBufferAt() pozwala określić wartości danych powiązane z jednym z parametrów wejściowych programu wierzchołków. Dla każdego elementu bufora wierzchołków można określić maksymalnie 64 wartości 32-bitowe.

Nie można tworzyć obiektów VertexBuffer3D przy użyciu konstruktora klasy VertexBuffer3D. Zamiast tego należy użyć omawianej metody. Po utworzeniu obiektu VertexBuffer3D do wysyłania danych wierzchołków można używać metod uploadFromVector() i uploadFromByteArray() klasy VertexBuffer3D.

Parametry

numVertices:int — Liczba elementów, które mają być przechowywane w buforze. Maksymalna liczba elementów w pojedynczym buforze wynosi 65 535.
 
data32PerVertex:int — Liczba 32-bitowych (4-bajtowych) wartości danych skojarzonych z każdym elementem. Maksymalna liczba 32-bitowych elementów danych w wierzchołku wynosi 64 (256 bajtów).
 
instancesPerElement:int — Liczba wystąpień, które używają jednego elementu z bufora wierzchołków.
 
bufferUsage:String (default = "staticDraw") — Oczekiwane użycie bufora. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DBufferUsage. Sterownik sprzętowy może przeprowadzić optymalizację, jeśli zostanie prawidłowo skonfigurowany. Ten parametr jest dostępny od wersji Flash 12/AIR 4.

Zwraca
VertexBuffer3D

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów buforów wierzchołków lub zostanie przekroczona ilość pamięci przydzielonej na bufory wierzchołków.
 
ArgumentError — Zbyt duży bufor: gdy właściwość numVertices ma wartość większą niż 0x10000 lub parametr data32PerVertex ma wartość większą niż 64.
 
ArgumentError — Zerowy rozmiar bufora: gdy właściwość numVertices lub data32PerVertex ma wartość zero.
 
ArgumentError — Niepowodzenie tworzenia bufora: jeśli kontekst renderowania nie może utworzyć obiektu VertexBuffer3D (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).
 
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
 
Error — Wymaga profilu standardowego rozszerzonego lub wyższego: W przypadku wywołania tej metody, gdy żądany profil jest niższy niż standardowy rozszerzony.
 
Error — Nieprawidłowa liczba wystąpień na element: Jeśli wartość instancesPerElement jest mniejsza niż zero.

Powiązane elementy interfejsu API

createVideoTexture

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: AIR 17.0, Flash Player 18.0

Tworzy nowy obiekt VideoTexture.

Obiekt VideoTexture pozwala uzyskać klatki wideo jako teksturę z obiektu NetStream lub Camera i wysłać te klatki wideo do kontekstu renderowania.

Obiektu VideoTexture nie można utworzyć przy użyciu konstruktora obiektów VideoTexture. Zamiast tego należy użyć tej metody. Po utworzeniu obiektu VideoTexture dołącz obiekt NetStream lub Camera, aby uzyskać klatki wideo, stosując metodę obiektu VideoTexture attachNetStream() lub attachCamera().

Ta metoda zwraca wartość null, jeśli system nie obsługuje odpowiedniej funkcji.

Obiekt VideoTexture nie zawiera mipmap. Użycie obiektu VideoTexture z próbnikiem korzystającym z filtrowania mipmap lub wielokrotnego opakowania powoduje niepowodzenie wywołania metody drawTriangles. Obiekt VideoTexture można traktować jako teksturę BGRA w modułach cieniujących. Próba utworzenia wystąpienia obiektu VideoTexture kończy się niepowodzeniem, jeśli zażądano obiektu Context3D z trybem renderowania programowego.

Dla każdego wystąpienia obiektu Context3D dostępne są maksymalnie 4 obiekty VideoTexture. W przypadku urządzeń mobilnych rzeczywista liczba obsługiwanych obiektów VideoTexture może być mniejsza niż 4 z uwagi na ograniczenia platformy.

Zwraca
flash.display3D.textures:VideoTexture

Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Przekroczony limit zasobów: jeśli zostanie utworzonych zbyt wiele obiektów Texture lub zostanie przekroczona ilość pamięci przydzielonej na tekstury.
 
Error — Niepowodzenie tworzenia tekstury: Jeśli kontekst renderowania nie może utworzyć obiektu Texture (ale nie są dostępne dodatkowe informacje o przyczynie niepowodzenia).

dispose

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Zwalnia wszystkie zasoby i cały magazyn wewnętrzny związane z danym obiektem Context3D.

Wszystkie bufory indeksów, bufory wierzchołków, tekstury i programy utworzone za pomocą tego obiektu Context3D są zwalniane tak samo, jakby względem każdego z tych elementów wywołano metodę dispose(). Ponadto jest zwalniany sam obiekt Context3D, co powoduje zwolnienie wszystkich buforów tymczasowych i bufora tylnego. Wywołanie metody configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() lub drawToBitmapData() po wywołaniu metody dispose() powoduje wygenerowanie wyjątku przez środowisko wykonawcze.

Uwaga: Wywołanie metody dispose() na obiekcie Context3D w sytuacji, gdy nadal jest ustawiony detektor zdarzeń Events.CONTEXT3D_CREATE dla powiązanego obiektu Stage3D, spowoduje symulację utraty urządzenia. Na obiekcie Stage3D zostanie utworzony nowy obiekt Context3D i ponownie zostanie wygenerowane zdarzenie Events.CONTEXT3D_CREATE. Jeśli nie ma się tak dziać, należy usunąć detektor zdarzeń z obiektu Stage3D przed wywołaniem metody dispose() lub ustawić dla parametru recreate wartość false.

Parametry

recreate:Boolean (default = true)

Powiązane elementy interfejsu API

    drawToBitmapData

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: AIR 3

Rysuje w bitmapie bieżący bufor mechanizmu renderującego.

Bieżąca zawartość tylnego bufora renderowania jest kopiowana do obiektu BitmapData. Ta operacja może być bardzo czasochłonna i zająć nawet sekundę. Należy używać z ostrożnością. Ta funkcja nie kopiuje przedniego bufora renderowania (bufora wyświetlanego na stole montażowym). Działa na buforze, w którym odbywa się rysowanie. Aby przechwycić renderowany obraz wyświetlany na stole montażowym, należy wywołać metodę drawToBitmapData() natychmiast po wywołaniu metody present().

Począwszy od wersji 25 środowiska AIR w interfejsie API drawToBitmapData() wprowadzono dwa nowe parametry. Teraz ten interfejs API zawiera trzy parametry. Pierwszym z nich jest istniejący parametr destination:BitmapData. Drugi parametr to srcRect:Rectangle. Oznacza on docelowy prostokąt na obiekcie stage3D. Trzeci parametr to destPoint:Point. Oznacza on współrzędną na docelowej mapie bitowej. Parametry srcRect i destPoint są opcjonalne i domyślne odpowiednio dla wartości (0,0,bitmapWidth,bitmapHeight) i (0,0).

Podczas rysowania obrazu nie jest on skalowany w celu dopasowania do bitmapy. Zamiast tego zawartość jest przycinana do rozmiaru bitmapy docelowej.

Obiekty BitmapData programu Flash przechowują kolory pomnożone już przez składnik alfa. Jeśli na przykład czyste składowe kolorów RGB piksela mają wartości (0x0A, 0x12, 0xBB), a składnik alfa ma wartość 0x7F (0,5), piksel jest przechowywany w obiekcie BitmapData z wartościami RGBA (0x05, 0x09, 0x5D, 0x7F). Można ustawić współczynniki mieszania tak, aby kolory renderowane do bufora były mnożone przez współczynnik alfa. Można też wykonać tę operację w module cieniującym fragmentów. Kontekst renderowania nie sprawdza, czy kolory są przechowywane w formacie z mnożeniem wstępnym.

Parametry

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


Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.
 
Error — 3802: Jeśli którykolwiek z parametrów destPoint:Point lub srcRect:Rectangle wykracza poza granicę współrzędnych obiektu bitmapy/stage3D lub jeśli jako dane wejściowe przesłano wartości nieliczbowe (NaN).

Przykład  ( Sposób korzystania z tego przykładu )

W poniższym przykładzie dwa trójkąty są renderowane zarówno w normalnym buforze renderowania, jak i w obiekcie BitmapData. Obiekt BitmapData jest wyświetlany za pomocą obiektu Bitmap dodanego do normalnej listy wyświetlania. Do renderowanej bitmapy jest stosowany filtr cienia.
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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Metoda umożliwia renderowanie określonych trójkątów z użyciem bieżących buforów i stanu obiektu Context3D.

Wierzchołki każdego trójkąta są przetwarzane przez program modułu cieniującego wierzchołków, a powierzchnia każdego trójkąta — przez program modułu cieniującego pikseli. Kolor wyjściowy z programu pikseli dla każdego piksela jest rysowany w miejscu docelowym renderowania zgodnie z operacjami na szablonach, testem głębi, źródłową i docelową wartością alfa oraz bieżącym trybem mieszania. Celem renderowania może być główny bufor renderowania lub tekstura.

Jeśli jest aktywny tryb wyłączania (w przypadku użycia metody setCulling()), trójkąty mogą być odrzucane ze sceny przed uruchomieniem programu pikseli. Jeśli jest aktywny tryb testowania szablonów i głębi, piksele generowane przez program pikseli mogą być odrzucane bez aktualizowania miejsca docelowego renderowania. Również program pikseli może ustalić, że nie należy generować koloru dla piksela.

Renderowanie trójkąty nie są wyświetlane w widoku, dopóki nie zostanie wywołana metoda present(). Po każdym wywołaniu metody present() należy wywołać metodę clear(), zanim nastąpi pierwsze wywołanie metody drawTriangles(). W przeciwnym razie renderowanie nie powiedzie się.

Jeśli właściwość enableErrorChecking ma wartość false, ta funkcja natychmiast kończy działanie bez oczekiwania na wyniki, a wyjątki są generowane tylko w przypadku zwolnienia wystąpienia obiektu Context3D lub zbyt dużej liczby wywołań rysowania. Jeśli stan kontekstu renderowania jest nieprawidłowy, renderowanie kończy się niepowodzeniem bez powiadomienia. Jeśli właściwość enableErrorChecking ma wartość true, ta funkcja zwraca wartość po narysowaniu trójkątów, a wyjątki są generowane w przypadku wszystkich błędów rysowania i niewłaściwych stanów kontekstu.

Parametry

indexBuffer:IndexBuffer3D — Zestaw indeksów wierzchołków określających wierzchołki do renderowania.
 
firstIndex:int (default = 0) — Indeks pierwszego indeksu wierzchołka wybranego do renderowania. Domyślnie ta wartość wynosi 0.
 
numTriangles:int (default = -1) — Liczba trójkątów do renderowania. Każdy trójkąt wymaga trzech indeksów. Przekazanie wartości –1 powoduje narysowanie wszystkich trójkątów w buforze indeksu. Domyślnie ta wartość wynosi 1.


Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Występuje, jeśli metoda została wywołana zbyt wiele razy między wywołaniami metody present(). Maksymalna liczba wywołań wynosi 32 768.

Następujące błędy są generowane tylko wtedy, gdy właściwość enableErrorChecking ma wartość true:

 
Error — Trzeba wyczyścić przed rysowaniem: jeśli bufor nie został wyczyszczony od ostatniego wywołania metody present().
 
Error — Jeśli nie jest ustawiony prawidłowy obiekt Program3D.
 
Error — Nie ustawiono prawidłowego bufora indeksów: jeśli nie jest ustawiony obiekt IndexBuffer3D.
 
Error — Błąd testu sensowności parametrów: gdy liczba trójkątów do narysowania lub wartość firstIndex przekracza dozwolony limit.
 
RangeError — Zbyt mało indeksów w tym buforze: gdy bufor nie zawiera indeksów w liczbie wystarczającej do zdefiniowania liczby wierzchołków do narysowania.
 
Error — Próbka powiązana z teksturą powiązaną też z mechanizmem renderowania: gdy celem renderowania jest tekstura i ta tekstura jest przypisana do tekstury wejściowej bieżącego programu fragmentów.
 
Error — Próbka powiązana z nieprawidłową teksturą: jako parametr wejściowy bieżącego programu fragmentów określono nieprawidłową teksturę.
 
Error — Format próbnika niezgodny z formatem tekstury: gdy tekstura przypisana jako parametr wejściowy bieżącego programu fragmentów ma inny format niż określony w rejestrze próbnika. Tekstura 2D może na przykład być przypisana do próbnika tekstury sześciennej.
 
Error — Próbka powiązana z niezdefiniowaną teksturą: bieżący program fragmentów uzyskuje dostęp do rejestru tekstur, którego nie ustawiono (za pomocą metody setTextureAt()).
 
Error — Te same parametry próbnika wymagane przy tej samej teksturze: Jeśli tekstura jest używana dla więcej niż jednego rejestru próbnika, wszystkie próbniki muszą mieć takie same ustawienia. Nie można na przykład ustawić jednego próbnika na ściskanie, a innego na opakowywanie.
 
Error — Tekstura powiązana, ale nie używana: ustawiono teksturę jako parametr wejściowy modułu cieniującego, ale nie jest ona używana.
 
Error — Nieużywany strumień: do wejścia atrybutów wierzchołka przypisano bufor wierzchołków, ale program wierzchołków nie odnosi się do powiązanego z buforem rejestru.
 
Error — Nieprawidłowy strumień: obiekt VertexBuffer3D przypisany do programu wierzchołków nie jest prawidłowym obiektem.
 
RangeError — Za mało wierzchołków w strumieniu: bufor wierzchołków dostarczający dane do rysowania określonych trójkątów zawiera zbyt mało danych.
 
RangeError — Przesunięcie wierzchołka w strumieniu poza zakresem: przesunięcie określone w wywołaniu metody setVertexBufferAt() jest ujemne lub wykracza poza koniec bufora.
 
Error — Strumień odczytywany, ale nie ustawiony: atrybut wierzchołka używany przez bieżący program wierzchołków nie został ustawiony (za pomocą metody setVertexBufferAt()).

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Następująca klasa rysuje dwa trójkąty w pojedynczym widoku Stage3D na stole montażowym. Trójkąty mają jeden wspólny wierzchołek znajdujący się w początku układu współrzędnych (0,0,0).

Do definiowania trójkątów służą bufor wierzchołków i bufor indeksów. Bufor wierzchołków zawiera informacje o położeniu i kolorze każdego z wierzchołków trójkąta. Bufor indeksów zawiera indeksy dla bufora wierzchołków. Trójkąt definiują trzy indeksy. Na przykład trójkąt składający się z trzech pierwszych punktów z bufora wierzchołków jest zapisany w buforze indeksów jako „0,1,2”.

W tym prostym przykładzie nie występuje przekształcenie 3D. Mogą być wyświetlane tylko obiekty należące do kanonicznego obszaru wyświetlania (w przestrzeni o objętości 2 x 2 x 1). Współrzędne trójkątów są zdefiniowane tak, aby należały do tej przestrzeni. Podczas renderowania typowej sceny 3D obiekty są jednak przekształcane za pomocą rzutowania perspektywicznego lub ortogonalnego w taki sposób, aby były renderowane w tym obszarze wyświetlania zgodnie z ich położeniem w „rzeczywistym” układzie współrzędnych.

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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: AIR 20.0

Metoda umożliwia renderowanie wystąpień trójkątów z użyciem bieżących buforów i stanu obiektu Context3D.

Wierzchołki każdego trójkąta wystąpienia są przetwarzane przez program modułu cieniującego wierzchołków, a powierzchnia każdego trójkąta — przez program modułu cieniującego pikseli. Kolor wyjściowy z programu pikseli dla każdego piksela jest rysowany w miejscu docelowym renderowania zgodnie z operacjami na szablonach, testem głębi, źródłową i docelową wartością alfa oraz bieżącym trybem mieszania. Celem renderowania może być główny bufor renderowania lub tekstura.

Jeśli jest aktywny tryb wyłączania (w przypadku użycia metody setCulling()), trójkąty mogą być odrzucane ze sceny przed uruchomieniem programu pikseli. Jeśli jest aktywny tryb testowania szablonów i głębi, piksele generowane przez program pikseli mogą być odrzucane bez aktualizowania miejsca docelowego renderowania. Również program pikseli może ustalić, że nie należy generować koloru dla piksela.

Renderowane wystąpienia trójkątów nie są wyświetlane w widoku, dopóki nie zostanie wywołana metoda present(). Po każdym wywołaniu metody present() należy wywołać metodę clear(), zanim nastąpi pierwsze wywołanie metody drawTrianglesInstanced(). W przeciwnym razie renderowanie nie powiedzie się.

Jeśli właściwość enableErrorChecking ma wartość false, ta funkcja natychmiast kończy działanie bez oczekiwania na wyniki, a wyjątki są generowane tylko w przypadku zwolnienia wystąpienia obiektu Context3D lub zbyt dużej liczby wywołań rysowania. Jeśli stan kontekstu renderowania jest nieprawidłowy, renderowanie kończy się niepowodzeniem bez powiadomienia. Jeśli właściwość enableErrorChecking ma wartość true, ta funkcja zwraca wartość po narysowaniu trójkątów, a wyjątki są generowane w przypadku wszystkich błędów rysowania i niewłaściwych stanów kontekstu.

Ta metoda może powodować wyrzucenie wyjątku, jeśli wystąpienie bufora zostanie nieprawidłowo ustawione w sekwencji za pomocą polecenia SetVertexAt(). Na przykład w przypadku Direct 3D w wersji 9 zaindeksowane dane geometrii oraz liczbę wystąpień do narysowania należy zawsze ustawić w strumieniu zero z interfejsem API SetStreamSourceFreq().

Oznacza to, że nie należy umieszczać bufora wierzchołków utworzonego za pomocą polecenia CreateVertexBufferForInstance() z minimalnym numerem indeksowym w połączeniu z poleceniem SetVertexBufferAt() jako parametrem wejściowym programu modułu cieniującego wierzchołków. Bufor wierzchołków wygenerowany za pomocą polecenia CreateVertexBuffer() należy umieszczać z zastosowaniem mniejszego numeru indeksowego niż w przypadku CreateVertexBufferForInstance(). Ogólnie mówiąc, dane geometrii należy umieszczać przed danymi dla danego wystąpienia, używając polecenia SetVertexBufferAt().

Parametry

indexBuffer:IndexBuffer3D — Zestaw indeksów wierzchołków określających wierzchołki do renderowania.
 
numInstances:int — Liczba wystąpień do renderowania.
 
firstIndex:int (default = 0) — Indeks pierwszego indeksu wierzchołka wybranego do renderowania. Domyślnie ta wartość wynosi 0.
 
numTriangles:int (default = -1) — Liczba trójkątów do renderowania. Każdy trójkąt wymaga trzech indeksów. Przekazanie wartości –1 powoduje narysowanie wszystkich trójkątów w buforze indeksu. Domyślnie ta wartość wynosi 1.


Zgłasza
Error — Obiekt zwolniony: jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.
 
Error — Występuje, jeśli metoda została wywołana zbyt wiele razy między wywołaniami metody present(). Maksymalna liczba wywołań wynosi 32 768.
 
Error — Wymaga profilu standardowego rozszerzonego lub wyższego: W przypadku wywołania tej metody, gdy żądany profil jest niższy niż standardowy rozszerzony.
 
Error — Gdy ta metoda jest wywoływana z ujemną wartością numInstances.

Następujące błędy są generowane tylko wtedy, gdy właściwość enableErrorChecking ma wartość true:

 
Error — Trzeba wyczyścić przed rysowaniem: jeśli bufor nie został wyczyszczony od ostatniego wywołania metody present().
 
Error — Jeśli nie jest ustawiony prawidłowy obiekt Program3D.
 
Error — Nie ustawiono prawidłowego bufora indeksów: jeśli nie jest ustawiony obiekt IndexBuffer3D.
 
Error — Błąd testu sensowności parametrów: gdy liczba trójkątów do narysowania lub wartość firstIndex przekracza dozwolony limit.
 
RangeError — Zbyt mało indeksów w tym buforze: gdy bufor nie zawiera indeksów w liczbie wystarczającej do zdefiniowania liczby wierzchołków do narysowania.
 
Error — Próbka powiązana z teksturą powiązaną też z mechanizmem renderowania: gdy celem renderowania jest tekstura i ta tekstura jest przypisana do tekstury wejściowej bieżącego programu fragmentów.
 
Error — Próbka powiązana z nieprawidłową teksturą: jako parametr wejściowy bieżącego programu fragmentów określono nieprawidłową teksturę.
 
Error — Format próbnika niezgodny z formatem tekstury: gdy tekstura przypisana jako parametr wejściowy bieżącego programu fragmentów ma inny format niż określony w rejestrze próbnika. Tekstura 2D może na przykład być przypisana do próbnika tekstury sześciennej.
 
Error — Próbka powiązana z niezdefiniowaną teksturą: bieżący program fragmentów uzyskuje dostęp do rejestru tekstur, którego nie ustawiono (za pomocą metody setTextureAt()).
 
Error — Te same parametry próbnika wymagane przy tej samej teksturze: Jeśli tekstura jest używana dla więcej niż jednego rejestru próbnika, wszystkie próbniki muszą mieć takie same ustawienia. Nie można na przykład ustawić jednego próbnika na ściskanie, a innego na opakowywanie.
 
Error — Tekstura powiązana, ale nie używana: ustawiono teksturę jako parametr wejściowy modułu cieniującego, ale nie jest ona używana.
 
Error — Nieużywany strumień: do wejścia atrybutów wierzchołka przypisano bufor wierzchołków, ale program wierzchołków nie odnosi się do powiązanego z buforem rejestru.
 
Error — Nieprawidłowy strumień: obiekt VertexBuffer3D przypisany do programu wierzchołków nie jest prawidłowym obiektem.
 
RangeError — Za mało wierzchołków w strumieniu: bufor wierzchołków dostarczający dane do rysowania określonych trójkątów zawiera zbyt mało danych.
 
RangeError — Przesunięcie wierzchołka w strumieniu poza zakresem: przesunięcie określone w wywołaniu metody setVertexBufferAt() jest ujemne lub wykracza poza koniec bufora.
 
Error — Strumień odczytywany, ale nie ustawiony: atrybut wierzchołka używany przez bieżący program wierzchołków nie został ustawiony (za pomocą metody setVertexBufferAt()).
 
Error — Strumień bufora wierzchołków nie zawiera wystarczająco wiele elementów na potrzeby wystąpień: Gdy strumień bufora wierzchołków nie zawiera wystarczająco wiele elementów względem liczby wystąpień.
 
Error — Strumień bufora wierzchołków dla wystąpień jest ustawiony nieprawidłowo z zastosowaniem rejestru minimalnych atrybutów indeksu: jeśli bufor wierzchołków wygenerowany przy użyciu polecenia CreateVertexBuffer()otrzyma większy numer indeksowy niż bufor wierzchołków wygenerowany przy użyciu polecenia CreateVertexBufferForInstance().

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Poniższa klasa reprezentuje rysowanie trzech trójkątów za pomocą funkcji rysowania z zastosowaniem instancji przy użyciu jednego wywołania rysowania zamiast wielu wywołań rysowania.
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.
        }    
    }
}

Poniższa klasa reprezentuje rysowanie trzech trójkątów za pomocą funkcji rysowania z zastosowaniem instancji przy użyciu jednego wywołania rysowania zamiast wielu wywołań rysowania.
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

()metoda 
public function present():void

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Wyświetla tylny bufor renderowania.

Wywołanie metody present() powoduje wyświetlenie efektów wszystkich operacji renderowania wykonanych od poprzedniego wywołania metody present() i powoduje rozpoczęcie nowego cyklu renderowania. Po wywołaniu metody present należy wywołać metodę clear() przed kolejnymi wywołaniami metody drawTriangles(). W przeciwnym przypadku ta funkcja wyczyści bufor renderowania przez ustawienie koloru żółtego lub zielonego (na zmianę) lub — jeśli właściwość enableErrorChecking będzie ustawiona na wartość true — zostanie wygenerowany wyjątek.

Wywołanie metody present() powoduje także wyzerowanie celu renderowania — analogicznie do wywołania metody setRenderToBackBuffer().


Zgłasza
Error — Trzeba wyczyścić przed rysowaniem: jeśli metoda clear() nie została wywołana od ostatniego wywołania mtody present(). (Nie można wywołać metody present() dwa razy z rzędu bez wywołania metody clear() pomiędzy tymi wywołaniami).
 
Error — Interfejs API Stage3D nie może być używany podczas wykonywania tła.

setBlendFactors

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Określa współczynniki użyte do mieszania koloru wyjściowego operacji rysowania z istniejącym kolorem.

Kolor wyjściowy (źródłowy) programu modułu cieniującego pikseli jest łączony z istniejącym (docelowym) kolorem w tym pikselu zgodnie z następującym wzorem:

kolor wynikowy = (source color * sourceFactor) + (destination color * destinationFactor)

Kolor docelowy to bieżący kolor w buforze renderowania dla tego piksela. Jest to zatem wynik ostatniego wywołania metody clear() oraz każdego pośredniego wywołania metody drawTriangles().

Za pomocą metody setBlendFactors() można ustawić współczynniki używane do mnożenia kolorów źródłowego i docelowego, zanim zostaną one do siebie dodane. Domyślne współczynniki mieszania to sourceFactor = Context3DBlendFactor.ONE oraz destinationFactor = Context3DBlendFactor.ZERO, co powoduje zastąpienie koloru docelowego kolorem źródłowym (innymi słowy, nie następuje mieszanie tych dwóch kolorów). W przypadku normalnego mieszania alfa należy użyć współczynników sourceFactor = Context3DBlendFactor.SOURCE_ALPHA oraz destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA.

Aby ustawić parametry tej funkcji, należy zastosować stałe zdefiniowane w klasie Context3DBlendFactor.

Parametry

sourceFactor:String — Współczynnik, przez który należy pomnożyć kolor źródłowy. Wartość domyślna to Context3DBlendFactor.ONE.
 
destinationFactor:String — Współczynnik, przez który należy pomnożyć kolor docelowy. Wartość domyślna to Context3DBlendFactor.ZERO.


Zgłasza
Error — Nieprawidłowe wyliczenie: gdy wartość parametru sourceFactor lub destinationFactor nie jest jedną z rozpoznawanych wartości zdefiniowanych w klasie Context3DBlendFactor.

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Poniższa klasa ilustruje różne współczynniki mieszania. W tym przykładzie cztery prostokąty o różnych kolorach są rysowane w buforze renderowania. Zestaw prostokątów jest celem mieszania. Następnie są ustawiane tryby mieszania elementów źródłowych i docelowych oraz jest rysowany większy prostokąt stanowiący źródło mieszania. Za pomocą klawiszy 1 i 2 można przełączać tryby mieszania źródła. Za pomocą klawiszy 3 i 4 można przełączać tryby mieszania celu.
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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia maskę używaną podczas zapisywania kolorów w buforze renderowania.

Po zapisaniu koloru w buforze renderowania aktualizowane są tylko te składniki kolorów, dla których parametr odpowiedniej maski koloru ustawiono na wartość true. Na przykład po wywołaniu setColorMask(true, false, false, false) do momentu ponownej zmiany maski koloru w buforze zapisywany jest tylko czerwony składnik koloru. Maska koloru nie ma wpływu na działanie metody clear().

Parametry

red:Boolean — Aby zablokować zmiany w kanale czerwonym, należy ustawić wartość false.
 
green:Boolean — Aby zablokować zmiany w kanale zielonym, należy ustawić wartość false.
 
blue:Boolean — Aby zablokować zmiany w kanale niebieskim, należy ustawić wartość false.
 
alpha:Boolean — Aby zablokować zmiany w kanale alfa, należy ustawić wartość false.


Przykład  ( Sposób korzystania z tego przykładu )

Poniższy przykład ilustruje efekt ustawienia maski kolorów. Przykładowy kod rysuje dwa trójkąty o tym samym kolorze. Górny trójkąt jest rysowany przed ustawieniem maski, dlatego jest renderowany w kolorze białym. Dolny trójkąt jest rysowany po zamaskowaniu wszystkich kolorów oprócz czerwonego. Może być aktualizowany tylko kanał czerwony, dlatego trójkąt jest renderowany w kolorze czerwonym.
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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia tryb wyłączania trójkątów.

Trójkąty mogą zostać wyłączone ze sceny na wczesnym etapie renderowania ze względu na ich orientację względem płaszczyzny widoku. Aby wyłączanie odbywało się poprawnie, kolejność wierzchołków należy określać spójnie (zgodnie z ruchem wskazówek zegara lub przeciwnie do kierunku ruchu wskazówek zegara) w taki sposób, jak są one widoczne z zewnątrz modelu.

Parametry

triangleFaceToCull:String — Tryb wyłączania. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DTriangleFace.


Zgłasza
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru triangleFaceToCull nie jest jedną z wartości zdefiniowanych w klasie Context3DTriangleFace.

Powiązane elementy interfejsu API

setDepthTest

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia typ porównywania używanego do testowania głębi.

Głębia wyjściowego piksela źródłowego z programu modułu cieniującego pikseli jest porównywana z bieżącą wartością w buforze głębi. Gdy porównanie zwraca wartość false, piksel źródłowy jest odrzucany. Gdy zwraca wartość true, piksel źródłowy jest przetwarzany w następnym etapie renderowania, czyli w teście szablonu. Dopóki parametr depthMask ma wartość true, bufor głębi jest aktualizowany przy użyciu głębi piksela źródłowego.

Powoduje ustawienie testu służącego do porównywania wartości głębi dla pikseli źródłowych i docelowych. Gdy porównanie zwraca wartość true, piksel źródłowy jest łączony z pikselem docelowym. Operator porównawczy jest stosowany jako operator wewnętrzny między wartościami piksela źródłowego i docelowego, w takiej kolejności.

Parametry

depthMask:Boolean — W przypadku wartości true wartość głębi docelowej będzie aktualizowana z pikseli źródłowych.
 
passCompareMode:String — Operacja testu porównywania głębi. Jedna z wartości Context3DCompareMode.

Powiązane elementy interfejsu API

    setFillMode

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: AIR 16

Pozwala ustawić tryb wypełniania przy renderowaniu. Interfejs jest dostępny tylko na komputerze z zainstalowanym środowiskiem AIR.

Parametry

fillMode:String — W przypadku wartości WIREFRAME obiekt będzie wyświetlany na siatce linii. W przypadku wartości SOLID obiekt będzie wyświetlany na cieniowanej siatce wielokątowej.

Powiązane elementy interfejsu API

setProgram

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Konfiguruje programy modułów cieniujących wierzchołków i fragmentów do użytku w dalszym renderowaniu.

Parametry

program:Program3D — Obiekt Program3D reprezentujący programy wierzchołków i fragmentów do używania.

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Ten przykład ilustruje sposób tworzenia, wysyłania i uaktywniania pary programów wierzchołków i pikseli dla kontekstu renderowania. Obiekt renderContext jest wystąpieniem klasy Context3D. Programy w tym przykładzie są napisane w języku AGAL (Adobe Graphics Assembly Language).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

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

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

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

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

setProgramConstantsFromByteArray

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11.1, AIR 3.1

Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie ByteArray.

Ustawia stałe dostępne za pomocą programu wierzchołków lub fragmentów.

Parametry

programType:String — Jeden z trybów klasy Context3DProgramType.
 
firstRegister:int — Indeks pierwszej stałej programu modułu cieniującego do ustawienia.
 
numRegisters:int — Liczba rejestrów do ustawienia. Każdy rejestr jest odczytywany jako cztery wartości zmiennoprzecinkowe.
 
data:ByteArray — Źródłowy obiekt ByteArray.
 
byteArrayOffset:uint — Przesunięcie odczytu z obiektu ByteArray.


Zgłasza
TypeError — Wartość kNullPointerError, gdy parametr data ma wartość null.
 
RangeError — Wartość kConstantRegisterOutOfBounds w przypadku próby ustawienia stałych modułu cieniującego w liczbie większej niż maksymalna.
 
RangeError — Wartość kBadInputSizem, jeśli parametr byteArrayOffset jest nie mniejszy niż długość tablicy data lub liczba elementów w tablicy databyteArrayOffset to mniej niż numRegisters * 16.

Powiązane elementy interfejsu API

setProgramConstantsFromMatrix

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia stałe do użytku w programach modułów cieniujących, korzystając z wartości przechowywanych w obiekcie Matrix3D.

Ta funkcja pozwala przekazać macierz do programu modułu cieniującego. Ta funkcja ustawia 4 rejestry stałych używane przez program wierzchołków lub fragmentów. Macierz jest przypisywana do rejestrów wiersz po wierszu. Pierwszy rejestr stałych jest przypisywany do górnego wiersza macierzy. Można ustawić 128 rejestrów dla programu wierzchołków i 28 dla programu fragmentów.

Parametry

programType:String — Typ programu modułu cieniującego — albo Context3DProgramType.VERTEX, albo Context3DProgramType.FRAGMENT.
 
firstRegister:int — Indeks pierwszego rejestru stałych do ustawienia. Obiekt Matrix3D ma 16 wartości, co oznacza, że są ustawione 4 rejestry.
 
matrix:Matrix3D — Macierz zawierająca wartości stałych.
 
transposedMatrix:Boolean (default = false) — W przypadku wartości true wpisy w macierzy są kopiowane do rejestrów w kolejności transponowanej. Wartością domyślną jest false.


Zgłasza
TypeError — Błąd pustego wskaźnika: gdy właściwość matrix ma wartość null.
 
RangeError — Rejestr stałych poza zakresem: przy próbie ustawienia większej liczby rejestrów stałych modułów cieniujących niż liczba maksymalna.

Więcej informacji

Powiązane elementy interfejsu API

setProgramConstantsFromVector

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia stałe parametry wejściowe dla programów modułów cieniujących.

Ustawia tablicę stałych dostępnych za pomocą programu modułu cieniującego wierzchołków lub fragmentów. Stałe ustawione w obiekcie Program3D są dostępne w programach modułu cieniującego jako rejestry stałych. Każdy rejestr stałych składa się z 4 wartości zmiennoprzecinkowych (x, y, z, w). Każdy rejestr wymaga więc 4 wpisów w wektorze danych. Liczba rejestrów możliwych do ustawienia dla programu wierzchołków i programu fragmentów zależy od wartości Context3DProfile.

Parametry

programType:String — Typ programu modułu cieniującego — albo Context3DProgramType.VERTEX, albo Context3DProgramType.FRAGMENT.
 
firstRegister:int — Indeks pierwszego rejestru stałych do ustawienia.
 
data:Vector.<Number> — Wartości stałych zmiennoprzecinkowych. Liczba elementów w parametrze data musi wynosić co najmniej numRegisters (4 elementy).
 
numRegisters:int (default = -1) — Liczba stałych do ustawienia. Określenie wartości –1 (domyślnej) powoduje ustawienie liczby rejestrów wystarczającej do użycia wszystkich dostępnych danych.


Zgłasza
TypeError — Błąd pustego wskaźnika: gdy właściwość data ma wartość null.
 
RangeError — Rejestr stałych poza zakresem: przy próbie ustawienia większej liczby rejestrów stałych modułów cieniujących niż liczba maksymalna.
 
RangeError — Nieprawidłowy rozmiar danych wejściowych: Gdy liczba elementów w tablicy data jest mniejsza niż numRegisters * 4.

Więcej informacji

Powiązane elementy interfejsu API

setRenderToBackBuffer

()metoda 
public function setRenderToBackBuffer():void

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia tylny bufor renderowania jako cel renderowania. Kolejne wywołania metod drawTriangles() i clear() skutkują modyfikacjami bufora tylnego. Korzystając z tej metody, można wznowić normalne renderowanie po użyciu metody setRenderToTexture().

setRenderToTexture

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia określoną teksturę jako cel renderowania.

Kolejne wywołania metod drawTriangles() i clear() modyfikują określoną teksturę, a nie bufor tylny. Mipmapy są tworzone automatycznie. Metoda setRenderToBackBuffer() pozwala wznowić normalne renderowanie do bufora tylnego.

Nie trzeba wykonywać czyszczenia przed rysowaniem. W przypadku braku operacji czyszczenia jest zachowywany kontener renderowania. Nie są też czyszczone bufor głębokości ani bufor wzornika. Czyszczenie jest wymuszane przy pierwszym rysowaniu. Wywołanie metody present() przywraca bufor tylny jako cel renderowania.

Parametry

texture:flash.display3D.textures:TextureBase — Docelowa tekstura do renderowania. Ustawienie null pozwala wznowić renderowanie do bufora tylnego. (Metody setRenderToBackBuffer() i present również przywracają bufor tylny jako cel renderowania).
 
enableDepthAndStencil:Boolean (default = false) — W przypadku wartości true jest dostępne testowanie głębi i szablonów. W przypadku wartości false wszystkie stany głębi i szablonów są ignorowane przy kolejnych operacjach rysowania.
 
antiAlias:int (default = 0) — Jakość wygładzania. Wartość 0 powoduje wyłączenie wygładzania. Wyższe wartości oferują lepszą jakość wygładzania, ale wymagają dodatkowych obliczeń. Ta wartość jest obecnie ignorowana przez platformę przenośną i w kontekście renderowania oprogramowania.
 
surfaceSelector:int (default = 0) — Określa, który element tekstury ma zostać zmodyfikowany. Obiekty Texture mają jedną powierzchnię, dlatego należy dla nich podać wartość 0 (domyślną). Obiekty CubeTexture mają sześć powierzchni. Można dla nich podać jako wartość liczbę całkowitą od 0 do 5.
 
colorOutputIndex:int (default = 0) — Rejestr koloru wyjściowego. Musi mieć wartość 0 w przypadku trybu ograniczonego lub trybu bazowego. W przeciwnym razie określa rejestr koloru wyjściowego.


Zgłasza
ArgumentError — W przypadku niezgodnego parametru surfaceSelector. Musi mieć wartość 0 dla tekstur 2D i od 0 do 5 dla map sześciennych.
 
ArgumentError — Wartość texture nie jest uzyskiwana z klasy TextureBase (klasy Texture lub CubeTexture).
 
ArgumentError — Wartość colorOutputIndex musi być liczbą całkowitą od 0 do 3.
 
ArgumentError — To wywołanie wymaga obiektu Context3D utworzonego co najmniej z profilem standardowym.

Powiązane elementy interfejsu API

setSamplerStateAt

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11.6, AIR 3.6

Ręcznie przesłania stan próbnika tekstury.

Stan próbkowania tekstury jest zazwyczaj ustawiany przy wywołaniu metody setProgram. Za pomocą tej funkcji można przesłonić stan próbnika tekstury. Jeśli program nie ma zmieniać stanu próbnika, ustaw bit ignoresamnpler translatora AGAL i użyj tej funkcji.

Parametry

sampler:int — Rejestr próbnika, który ma być używany. Odwzorowuje na rejestr próbnika translatora AGAL.
 
wrap:String — Tryb opakowania. Zdefiniowany w zmiennej Context3DWrapMode. Wartość domyślna to repeat (powtarzanie).
 
filter:String — Tryb filtrowania tekstury. Zdefiniowany w zmiennej Context3DTextureFilter. Wartość domyślna to nearest (najbliższe).
 
mipfilter:String — Filtr mipmapy. Zdefiniowany w zmiennej Context3DMipFilter. Wartość domyślna to none (brak).


Zgłasza
Error — Próbnik poza zakresem.
 
Error — Opakowywanie, filtrowanie, niepoprawne wyliczenie filtra mipmap.
 
Error — Obiekt zwolniony: Jeśli ten obiekt Context3D został zwolniony przez wywołanie metody dispose() lub z powodu utraty dostępu do sprzętu renderującego.

Powiązane elementy interfejsu API

setScissorRectangle

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia prostokąt nożyczek. Jest to typ maski rysowania. Mechanizm renderujący rysuje tylko w obszarze wewnątrz prostokąta nożyczek. Stosowanie nożyczek nie wpływa na operacje czyszczenia.

Przekazanie wartości null powoduje wyłączenie nożyczek.

Parametry

rectangle:Rectangle — Prostokąt, w którym ma się odbywać rysowanie. Określa położenie prostokąta i jego wymiary w pikselach. Początek układu współrzędnych znajduje się w lewym górnym rogu widoku. Wartości dodatnie oznaczają przesunięcie odpowiednio w dół i w prawo (tak samo jak w normalnym układzie współrzędnych programu Flash).


Przykład  ( Sposób korzystania z tego przykładu )

Poniższa klasa umożliwia narysowanie dwóch trójkątów w porcie widoku stołu montażowego o wielkości 640 x 480 pikseli. Trójkąty mają jeden wspólny wierzchołek znajdujący się w początku układu współrzędnych (0,0,0).

Do definiowania trójkątów służą bufor wierzchołków i bufor indeksów. Bufor wierzchołków zawiera informacje o położeniu i kolorze każdego z wierzchołków trójkąta. Bufor indeksów zawiera indeksy dla bufora wierzchołków. Trójkąt definiują trzy indeksy. Na przykład trójkąt składający się z trzech pierwszych punktów z bufora wierzchołków jest zapisany w buforze indeksów jako „0,1,2”.

W tym prostym przykładzie nie występuje przekształcenie 3D. Wyświetlane są tylko obiekty leżące wewnątrz kanonicznego obszaru wyświetlania (sześcian o boku 2 x 2 x 2 wyśrodkowany względem początku układu współrzędnych). Podczas renderowania typowej sceny 3D obiekty są jednak przekształcane za pomocą rzutowania perspektywicznego lub ortogonalnego w taki sposób, aby były renderowane w tym obszarze wyświetlania.

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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia tryb i operację szablonu.

Z każdym wywołaniem rysowania można powiązać 8-bitową wartość odniesienia. Podczas renderowania wartość odniesienia można przetestować względem wartości przechowywanych wcześniej w buforze ramki. Wynik tego testu może kontrolować czynność rysowania i to, czy zostanie zaktualizowana przechowywana wartość szablonu. Ponadto test głębi kontroluje to, czy jest wykonywane testowanie szablonu. Nieudanego testu głębokości można używać do kontrolowania czynności wykonywanej względem bufora szablonu.

Testowanie głębi jest wykonywane jako pierwsze w procesie przetwarzania pikseli. W razie niepowodzenia testu głębi można wykonać czynność aktualizowania bufora szablonu, ale nie można przeprowadzić dalszego badania wartości bufora szablonu. W razie powodzenia testu głębi jest wykonywany test szablonu. W zależności od wyniku testu szablonu można wykonać inne operacje.

Do ustawiania wartości odniesienia szablonu służy metoda setStencilReferenceValue().

Parametry

triangleFace:String (default = "frontAndBack") — Orientacje trójkątów pozwalające na wkład w operacje na szablonach. Jeden z trybów klasy Context3DTriangleFace.
 
compareMode:String (default = "always") — Operator testu używany do porównywania bieżącej wartości szablonu odniesienia i docelowej wartości szablonu piksela. Gdy porównanie da wartość true, zostaną zaktualizowane kolor i głębia piksela docelowego. Operacje szablonów są wykonywane zgodnie z żądaniami w poniższych parametrach operacji. Operator porównania jest stosowany jako operator wewnętrzny między bieżącymi i docelowymi wartościami odniesienia, w tej kolejności (w pseudokodzie: jeśli odniesienie_do_szablonu OPERATOR bufor_szablonu, to porównanie udane). Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DCompareMode.
 
actionOnBothPass:String (default = "keep") — Operacja do wykonania, gdy porównania zarówno głębi, jak i szablonu są udane. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DStencilAction.
 
actionOnDepthFail:String (default = "keep") — Operacja do wykonania w przypadku nieudanego porównania głębi. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DStencilAction.
 
actionOnDepthPassStencilFail:String (default = "keep") — Operacja do wykonania w przypadku udanego porównania głębi i nieudanego porównania szablonu. Należy użyć jednej ze stałych zdefiniowanych w klasie Context3DStencilAction.


Zgłasza
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru triangleFace nie jest jedną z wartości zdefiniowanych w klasie Context3DTriangleFace.
 
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru compareMode nie jest jedną z wartości zdefiniowanych w klasie Context3DCompareMode.
 
Error — Błąd nieprawidłowego wyliczenia: gdy wartość parametru actionOnBothPass, actionOnDepthFail lub actionOnDepthPassStencilFail nie jest jedną z wartości zdefiniowanych w klasie Context3DStencilAction.

Powiązane elementy interfejsu API


Przykład  ( Sposób korzystania z tego przykładu )

Poniższy przykład ilustruje sposób rysowania szablonu i używania go jako maski w kolejnych operacjach rysowania. Przykładowy kod wykonuje następujące czynności:
  • Bufor szablonu jest czyszczony przy użyciu wartości 0.
  • Jest ustawiane zwiększanie numeru operacji szablonu przy pomyślnym teście szablonu.
  • Wartość odniesienia szablonu jest ustawiana na 0.
  • Jest rysowana maska trójkątna. Test szablonu ma wynik pomyślny wszędzie tam, gdzie jest narysowany trójkąt, gdyż bufor szablonu wyczyszczono przy użyciu wartości 0, a wartością odniesienia jest 0. W wyniku tego wartość bufora szablonu jest zwiększana do 1 tam, gdzie jest narysowana maska trójkątna.
  • Operacja szablonu jest zmieniana na zachowywanie wartości, tak aby dalsze operacje rysowania nie zmieniły bufora szablonu.
  • Jest rysowany (wielokolorowy) prostokąt obejmujący cały ekran. Wartość odniesienia szablonu nadal wynosi 0, dlatego test szablonu kończy się niepowodzeniem w zamaskowanym obszarze. Z tego powodu prostokąt jest rysowany wszędzie poza zamaskowanym obszarem.
  • Wartość odniesienia szablonu jest zmieniana na 1.
  • Jest rysowany kolejny prostokąt obejmujący cały ekran (w kolorze czerwonym). Teraz test szablonu kończy się niepowodzeniem wszędzie poza zamaskowanym obszarem, na którym wartości zostały zwiększone do 1. Prostokąt jest więc rysowany tylko w zamaskowanym obszarze.

Aby wyświetlić kolejne kroki, wskaż przykład myszą.

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

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Ustawia wartość porównawczą szablonu stosowaną w testach szablonów.

Jest stosowanych wyłącznie 8 dolnych bitów wartości odniesienia. Długość wartości bufora szablonu także wynosi 8 bitów. Aby użyć bufora szablonu jako pola bitowego, należy zastosować parametry readMask i writeMask.

Parametry

referenceValue:uint — 8-bitowa wartość odniesienia stosowana w testach porównawczych wartości odniesienia.
 
readMask:uint (default = 255) — 8-bitowa maska do zastosowania przed porównaniem zarówno w przypadku bieżącej wartości bufora szablonu, jak i wartości odniesienia.
 
writeMask:uint (default = 255) — 8-bitowa maska zastosowana do wartości odniesienia przed zaktualizowaniem bufora szablonu.

Powiązane elementy interfejsu API

setTextureAt

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Określa teksturę, która ma być stosowana w rejestrze tekstur wejściowych programu fragmentów.

Program fragmentów może odczytywać informacje z maksymalnie ośmiu obiektów tekstur. Ta funkcja pozwala przydzielić obiekt Texture lub CubeTexture do jednego z rejestrów próbników używanych przez program fragmentów.

Uwaga: w przypadku zmiany programu fragmentów (metodą setProgram) na moduł cieniujący korzystający z mniejszej liczby tekstur należy ustawić dla nieużywanych rejestrów wartość null.

         setTextureAt( 7, null );
         

Parametry

sampler:int — Indeks rejestru próbnika. Wartość od 0 do 7.
 
texture:flash.display3D.textures:TextureBase — Obiekt tekstury, który ma zostać udostępniony (wystąpienie klasy Texture lub CubeTexture).

Więcej informacji

Powiązane elementy interfejsu API

Texture
CubeTexture

setVertexBufferAt

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

Wersja języka: ActionScript 3.0
Wersje środowiska wykonawczego: Flash Player 11, AIR 3

Określa, które składniki danych wierzchołków odpowiadają pojedynczym danym wejściowym programu modułu cieniującego wierzchołków.

Metoda setVertexBufferAt pozwala określić, które składniki danych zdefiniowane dla każdego wierzchołka w buforze VertexBuffer3D należą do których wejść programu wierzchołków. Autor programu wierzchołków określa, ile danych jest wymaganych dla każdego wierzchołka. Dane są odwzorowywane z co najmniej 1 strumienia VertexBuffer3D na rejestry atrybutów programu modułu cieniującego wierzchołków.

Najmniejsza jednostka danych przyjmowana przez moduł cieniujący wierzchołków to 32 bity danych. Przesunięcia w strumieniu wierzchołków są określane w wielokrotnościach 32 bitów.

Programista może na przykład zdefiniować każdy wierzchołek jako zawierający następujące dane:
position:  x    float32
           y    float32
           z    float32
color:     r    unsigned byte
           g    unsigned byte
           b    unsigned byte
           a    unsigned byte
Zakładając, że wierzchołek został zdefiniowany w obiekcie VertexBuffer3D o nazwie buffer, może on zostać przypisany do modułu cieniującego wierzchołków za pomocą poniższego kodu.
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

Parametry

index:int — Indeks rejestru atrybutów w module cieniującym wierzchołków (od 0 do 7).
 
buffer:VertexBuffer3D — Bufor zawierający źródłowe dane wierzchołków do przekazania modułowi cieniującemu wierzchołków.
 
bufferOffset:int (default = 0) — Przesunięcie od początku danych dla pojedynczego wierzchołka, w którym należy rozpocząć odczyt tego atrybutu. W powyższym przykładzie dane pozycji mają przesunięcie 0, ponieważ został użyty pierwszy atrybut. Kolor ma przesunięcie 3, ponieważ atrybut koloru następuje po trzech pozycjach wartości 32-bitowych. Przesunięcie jest określane w jednostkach 32-bitowych.
 
format:String (default = "float4") — Wartość należąca do klasy Context3DVertexBufferFormat i określająca typ danych tego atrybutu.


Zgłasza
Error — Nieprawidłowe wyliczenie: gdy format nie jest jedną z wartości zdefiniowanych w klasie Context3DVertexBufferFormat.
 
RangeError — Rejestr atrybutów poza zakresem: gdy właściwość parametru index nie należy do zakresu od 0 do 7. (Moduł cieniujący może używać maksymalnie 8 rejestrów atrybutów).

Więcej informacji

Powiązane elementy interfejsu API

Context3DExample.as

Poniższa klasa rysuje obracający się sześcian przy użyciu rzutowania perspektywicznego.
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 ]Dlaczego język angielski?
Treść dokumentacji języka ActionScript 3.0 wyświetlana w języku angielskim

Niektóre części dokumentacji języka ActionScript 3.0 nie są przetłumaczone na poszczególne języki. Gdy element nie jest przetłumaczony na dany język, jest wyświetlany tekst angielski. Na przykład opis klasy ga.controls.HelpBox nie jest przetłumaczony na żaden dodatkowy język. Z tego powodu polska wersja dokumentacji zawiera opis klasy ga.controls.HelpBox w języku angielskim.