Справочник по ActionScript® 3.0 для платформы Adobe® Flash®
Домашняя страница  |  Скрыть список пакетов и классов |  Пакеты  |  Классы  |  Что нового  |  Указатель  |  Приложения  |  Почему по-английски?
Фильтры: AIR 30.0 или более ранней версии, Flash Player 30.0 или более ранней версии, Flash Lite 4
Flex 4.6 или более ранней версии, Flash Pro CS6 или более ранней версии
Скрыть фильтры
flash.display3D 

Context3D  - AS3

Пакетыx

Верхний уровень
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

Элементы языка

Глобальные константы
Глобальные функции
Операторы
Инструкции, ключевые слова и директивы
Специальные типы

Приложения

Новые возможности
Ошибки компилятора
Предупреждения компилятора
Ошибки времени выполнения
Миграция ActionScript 3
Поддерживаемые наборы символов
Только MXML
Элементы движения XML
Теги Timed Text
устаревший_индекс
Константы реализации специальных возможностей
Использование примеров
Юридическая информация
Пакетflash.display3D
Классpublic final class Context3D
НаследованиеContext3D Inheritance EventDispatcher Inheritance Object

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Класс Context3D обеспечивает контекст для визуализации геометрически определенной графики.

Контекст визуализации включает поверхность рисунка, а также связанные с ней ресурсы и состояние. Когда это возможно, контекст визуализации использует аппаратный графический процессор. В противном случае используется программное обеспечение. (Если платформа не поддерживает визуализацию через Context3D, свойство stage3Ds объекта Stage содержит пустой список.)

Контекст визуализации Context3D — это программируемый канал, который очень похож на OpenGL ES 2, но является абстрактным, что делает его совместимым с разными интерфейсами оборудования и графических процессоров. Хотя канал визуализации разработан для 3D-графики, визуализация не обязательно должна быть трехмерной. Таким образом можно создать 2D-визуализатор, предоставив соответствующие программы вершинных и пиксельных фрагментных шейдеров. И при 3D-, и при 2D-визуализации единственным поддерживаемым геометрическим примитивом является треугольник.

Получите экземпляр класса Context3D, вызвав метод requestContext3D() для объекта Stage3D. В одной рабочей области может существовать ограниченное число объектов Context3D; по одному для каждого объекта Stage3D в списке Stage.stage3Ds. Когда создается контекст, объект Stage3D отправляет событие context3DCreate. Контекст визуализации можно в любое время уничтожать и воссоздавать, например, когда фокус получает другое приложение, использующее графический процессор. В коде необходимо предусмотреть получение нескольких событий context3DCreate. Расположите область визуализации в рабочей области с использованием свойств x и y связанного экземпляра Stage3D.

Чтобы визуализировать и отобразить сцену (после получения объекта Context3D), обычно требуется выполнить следующие действия.

  1. Настройте атрибуты буфера главного дисплея, вызвав метод configureBackBuffer().
  2. Создайте и инициализируйте ресурсы визуализации, включая:
    • буферы вершин и индексов, определяющие геометрию сцены;
    • вершинные и пиксельные программы (шейдеры) для визуализации сцены;
    • текстуры;
  3. Визуализируйте кадр.
    • Задайте необходимое состояние средства визуализации для объекта или коллекции объектов в сцене.
    • Вызовите метод drawTriangles() для визуализации набора треугольников.
    • Измените состояние визуализации для следующей группы объектов.
    • Вызовите метод drawTriangles() для отрисовки треугольников, определяющих объекты.
    • Повторяйте эти действия, пока сцена не будет визуализирована полностью.
    • Вызовите метод present() для отображения визуализированной сцены на рабочей области.

При визуализации применяются перечисленные ниже ограничения.

Ограничение ресурсов:

РесурсРазрешенное числоОбщая память
Vertex buffers 4096256 МБ
Index buffers 4096128 МБ
Programs 409616 МБ
Textures 4096128 МБ
Cube textures 4096256 МБ

Ограничения AGAL: 200 кодов операций на программу.

Ограничение вызова методов рисования: 32 768 вызовов метода drawTriangles() на каждый вызов present().

К текстурам применяются перечисленные ниже ограничения.

Ограничения текстур для 32-разрядной версии AIR:

ТекстураМаксимальный размерОбщая память графического процессора
Обычная текстура (ниже базового расширенного профиля) 2048 x 2048512 МБ
Обычная текстура (базовый расширенный профиль и профиль более высокого уровня) 4096 x 4096512 МБ
Прямоугольная текстура (ниже базового расширенного профиля) 2048 x 2048512 МБ
Прямоугольная текстура (базовый расширенный профиль и профиль более высокого уровня) 4096 x 4096512 МБ
Кубическая текстура 1024 x 1024256 МБ

Ограничения текстур для 64-разрядной версии AIR (настольный ПК):

ТекстураМаксимальный размерОбщая память графического процессора
Обычная текстура (ниже базового расширенного профиля) 2048 x 2048512 МБ
Обычная текстура (от базового расширенного профиля до стандартного) 4096 x 4096512 МБ
Обычная текстура (расширенный стандартный профиль и профиль более высокого уровня) 4096 x 40962048 МБ
Прямоугольная текстура (ниже базового расширенного профиля) 2048 x 2048512 МБ
Прямоугольная текстура (от базового расширенного профиля до стандартного) 4096 x 4096512 МБ
Прямоугольная текстура (стандартный расширенный профиль и профиль более высокого уровня) 4096 x 40962048 МБ
Кубическая текстура 1024 x 1024256 МБ

512 MБ — это абсолютный предел для текстур, включая память текстур, необходимую для множественных отображений. Однако для граней кубической текстуры, ограничение памяти составляет 256 МБ.

Нельзя создавать объекты Context3D с помощью конструктора Context3D. Он создается и становится доступным в качестве свойства экземпляра Stage3D. Класс Context3D может использоваться в Flash Player и в AIR на компьютерах и мобильных устройствах.

Посмотреть примеры

Связанные элементы API



Общедоступные свойства
 СвойствоОпределено
  backBufferHeight : int
[только для чтения] Определяет высоту заднего буфера, которая может быть изменена с помощью успешного вызова метода configureBackBuffer().
Context3D
  backBufferWidth : int
[только для чтения] Определяет ширину заднего буфера, которая может быть изменена с помощью успешного вызова метода configureBackBuffer().
Context3D
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  driverInfo : String
[только для чтения] Тип драйвера графической библиотеки, используемой этим контекстом визуализации.
Context3D
  enableErrorChecking : Boolean
Указывает, передается ли приложению отчет об ошибках, обнаруженных программой визуализации.
Context3D
  maxBackBufferHeight : int
Определяет максимальную высоту заднего буфера.
Context3D
  maxBackBufferWidth : int
Определяет максимальную ширину заднего буфера.
Context3D
  profile : String
[только для чтения] Профиль поддержки функций, используемый данным объектом Context3D.
Context3D
  supportsVideoTexture : Boolean
[статические] [только для чтения] Определяет, поддерживает ли эффект Context3D видеотекстуру.
Context3D
  totalGPUMemory : Number
[только для чтения] Возвращает общую память графического процессора, выделенную структурой данных Stage3D приложения. Когда ресурсный объект графического процессора создан, использованная память хранится в Context3D.
Context3D
Общедоступные методы
 МетодОпределено
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии.
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
Очищает буферы цвета, глубины и трафарета, связанные с данным объектом Context3D, и заполняет их указанными значениями.
Context3D
  
configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void
Задает размеры области просмотра и другие атрибуты буфера визуализации.
Context3D
  
createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture
Создается объект CubeTexture.
Context3D
  
createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D
Создается объект IndexBuffer3D.
Context3D
  
Создается объект Program3D.
Context3D
  
createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture
Создает объект Rectangle Texture.
Context3D
  
createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture
Создается объект Texture.
Context3D
  
createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Создается объект VertexBuffer3D.
Context3D
  
    createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D
Создается объект VertexBuffer3D для данных экземпляров.
Context3D
  
Создает объект VideoTexture.
Context3D
 Inherited
Посылает событие в поток событий.
EventDispatcher
  
dispose(recreate:Boolean = true):void
Освобождает все ресурсы и внутреннее хранилище, связанные с данным объектом Context3D.
Context3D
  
    drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void
Отрисовка текущего буфера визуализации в растровом изображении.
Context3D
  
drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void
Указанные треугольники визуализируются с использованием текущих буферов и состояния данного объекта Context3D.
Context3D
  
    drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void
Указанные экземпляры треугольников визуализируются с использованием текущих буферов и состояния данного объекта Context3D.
Context3D
 Inherited
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события.
EventDispatcher
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
  
Отображает задний буфер визуализации.
Context3D
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Удаляет прослушиватель из объекта EventDispatcher.
EventDispatcher
  
setBlendFactors(sourceFactor:String, destinationFactor:String):void
Указывает коэффициенты, используемые для наложения цвета вывода операции рисования на существующий цвет.
Context3D
  
setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void
Устанавливает маску, используемую при записи цветов в буфер визуализации.
Context3D
  
setCulling(triangleFaceToCull:String):void
Задает режим отбора треугольников.
Context3D
  
setDepthTest(depthMask:Boolean, passCompareMode:String):void
Задает тип сравнения, используемый для тестирования глубины.
Context3D
  
    setFillMode(fillMode:String):void
Задает режим заливки, используемый для визуализации.
Context3D
  
Задает вершинные и фрагментные шейдерные программы для использования в ходе последующей визуализации.
Context3D
  
setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void
Задает константы для использования шейдерными программами с применением параметров, хранящихся в объекте ByteArray.
Context3D
  
setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void
Задает константы для использования шейдерными программами с применением значений, хранящихся в объекте Matrix3D.
Context3D
  
setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void
Задает входные данные констант для шейдерных программ.
Context3D
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
  
Задает задний буфер визуализации в качестве цели визуализации.
Context3D
  
setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void
Задает указанную текстуру в качестве цели визуализации.
Context3D
  
setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void
Ручная перезапись состояния образца текстуры.
Context3D
  
Задает прямоугольник вырезания, который является типом маски рисования.
Context3D
  
setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void
Задает режим трафаретов и операцию.
Context3D
  
setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void
Задает значение сравнения трафаретов, используемое для проверок трафаретов.
Context3D
  
Задает текстуру, которая будет использоваться в качестве регистра входной текстуры фрагментной программы.
Context3D
  
setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void
Указывает, какие компоненты данных вершин соответствуют одному вводу данных в шейдерную вершинную программу.
Context3D
 Inherited
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
 Inherited
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником.
EventDispatcher
События
 Событие Сводка Определено
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным.EventDispatcher
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным.EventDispatcher
Сведения о свойстве

backBufferHeight

свойство
backBufferHeight:int  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 15, AIR 15

Определяет высоту заднего буфера, которая может быть изменена с помощью успешного вызова метода configureBackBuffer(). Высота может изменяться при изменении коэффициента масштабирования браузера, если в последнем успешном вызове метода configureBackBuffer() для wantsBestResolutionOnBrowserZoom установлено значение true. Изменение высоты можно определить, зарегистрировав прослушиватель событий для изменения масштаба браузера.



Реализация
    public function get backBufferHeight():int

Связанные элементы API

backBufferWidth

свойство 
backBufferWidth:int  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 15, AIR 15

Определяет ширину заднего буфера, которая может быть изменена с помощью успешного вызова метода configureBackBuffer(). Ширина может изменяться при изменении коэффициента масштабирования браузера, если в последнем успешном вызове метода configureBackBuffer() для wantsBestResolutionOnBrowserZoom установлено значение true. Изменение ширины можно определить, зарегистрировав прослушиватель событий для изменения масштаба браузера.



Реализация
    public function get backBufferWidth():int

Связанные элементы API

driverInfo

свойство 
driverInfo:String  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Тип драйвера графической библиотеки, используемой этим контекстом визуализации. Показывает, выполняется ли визуализации с использованием программного обеспечения, драйвера DirectX или драйвера OpenGL. Также показывает, не произошел ли сбой при аппаратной визуализации. При сбое аппаратной визуализации Flash Player запускает программную визуализацию для объекта Stage3D, а объект driverInfo содержит одно из следующих значений:

  • "Software Hw_disabled=userDisabled". В настройках Adobe Flash Player не установлен флажок «Включить аппаратное ускорение».
  • "Software Hw_disabled=oldDriver". Существуют известные проблемы с драйвером графики аппаратных средств. Эту проблему можно решить обновлением графического драйвера.
  • "Software Hw_disabled=unavailable". Известные проблемы с драйвером графики аппаратных средств или сбой инициализации графического адаптера.
  • "Software Hw_disabled=explicit". Содержимое явно запросило программную визуализацию с помощью события requestContext3D.
  • "Software Hw_disabled=domainMemory" — в содержимом используется параметр domainMemory, для которого требуется лицензия при использовании с аппаратной визуализацией Stage3D. Перейдите по адресу adobe.com/go/fpl_ru.



Реализация
    public function get driverInfo():String

enableErrorChecking

свойство 
enableErrorChecking:Boolean

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Указывает, передается ли приложению отчет об ошибках, обнаруженных программой визуализации.

Когда enableErrorChecking имеет значение true, методы clear() и drawTriangles() выполняются синхронно и могут выдать ошибки. Когда enableErrorChecking имеет значение false (по умолчанию), методы clear() и drawTriangles() выполняются асинхронно, сообщения об ошибках не выдаются. Активация проверки на наличие ошибок снижает производительность визуализации. Проверку ошибок следует включать только при отладке.



Реализация
    public function get enableErrorChecking():Boolean
    public function set enableErrorChecking(value:Boolean):void

Связанные элементы API

maxBackBufferHeight

свойство 
maxBackBufferHeight:int

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 15, AIR 15

Определяет максимальную высоту заднего буфера. Изначальное значение соответствует системному ограничению платформы. Свойству можно задать значение, меньшее или равное системному ограничению, но не превышающее его. Свойству можно задать значение, большее или равное минимальному ограничению, но не меньше его. Минимальное ограничение является постоянным значением, равным 32, когда задний буфер не настроен. Минимальное ограничение соответствует значению параметра высоты в последнем успешном вызове метода configureBackBuffer() после настройки заднего буфера.



Реализация
    public function get maxBackBufferHeight():int
    public function set maxBackBufferHeight(value:int):void

maxBackBufferWidth

свойство 
maxBackBufferWidth:int

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 15, AIR 15

Определяет максимальную ширину заднего буфера. Изначальное значение соответствует системному ограничению платформы. Свойству можно задать значение, меньшее или равное системному ограничению, но не превышающее его. Свойству можно задать значение, большее или равное минимальному ограничению, но не меньше его. Минимальное ограничение является постоянным значением, равным 32, когда задний буфер не настроен. Минимальное ограничение соответствует значению параметра ширины в последнем успешном вызове метода configureBackBuffer() после настройки заднего буфера.



Реализация
    public function get maxBackBufferWidth():int
    public function set maxBackBufferWidth(value:int):void

profile

свойство 
profile:String  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 12, AIR 4

Профиль поддержки функций, используемый данным объектом Context3D.



Реализация
    public function get profile():String

Связанные элементы API

supportsVideoTexture

свойство 
supportsVideoTexture:Boolean  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 17.0, Flash Player 18.0

Определяет, поддерживает ли эффект Context3D видеотекстуру.



Реализация
    public static function get supportsVideoTexture():Boolean

totalGPUMemory

свойство 
totalGPUMemory:Number  [только для чтения]

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 21, AIR 21

Возвращает общую память графического процессора, выделенную структурой данных Stage3D приложения.

Когда ресурсный объект графического процессора создан, использованная память хранится в Context3D. Эта память включает в себя буферы индексов, буферы вершин, текстуры (за исключением текстур видео) и программы, созданные при помощи этого объекта Context3D.

API-интерфейсtotalGPUMemory возвращает пользователю общий объем памяти, использованной вышеперечисленными ресурсами. Возвращенное значение по умолчанию равно 0. Общий объем возвращенной памяти графического процессора измеряется в байтах. Информация предоставляется только в режиме direct на мобильных устройствах и в режимах direct и GPU на настольных компьютерах (на настольных компьютерах при выборе режима <renderMode>gpu</renderMode> будет автоматически использоваться режим <renderMode>direct</renderMode>).

Этот API-интерфейс можно использовать, когда SWF имеет версию 32 или более позднюю.



Реализация
    public function get totalGPUMemory():Number
Сведения о методе

clear

()метод
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

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Очищает буферы цвета, глубины и трафарета, связанные с данным объектом Context3D, и заполняет их указанными значениями.

Задайте параметр mask, чтобы указать, какие буферы требуется очистить. Используйте константы, определенные в классе Context3DClearMask, чтобы установить параметр mask. Используйте побитовый оператор OR (ИЛИ), «|», для добавления нескольких буферов в маску (или используйте Context3DClearMask.ALL). При визуализации в заднем буфере метод configureBackBuffer() должен вызываться перед любыми вызовами метода clear().

Примечание. Если для параметра задается значение за пределами разрешенного диапазона, числовые значения параметра ограничиваются до диапазона от 0 до 1 (без уведомления). Подобным образом, если значение stencil больше 0xff, задается это значение.

Параметры

red:Number (default = 0.0) — красный компонент цвета, с использованием которого требуется очистить буфер цвета, в диапазоне от 0 до 1.
 
green:Number (default = 0.0) — зеленый компонент цвета, с использованием которого требуется очистить буфер цвета, в диапазоне от 0 до 1.
 
blue:Number (default = 0.0) — синий компонент цвета, с использованием которого требуется очистить буфер цвета, в диапазоне от 0 до 1.
 
alpha:Number (default = 1.0) — альфа-компонент цвета, с использованием которого требуется очистить буфер цвета, в диапазоне от 0 до 1. Альфа-компонент не используется для наложения. Он записывается напрямую в буфер альфа.
 
depth:Number (default = 1.0) — значение, с использованием которого требуется очистить буфер глубины, в диапазоне от 0 до 1.
 
stencil:uint (default = 0) — 8-битовое значение, с использованием которого требуется очистить буфер трафаретов в диапазоне от 0x00 до 0xff.
 
mask:uint (default = 0xffffffff) — указывает, какой буфер очистить.


Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.

Связанные элементы API

configureBackBuffer

()метод 
public function configureBackBuffer(width:int, height:int, antiAlias:int, enableDepthAndStencil:Boolean = true, wantsBestResolution:Boolean = false, wantsBestResolutionOnBrowserZoom:Boolean = false):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает размеры области просмотра и другие атрибуты буфера визуализации.

Визуализация выполняется с двойной буферизацией. Задний буфер переключается на видимый передний буфер, когда вызывается метод present(). Минимальный размер буфера составляет 32x32 пикселя. Максимальный размер буфера невидимых поверхностей ограничен емкостью устройства, и пользователь может задать его с помощью свойств maxBackBufferWidth и maxBackBufferHeight. Настройка буфера является трудоемкой операцией. Старайтесь не изменять атрибуты и размер буфера для обычных операций визуализации.

Параметры

width:int — ширина буфера в пикселях.
 
height:int — высота буфера в пикселях.
 
antiAlias:int — целое значение, указывающее запрошенное качество сглаживания. Значение сопоставляется с числом подвыборок, используемых при сглаживании. Для использования большего числа подвыборок требуется выполнять вычисления, хотя относительное влияние на производительность зависит от конкретных аппаратных средств визуализации. Тип сглаживания и выполнение самого сглаживания зависят от устройства и режима визуализации. Сглаживание не поддерживается программным контекстом визуализации.
0Без сглаживания.
2Минимальное сглаживание.
4Сглаживание высокого качества.
16Сглаживание очень высокого качества.
 
enableDepthAndStencil:Boolean (default = true)false указывает, что буфер глубины или трафаретов не создан, true создает буфер глубины и трафаретов. Для приложения AIR 3.2 или более поздней версии, скомпилированного с использованием SWF 15 или более поздней версии: если значение элемента renderMode в файле дескриптора приложения равно direct, то значение элемента depthAndStencil в файле дескриптора приложения должно совпадать со значением данного аргумента. По умолчанию значение элемента depthAndStencil равно false.
 
wantsBestResolution:Boolean (default = false)true обозначает, что в случае, если устройство поддерживает экраны HiDPI, оно попытается выделить более крупный задний буфер, для которого указаны параметры ширины и высоты. Так как это значение добавляет больше пикселей и может изменить результат операций шейдера, оно выключено по умолчанию. Используйте Stage.contentsScaleFactor, чтобы определить, насколько был расширен встроенный задний буфер.
 
wantsBestResolutionOnBrowserZoom:Boolean (default = false) — Значение true указывает, что размер заднего буфера должен увеличиваться пропорционально увеличению коэффициенту масштабирования браузера. Это значение не изменяется при изменении масштаба браузера. По умолчанию параметр имеет значение false. Воспользуйтесь свойствами maxBackBufferWidth и maxBackBufferHeight, чтобы ограничить увеличение размера заднего буфера. Свойства backBufferWidth и backBufferHeight помогут определить текущий размер заднего буфера.


Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Неверный размер ввода: ширины или высоты меньше, чем минимально допустимого размера буфера невидимых поверхностей или больше его максимально допустимого размера.
 
Error — 3709: значение флага depthAndStencil в дескрипторе приложения должно совпадать с булевым значением параметра enableDepthAndStencil, переданным в метод configureBackBuffer() объекта Context3D.

createCubeTexture

()метод 
public function createCubeTexture(size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:CubeTexture

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Создается объект CubeTexture.

Используйте объект CubeTexture для загрузки растровых изображений кубических текстур в контекст визуализации и для ссылки на кубическую текстуру во время визуализации. Кубическая текстура состоит из шести равных по размеру квадратных текстур, упорядоченных в кубической топологии; они используются для описания окрестных наложений.

Нельзя создавать объекты CubeTexture с использованием конструктора CubeTexture; для этого используется этот метод. После создания объекта CubeTexture загрузите данные растровых изображений текстуры с использованием методов uploadFromBitmapData(), uploadFromByteArray() или uploadCompressedTextureFromByteArray() объекта CubeTexture.

Параметры

size:int — Длина краев текстуры в текстурных пикселях.
 
format:String — Формат текстурного пикселя списка перечисления Context3DTextureFormat.

Благодаря сжатию текстур можно хранить изображения текстур в сжатом формате непосредственно в графическом процессоре, тем самым экономя память графического процессора и пропускную способность памяти. Как правило, сжатые текстуры сжимаются в автономном режиме и загружаются в графический процессор в сжатой форме с помощью метода Texture.uploadCompressedTextureFromByteArray. В средах Flash Player 11.4 и AIR 3.4 на настольных платформах появилась поддержка сжатия текстур во время выполнения, что может быть удобно в некоторых случаях, например при визуализации динамических текстур из векторной графики. Обратите внимание, что эта функция в настоящее время недоступна на мобильных платформах и при попытке её использования будет возникать исключение ArgumentError (Несоответствие формата текстуры). Для использования сжатия текстур во время выполнения необходимо выполнить следующее. 1. Создайте объект текстуры. Для этого вызовите метод Context3D.createCubeTexture(), передав flash.display3D.Context3DTextureFormat.COMPRESSED или flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA в качестве параметра формата. 2. Используя экземпляр flash.display3D.textures.Texture, возвращенный методом createCubeTexture(), вызовите либо flash.display3D.textures.CubeTexture.uploadFromBitmapData(), либо flash.display3D.textures.CubeTexture.uploadFromByteArray() для одновременной загрузки и сжатия текстуры.

 
optimizeForRenderToTexture:Boolean — Задайте значение true, если текстура, скорее всего, будет использоваться в качестве цели визуализации.
 
streamingLevels:int (default = 0) — Уровень множественных отображений, который должен быть загружен перед визуализацией изображения. Потоковая передача текстур дает возможность загрузить и отобразить вначале наименьшие уровни, а затем, по мере загрузки текстур, отображать все более качественные изображения. Конечные пользователи могут просматривать в приложении изображения более низкого качества, пока загружаются более качественные изображения.

По умолчанию значение streamingLevels — 0, то есть перед визуализацией изображения должно загрузиться изображение самого высокого качества во множественном отображении. Этот параметр был добавлен в версиях Flash Player 11.3 и AIR 3.3. Его значение по умолчанию соответствует поведению предыдущих версий Flash Player и AIR.

Установите для streamingLevels значение от 1 до количества изображений во множественном отображении для включения потоковой передачи текстуры. Например, при наличии множественного отображения, включающего главное изображение самого высокого качества размером 64x64 пикселей. Изображения более низкого качества во множественном отображении могут иметь размер 32x32, 16x16, 8x8, 4x4, 2x2 и 1x1 пикселей (всего 7 изображений или 7 уровней). Уровень 0 — это изображение самого высокого качества. Максимальным значением этого свойства является log2(min(ширина,высота)). Поэтому для главного изображения размером 64x64 пикселя максимальное значение streamingLevels равно 7. Установите для этого свойства значение 3 для визуализации изображения после загрузки изображения 8x8 пикселей.

Примечание. Установка для этого свойства значения больше 0 может влиять на интенсивность использования памяти и производительность.

Возвращает
flash.display3D.textures:CubeTexture

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много объектов Texture или превышен объем выделенной для текстур памяти.
 
ArgumentError — Текстура глубины не реализована: если предпринимается попытка создать текстуру глубины.
 
ArgumentError — Размер текстуры равен нулю: если параметр size не больше нуля.
 
ArgumentError — Текстура не равна степени двойки: если параметр size не равен степени двойки.
 
ArgumentError — Слишком большая текстура: если параметр size больше 1024.
 
Error — Не удалось создать текстуру: если контексту визуализации не удалось создать объект CubeTexture (но информация о причине недоступна).
 
ArgumentError — Недопустимый потоковый уровень: если значение streamingLevels больше или равно log2(размер).

Связанные элементы API

createIndexBuffer

()метод 
public function createIndexBuffer(numIndices:int, bufferUsage:String = "staticDraw"):IndexBuffer3D

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Создается объект IndexBuffer3D.

Используйте объект IndexBuffer3D для загрузки набора индексов треугольника в контекст визуализации и для создания ссылки на этот набор индексов для визуализации. Каждый индекс в буфере индексов ссылается на соответствующую вершину в буфере вершин. Каждый набор из трех индексов определяет треугольник. Передайте объект IndexBuffer3D в метод drawTriangles() для визуализации одного или нескольких треугольников из буфера индексов.

Нельзя создавать объекты IndexBuffer3D с использованием конструктора классов IndexBuffer3D, для этого используется этот метод. После создания объекта IndexBuffer3D загрузите индексы с использованием методов uploadFromVector() или uploadFromByteArray() объекта IndexBuffer3D.

Параметры

numIndices:int — количество вершин, которое будет храниться в буфере.
 
bufferUsage:String (default = "staticDraw") — прогнозируемая интенсивность использования буфера. Используйте одну из констант, определенных в Context3DBufferUsage. Драйвер оборудования может, при правильной настройке, провести соответствующую оптимизацию. Этот параметр доступен только в версиях позднее Flash 12/AIR 4.

Возвращает
IndexBuffer3D

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много буферов индексов или превышен объем выделенной для буферов индексов памяти.
 
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.
 
ArgumentError — Слишком большой буфер: когда значение numIndices больше или равно 0xf0000.

Связанные элементы API

createProgram

()метод 
public function createProgram():Program3D

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Создается объект Program3D.

Используйте объект Program3D для загрузки шейдерных программ в контекст визуализации и для создания ссылки на загруженные программы во время визуализации. В объекте Program3D хранятся две программы: вершинная программа и фрагментная программа (которая также называется пиксельной программой). Программы пишутся на бинарном языке сборки шейдера.

Нельзя создавать объекты Program3D с использованием конструктора Program3D; для этого используется этот метод. После создания объекта Program3D загрузите программы с использованием метода upload() объекта Program3D.

Возвращает
Program3D

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Общее число программ превышает 4096 или общий объем памяти превышает 16 МБ (используйте метод dispose для освобождения ресурсов объекта Program3D).

Связанные элементы API


Пример  ( Использование этого примера )

Этот пример демонстрирует создание, загрузку и активацию пары вершин и пиксельных программ для контекста визуализации. Обратите внимание, что объект renderContext является экземпляром класса Context3D. Программы в примере записаны на языке Adobe Graphics Assembly Language (AGAL).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

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

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

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

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

createRectangleTexture

()метод 
public function createRectangleTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean):flash.display3D.textures:RectangleTexture

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.8, AIR 3.8

Создает объект Rectangle Texture.

Используйте объект RectangleTexture для загрузки растровых изображений текстур в контекст визуализации и для ссылки на текстуру во время визуализации.

Нельзя создавать объекты RectangleTexture с использованием конструктора RectangleTexture; для этого используется данный метод. После создания объекта RectangleTexture загрузите данные растровых изображений текстуры с использованием методов uploadFromBitmapData() или uploadFromByteArray() объекта Texture.

Обратите внимание, что 32-разрядные целочисленные текстуры хранятся в упакованном формате BGRA для соответствия формату BitmapData среды Flash. В текстурах с плавающей запятой используется общепринятый RGBA.

Прямоугольные текстуры отличаются от обычных двумерных текстур тем, что их ширина и высота могут не равняться степени двойки. Кроме того, они не содержат множественные отображения. Наиболее полезно их использовать при визуализации в текстуру. Если прямоугольная текстура используется с образцом, в котором применяется фильтрация множественного отображения или повторяющееся завертывание, произойдет сбой вызова drawTriangles. Прямоугольная текстура также не допускает потоковую передачу. Прямоугольные текстуры поддерживают только форматы текстур BGRA, BGR_PACKED, BGRA_PACKED. Форматы сжатых текстур не поддерживаются прямоугольными текстурами.

Параметры

width:int — Ширина текстуры в текстурных пикселях.
 
height:int — Высота текстуры в текстурных пикселях.
 
format:String — Формат текстурного пикселя списка перечисления Context3DTextureFormat.
 
optimizeForRenderToTexture:Boolean — Задайте значение true, если текстура, скорее всего, будет использоваться в качестве цели визуализации.

Возвращает
flash.display3D.textures:RectangleTexture

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много объектов Texture или превышен объем выделенной для текстур памяти.
 
ArgumentError — Размер текстуры равен нулю: если оба параметра width и height не больше нуля.
 
ArgumentError — Слишком большая текстура: если любой из параметров width или height больше 2048.
 
Error — Не удалось создать текстуру: если контексту визуализации не удалось создать объект Texture (но информация о причине недоступна).
 
Error — Требуется базовый профиль или его расширенная версия: если прямоугольная текстура создается с ограниченным базовым профилем.

Связанные элементы API

createTexture

()метод 
public function createTexture(width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int = 0):flash.display3D.textures:Texture

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Создается объект Texture.

Используйте объект Texture для загрузки растровых изображений текстур в контекст визуализации и для ссылки на текстуру во время визуализации.

Нельзя создавать объекты Texture с использованием конструктора Texture. Для этого используется данный метод. После создания объекта Texture загрузите данные растровых изображений текстуры с использованием методов uploadFromBitmapData(), uploadFromByteArray() или uploadCompressedTextureFromByteArray() объекта Texture.

Обратите внимание, что 32-разрядные целочисленные текстуры хранятся в упакованном формате BGRA для соответствия формату BitmapData среды Flash. В текстурах с плавающей запятой используется общепринятый RGBA.

Параметры

width:int — Ширина текстуры в текстурных пикселях.
 
height:int — Высота текстуры в текстурных пикселях.
 
format:String — Формат текстурного пикселя списка перечисления Context3DTextureFormat.

Благодаря сжатию текстур можно хранить изображения текстур в сжатом формате непосредственно в графическом процессоре, тем самым экономя память графического процессора и пропускную способность памяти. Как правило, сжатые текстуры сжимаются в автономном режиме и загружаются в графический процессор в сжатой форме с помощью метода Texture.uploadCompressedTextureFromByteArray. В средах Flash Player 11.4 и AIR 3.4 на настольных платформах появилась поддержка сжатия текстур во время выполнения, что может быть удобно в некоторых случаях, например при визуализации динамических текстур из векторной графики. Обратите внимание, что эта функция в настоящее время недоступна на мобильных платформах и при попытке её использования будет возникать исключение ArgumentError (Несоответствие формата текстуры). Для использования сжатия текстур во время выполнения необходимо выполнить следующее. 1. Создайте объект текстуры. Для этого вызовите метод Context3D.createTexture(), передав flash.display3D.Context3DTextureFormat.COMPRESSED или flash.display3D.Context3DTextureFormat.COMPRESSED_ALPHA в качестве параметра формата. 2. Используя экземпляр flash.display3D.textures.Texture, возвращенный методом createTexture(), вызовите либо flash.display3D.textures.Texture.uploadFromBitmapData(), либо flash.display3D.textures.Texture.uploadFromByteArray() для одновременной загрузки и сжатия текстуры.

 
optimizeForRenderToTexture:Boolean — Задайте значение true, если текстура, скорее всего, будет использоваться в качестве цели визуализации.
 
streamingLevels:int (default = 0) — Уровень множественных отображений, который должен быть загружен перед визуализацией изображения. Потоковая передача текстур дает возможность загрузить и отобразить вначале наименьшие уровни, а затем, по мере загрузки текстур, отображать все более качественные изображения. Конечные пользователи могут просматривать в приложении изображения более низкого качества, пока загружаются более качественные изображения.

По умолчанию значение streamingLevels — 0, то есть перед визуализацией изображения должно загрузиться изображение самого высокого качества во множественном отображении. Этот параметр был добавлен в версиях Flash Player 11.3 и AIR 3.3. Его значение по умолчанию соответствует поведению предыдущих версий Flash Player и AIR.

Установите для streamingLevels значение от 1 до количества изображений во множественном отображении для включения потоковой передачи текстуры. Например, при наличии множественного отображения, включающего главное изображение самого высокого качества размером 64x64 пикселей. Изображения более низкого качества во множественном отображении могут иметь размер 32x32, 16x16, 8x8, 4x4, 2x2 и 1x1 пикселей (всего 7 изображений или 7 уровней). Уровень 0 — это изображение самого высокого качества. Максимальным значением этого свойства является log2(min(ширина,высота)). Поэтому для главного изображения размером 64x64 пикселя максимальное значение streamingLevels равно 7. Установите для этого свойства значение 3 для визуализации изображения после загрузки изображения 8x8 пикселей.

Примечание. Установка для этого свойства значения больше 0 может влиять на интенсивность использования памяти и производительность.

Возвращает
flash.display3D.textures:Texture

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много объектов Texture или превышен объем выделенной для текстур памяти.
 
ArgumentError — Текстура глубины не реализована: если предпринимается попытка создать текстуру глубины.
 
ArgumentError — Размер текстуры равен нулю: если оба параметра width и height не больше нуля.
 
ArgumentError — Текстура не равна степени двойки: если оба параметра width и height не равны степени двойки.
 
ArgumentError — Слишком большая текстура: если любой из параметров width или height больше 2048 для базового и ограниченного базового профиля, или если любой из параметров width и height больше 4096 для базового расширенного профиля или профиля более высокого уровня.
 
Error — Не удалось создать текстуру: если контексту визуализации не удалось создать объект Texture (но информация о причине недоступна).
 
ArgumentError — Недопустимый потоковый уровень: если значение streamingLevels больше или равно log2(min(ширина,высота)).

Связанные элементы API

createVertexBuffer

()метод 
public function createVertexBuffer(numVertices:int, data32PerVertex:int, bufferUsage:String = "staticDraw"):VertexBuffer3D

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Создается объект VertexBuffer3D.

Используйте объект VertexBuffer3D для загрузки набора данных вершин в контекст визуализации. В буфере вершин содержатся данные, необходимые для визуализации каждой точки в геометрии сцены. Атрибуты данных, связанные с каждой вершиной, как правило, включают положение, цвет и координаты текстуры и используются в качестве входных данных для вершинной шейдерной программы. Определите значения данных, соответствующие одному из входных значений вершинной программы, с помощью метода setVertexBufferAt(). Можно указать до шестидесяти четырех 32-разрядных значений для каждой вершины.

Нельзя создавать объекты VertexBuffer3D с использованием конструктора VertexBuffer3D; для этого используется данный метод. После создания объекта IndexBuffer3D загрузите индексы с использованием методов uploadFromVector() или uploadFromByteArray() объекта IndexBuffer3D.

Параметры

numVertices:int — количество вершин, которое будет храниться в буфере. Максимальное количество вершин в отдельном буфере равно 65535.
 
data32PerVertex:int — количество 32-разрядных (4-байтовых) значений данных, связанных с каждой вершиной. Максимальное количество элементов 32-разрядных данных для каждой вершины равно 64 (или 256 байтам). Обратите внимание, что только восемь регистров атрибутов единовременно доступны вершинной шейдерной программе. Используйте метод SetVertextBufferAt() для выбора атрибутов из буфера вершин.
 
bufferUsage:String (default = "staticDraw") — прогнозируемая интенсивность использования буфера. Используйте одну из констант, определенных в Context3DBufferUsage. Драйвер оборудования может, при правильной настройке, провести соответствующую оптимизацию. Этот параметр доступен только в версиях позднее Flash 12/AIR 4.

Возвращает
VertexBuffer3D

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много объектов буферов вершин или превышен объем выделенной для буферов вершин памяти.
 
ArgumentError — Слишком большой буфер: если numVertices больше 0x10000 или data32PerVertex больше 64.
 
ArgumentError — Буфер имеет нулевой размер: если значение numVertices или data32PerVertex равно нулю.
 
ArgumentError — Не удалось создать буфер: если контексту визуализации не удалось создать объект VertexBuffer3D (но дополнительная информация о причине недоступна).
 
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.

Связанные элементы API


Пример  ( Использование этого примера )

Следующий пример демонстрирует создание и загрузку буфера данных вершин. Буфер в примере содержит два типа данных для каждой вершины: положение (в виде координат x, y, z) и цвет (в виде компонентов RGB). После создания буфера метод setVertexBufferAt() вызывается для указания того, что первые три точки данных передаются в вершинную программу в качестве 3 значений с плавающей точкой в va0 и вторые три точки данных передаются в качестве va1. Вершинная программа поддерживает до 8 определенных подобным образом входных значений, которые также называются регистрами атрибутов.
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

()метод 
public function createVertexBufferForInstances(numVertices:int, data32PerVertex:int, instancesPerElement:int, bufferUsage:String = "staticDraw"):VertexBuffer3D

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 20.0

Создается объект VertexBuffer3D для данных экземпляров.

Используйте объект VertexBuffer3D для загрузки набора данных экземпляров в контекст визуализации. В буфере вершин содержатся данные, необходимые для визуализации каждого экземпляра в геометрии сцены. Буферы вершин с данными экземпляров предоставляют атрибуты, которые являются общими для всех вершин экземпляра. и используются в качестве входных данных для вершинной шейдерной программы. Определите значения данных, соответствующие одному из входных значений вершинной программы, с помощью метода setVertexBufferAt(). Можно указать до шестидесяти четырех 32-разрядных значений для каждого элемента буфера вершин.

Нельзя создавать объекты VertexBuffer3D с использованием конструктора VertexBuffer3D; для этого используется данный метод. После создания объекта IndexBuffer3D загрузите индексы с использованием методов uploadFromVector() или uploadFromByteArray() объекта IndexBuffer3D.

Параметры

numVertices:int — количество элементов, которое будет храниться в буфере. Максимальное количество элементов в отдельном буфере равно 65535.
 
data32PerVertex:int — количество 32-разрядных (4-байтовых) значений данных, связанных с каждым элементом. Максимальное количество элементов 32-разрядных данных для каждой вершины равно 64 (или 256 байтам).
 
instancesPerElement:int — количество экземпляров, которое будет использовать один элемент буфера вершин.
 
bufferUsage:String (default = "staticDraw") — прогнозируемая интенсивность использования буфера. Используйте одну из констант, определенных в Context3DBufferUsage. Драйвер оборудования может, при правильной настройке, провести соответствующую оптимизацию. Этот параметр доступен только в версиях позднее Flash 12/AIR 4.

Возвращает
VertexBuffer3D

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много объектов буферов вершин или превышен объем выделенной для буферов вершин памяти.
 
ArgumentError — Слишком большой буфер: если numVertices больше 0x10000 или data32PerVertex больше 64.
 
ArgumentError — Буфер имеет нулевой размер: если значение numVertices или data32PerVertex равно нулю.
 
ArgumentError — Не удалось создать буфер: если контексту визуализации не удалось создать объект VertexBuffer3D (но дополнительная информация о причине недоступна).
 
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.
 
Error — Требуется стандартный расширенный профиль или более высокого уровня: если этот метод вызывается, когда запрашивается профиль, уровень которого ниже стандартного расширенного.
 
Error — Недопустимое количество экземпляров для элемента: если instancesPerElement не больше нуля.

Связанные элементы API

createVideoTexture

()метод 
public function createVideoTexture():flash.display3D.textures:VideoTexture

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 17.0, Flash Player 18.0

Создает объект VideoTexture.

Используйте объект VideoTexture для получения видеокадров в качестве текстуры из объекта NetStream или Camera и для загрузки отдельных видеокадров в контекст визуализации.

Невозможно создать объект VideoTexture с помощью конструктора VideoTexture. Используйте этот метод. После создания объекта VideoTexture, привяжите объект NetStream или Camera для получения видеокадров с помощью метода attachNetStream() или attachCamera().

Обратите внимание этот метод возвращает значение «null», если система не поддерживает эту функцию.

Объект VideoTexture не содержит множественные отображения. Если объект VideoTexture используется с образцом, в котором применяется фильтрация множественного отображения или повторяющееся завертывание, произойдет сбой вызова drawTriangles. Объект VideoTexture можно обрабатывать шейдерами как текстуру BGRA. Создать экземпляр объекта VideoTexture не удастся, если эффект Context3D был запрошен в режиме визуализации с помощью ПО.

Для каждого экземпляра Context3D доступно не более четырех объектов VideoTexture. На мобильных устройствах фактическое количество поддерживаемых объектов VideoTexture может быть меньше четырех из-за ограничений платформы.

Возвращает
flash.display3D.textures:VideoTexture

Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Превышен лимит ресурсов: если создано слишком много объектов Texture или превышен объем выделенной для текстур памяти.
 
Error — Не удалось создать текстуру: контексту визуализации не удалось создать объект Texture (но информация о причине недоступна).

dispose

()метод 
public function dispose(recreate:Boolean = true):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Освобождает все ресурсы и внутреннее хранилище, связанные с данным объектом Context3D.

Все буферы индексов, буферы вершин, текстуры и программы, созданные посредством этого объекта Context3D, очищаются аналогично вызову для каждого из этих элементов метода dispose(). Кроме того, очищается сам объект Context3D, освобождая все временные буферы и предшествующий буфер. Вызов методов configureBackBuffer(), clear(), drawTriangles(), createCubeTexture(), createTexture(), createProgram(), createIndexBuffer(), createVertexBuffer() или drawToBitmapData() после вызова метода dispose() приведет к созданию исключения.

Внимание! При вызове метода dispose() для объекта Context3D, когда еще существует прослушиватель события Events.CONTEXT3D_CREATE для связанного объекта Stage3D, симулируется потеря устройства. В результате создается новый объект Context3D для Stage3D и повторно отправляется событие Events.CONTEXT3D_CREATE. Если такое поведение нежелательно, следует удалить прослушиватель события у объекта Stage3D перед вызовом dispose(), либо задать параметру recreate значение false.

Параметры

recreate:Boolean (default = true)

Связанные элементы API

    drawToBitmapData

()метод 
public function drawToBitmapData(destination:BitmapData, srcRect:Rectangle = null, destPoint:Point = null):void

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 3

Отрисовка текущего буфера визуализации в растровом изображении.

Текущее содержимое заднего буфера визуализации копируется в объект BitmapData. Потенциально это очень медленная операция, выполнение которой может занять около секунды. Используйте с осторожностью. Обратите внимание, что эта функция копирует не передний буфер визуализации (отображаемый в рабочей области), а тот, в котором выполняется отрисовка. Чтобы захватить визуализированное изображение в том виде, в котором оно отображается в рабочей области, вызовите метод drawToBitmapData() непосредственно перед вызовом метода present().

Начиная с AIR 25 в API-интерфейс добавлено два новых параметра drawToBitmapData(). Этот API-интерфейс теперь принимает три параметра. Во-первых, это существующий параметр destination:BitmapData. Во-вторых, это параметр srcRect:Rectangle, который является целевым прямоугольником в рабочей области stage3D. В-третьих, это параметр destPoint:Point, который является координатой целевого растрового изображения. Параметры srcRect и destPoint не являются обязательными, по умолчанию для них используются значения (0,0,bitmapWidth,bitmapHeight) и (0,0), соответственно.

При отрисовке изображение не масштабируется по размеру растрового изображения. Вместо этого содержимое обрезается по размеру целевого растрового изображения.

В объектах Flash BitmapData хранятся цвета, которые уже умножены на альфа-компонент. Например, если компонентами «чистых» цветов RGB являются (0x0A, 0x12, 0xBB), а альфа-компонентом является 0x7F (0,5), пиксель сохраняется в объекте BitmapData со следующими значениями rgba: (0x05, 0x09, 0x5D, 0x7F). Можно настроить коэффициенты наложения, чтобы цвета, визуализированные в буфере, умножались на значение альфа, или можно выполнить эту операцию во фрагментном шейдере. Контекст визуализации не проверяет, хранятся ли данные в предварительно умноженном формате.

Параметры

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


Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.
 
Error — 3802: если параметр destPoint:Point или srcRect:Rectangle находится за пределами связки координат растрового изображения/рабочей области 3D или если в качестве ввода переданы нечисловые значения.

Пример  ( Использование этого примера )

В следующем примере выполняется визуализация двух треугольников в обычный буфер визуализации и объект BitmapData. Объект BitmapData отображается с использованием объекта Bitmap, добавленного в обычный список отображения. Фильтр тени применен к визуализации растрового изображения.
package
{
    import com.adobe.utils.AGALMiniAssembler;
    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.Stage3D;
    import flash.display3D.Context3D;
    import flash.display3D.Context3DProgramType;
    import flash.display3D.Context3DRenderMode;
    import flash.display3D.Context3DVertexBufferFormat;
    import flash.display3D.IndexBuffer3D;
    import flash.display3D.Program3D;
    import flash.display3D.VertexBuffer3D;
    import flash.events.Event;
    import flash.filters.DropShadowFilter;
    
    public class Context3D_drawToBitmapData extends Sprite
    {
        public const viewWidth:Number = 320;
        public const viewHeight:Number = 200;
        
        private var bitmap:Bitmap;
        private var stage3D:Stage3D;
        private var renderContext:Context3D;
        private var indexList:IndexBuffer3D;
        private var vertexes:VertexBuffer3D;
        
        private const VERTEX_SHADER:String =
            "mov op, va0    \n" +    //copy position to output 
            "mov v0, va1"; //copy color to varying variable v0
        
        private const FRAGMENT_SHADER:String = 
            "mov oc, v0"; //Set the output color to the value interpolated from the three triangle vertices 

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

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

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

drawTriangles

()метод 
public function drawTriangles(indexBuffer:IndexBuffer3D, firstIndex:int = 0, numTriangles:int = -1):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Указанные треугольники визуализируются с использованием текущих буферов и состояния данного объекта Context3D.

Для каждого треугольника вершины обрабатываются программой вершинного шейдера, а поверхность — программой пиксельного шейдера. Цвет вывода пиксельной программы для каждого пикселя отрисовывается на целевом объекте визуализации в зависимости от операций трафарета, теста глубины, исходного и целевого альфа-значения, а также текущего режима наложения. Целью визуализации может быть главный буфер визуализации или текстура.

Если включен отбор (с помощью метода setCulling()), то треугольники могут убираться из сцены до запуска пиксельной программы. Если включен трафарет и тестирование глубины, то пиксели вывода из пиксельного шейдера могут отбрасываться без обновления целевого объекта визуализации. Кроме того, пиксельный шейдер может принять решение не выводить цвет для пикселя.

Визуализированные треугольники не отображаются в области просмотра, пока не вызван метод present(). После каждого вызова метода present() необходимо вызвать метод clear() перед первым вызовом drawTriangles(), в противном случае произойдет сбой визуализации.

Когда enableErrorChecking имеет значение false, эта функция возвращает ответ немедленно, не ожидая результатов, и выдает исключение, только если экземпляр Context3D утилизирован или выполнено слишком много вызовов методов рисования. Если контекст визуализации недействителен, визуализация завершается ошибкой без уведомления. Когда свойство enableErrorChecking имеет значение true, эта функция возвращает ответ после отрисовки треугольников и выдает исключение в случае ошибок отрисовки или недопустимого состояния контекста.

Параметры

indexBuffer:IndexBuffer3D — набор индексов вершин, ссылающихся на вершины, которые следует визуализировать.
 
firstIndex:int (default = 0) — индекс первой вершины для визуализации. По умолчанию 0.
 
numTriangles:int (default = -1) — Число треугольников для визуализации. Каждый треугольник использует три индекса. Передайте -1 для визуализации всех треугольников в буфере индексов. По умолчанию -1.


Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Если выполняется слишком много вызовов этого метода между вызовами метода present(). Максимальное количество вызовов — 32 768.

Следующие ошибки возникают, только когда для свойства enableErrorChecking установлено значение true:

 
Error — Необходимо выполнить очистку перед отрисовкой: если буфер не очищался с момента последнего вызова present().
 
Error — Если действительный объект Program3D не задан.
 
Error — Действительный буфер индексов не задан: если объект IndexBuffer3D не задан.
 
Error — Сбой проверки допустимости параметров: когда число треугольников для отрисовки или значение firstIndex превышает допустимые значения.
 
RangeError — Недостаточно индексов в этом буфере: когда в буфере содержится недостаточное число индексов для определения числа треугольников для отрисовки.
 
Error — Образец связан с текстурой, которая также связана с визуализацией: когда целью визуализации является текстура и эта текстура, определена в качестве входных данных текущей фрагментной программы.
 
Error — Образец связан с недопустимой текстурой: недопустимая текстура указана в качестве входных данных для текущей фрагментной программы.
 
Error — Формат образца не соответствует формату текстуры: когда текстура, определенная в качестве входных данных для текущей фрагментной программы, имеет формат, отличный от указанного для регистра образца. Например, двумерная текстура назначена образцу кубической текстуры.
 
Error — Образец связан с неопределенной текстурой: текущая фрагментная программа получает доступ к регистру текстуры, который не задан (с использованием метода setTextureAt()).
 
Error — Для одной и той же текстуры необходимы одинаковые параметры образца: если текстура используется для нескольких регистров образцов, все образцы должны иметь одинаковые параметры. Например, нельзя задавать один образец для фиксации, а другой для оболочки.
 
Error — Текстура задана, но не используется: текстура задана в качестве входных данных шейдера, но при этом не используется.
 
Error — Поток не используется: буфер вершин назначен входным данным атрибутов вершин, но вершинная программа не ссылается на соответствующий регистр.
 
Error — Поток недопустим: объект VertexBuffer3D, назначенный в качестве входных данных вершинной программы, не является допустимым объектом.
 
RangeError — Поток имеет недостаточное количество вершин: в буфере вершин, который поставляет данные для рисования указанных треугольников, недостаточно данных.
 
RangeError — Смешение вершины потока выходит за границы: смещение, указанное в вызове setVertexBufferAt(), является отрицательным значением или выходит за границы буфера.
 
Error — Поток прочитан, но не задан: атрибут вершины, используемый текущей вершинной программой, не задан (с использованием метода setVertexBufferAt()).

Связанные элементы API


Пример  ( Использование этого примера )

Следующий класс отрисовывает два треугольника в области просмотра Stage3D в рабочей области. Треугольники имеют одну общую вершину, которая расположена в исходной точке (0,0,0).

Треугольники определены с использованием буфера вершин и буфера индексов. Буфер вершины содержит информацию положении и цвете для каждой вершины треугольника. Буфер индексов содержит индексы для буфера вершин. Три индекса определяют треугольник. Например, треугольник, который состоял из первых трех точек в буфере вершин, обозначается как «0,1,2» в буфере индексов.

В этом простом примере не выполняется 3D-преобразование. На экран выводятся только объекты в канонической области просмотра (единичный объем 2x2x1), и координаты треугольников определяются в пределах этой области. Однако при визуализации типичной 3D-сцены выполняется перспективная или ортогональная проекция объектов для визуализации из мировой системы координат в этой области просмотра.

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

()метод 
public function drawTrianglesInstanced(indexBuffer:IndexBuffer3D, numInstances:int, firstIndex:int = 0, numTriangles:int = -1):void

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 20.0

Указанные экземпляры треугольников визуализируются с использованием текущих буферов и состояния данного объекта Context3D.

Для каждого треугольника каждого экземпляра вершины обрабатываются программой вершинного шейдера, а поверхность — программой пиксельного шейдера. Цвет вывода пиксельной программы для каждого пикселя отрисовывается на целевом объекте визуализации в зависимости от операций трафарета, теста глубины, исходного и целевого альфа-значения, а также текущего режима наложения. Целью визуализации может быть главный буфер визуализации или текстура.

Если включен отбор (с помощью метода setCulling()), то треугольники могут убираться из сцены до запуска пиксельной программы. Если включен трафарет и тестирование глубины, то пиксели вывода из пиксельного шейдера могут отбрасываться без обновления целевого объекта визуализации. Кроме того, пиксельный шейдер может принять решение не выводить цвет для пикселя.

Полученные в ходе рендеринга экземпляры треугольников не отображаются в области просмотра, пока не вызван метод present(). После каждого вызова метода present() необходимо вызвать метод clear() перед первым вызовом drawTrianglesInstanced(), в противном случае произойдет сбой визуализации

Когда enableErrorChecking имеет значение false, эта функция возвращает ответ немедленно, не ожидая результатов, и выдает исключение, только если экземпляр Context3D утилизирован или выполнено слишком много вызовов методов рисования. Если контекст визуализации недействителен, визуализация завершается ошибкой без уведомления. Когда свойство enableErrorChecking имеет значение true, эта функция возвращает ответ после отрисовки треугольников и выдает исключение в случае ошибок отрисовки или недопустимого состояния контекста.

Этот метод может выдать исключение, если созданный экземпляр буфера неправильно упорядочен с помощью SetVertexAt(). Например, с помощью Direct 3D 9 индексированные данные геометрии и количество экземпляров для отрисовки должны всегда задаваться в потоке 0 с помощью API-интерфейса SetStreamSourceFreq().

Это означает, что буфер вершин, созданный с помощью CreateVertexBufferForInstance(), не должен размещаться с минимальным значением индекса при использовании SetVertexBufferAt() в качестве ввода в программу шейдера вершин. Буфер вершин, созданный с помощью CreateVertexBuffer(), должен размещаться со значением индекса, которое меньше индекса буфера, созданного с использованием CreateVertexBufferForInstance(). Как правило, данные геометрии должны размещаться раньше данных экземпляров с помощью SetVertexBufferAt().

Параметры

indexBuffer:IndexBuffer3D — набор индексов вершин, ссылающихся на вершины, которые следует визуализировать.
 
numInstances:int — количество экземпляров для рендеринга.
 
firstIndex:int (default = 0) — индекс первой вершины для визуализации. По умолчанию 0.
 
numTriangles:int (default = -1) — Число треугольников для визуализации. Каждый треугольник использует три индекса. Передайте -1 для визуализации всех треугольников в буфере индексов. По умолчанию -1.


Выдает
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.
 
Error — Если выполняется слишком много вызовов этого метода между вызовами метода present(). Максимальное количество вызовов — 32 768.
 
Error — Требуется стандартный расширенный профиль или более высокого уровня: если этот метод вызывается, когда запрашивается профиль, уровень которого ниже стандартного расширенного.
 
Error — Если метод вызывается при отрицательном значении numInstances.

Следующие ошибки возникают, только когда для свойства enableErrorChecking установлено значение true:

 
Error — Необходимо выполнить очистку перед отрисовкой: если буфер не очищался с момента последнего вызова present().
 
Error — Если действительный объект Program3D не задан.
 
Error — Действительный буфер индексов не задан: если объект IndexBuffer3D не задан.
 
Error — Сбой проверки допустимости параметров: когда число треугольников для отрисовки или значение firstIndex превышает допустимые значения.
 
RangeError — Недостаточно индексов в этом буфере: когда в буфере содержится недостаточное число индексов для определения числа треугольников для отрисовки.
 
Error — Образец связан с текстурой, которая также связана с визуализацией: когда целью визуализации является текстура и эта текстура, определена в качестве входных данных текущей фрагментной программы.
 
Error — Образец связан с недопустимой текстурой: недопустимая текстура указана в качестве входных данных для текущей фрагментной программы.
 
Error — Формат образца не соответствует формату текстуры: когда текстура, определенная в качестве входных данных для текущей фрагментной программы, имеет формат, отличный от указанного для регистра образца. Например, двумерная текстура назначена образцу кубической текстуры.
 
Error — Образец связан с неопределенной текстурой: текущая фрагментная программа получает доступ к регистру текстуры, который не задан (с использованием метода setTextureAt()).
 
Error — Для одной и той же текстуры необходимы одинаковые параметры образца: если текстура используется для нескольких регистров образцов, все образцы должны иметь одинаковые параметры. Например, нельзя задавать один образец для фиксации, а другой для оболочки.
 
Error — Текстура задана, но не используется: текстура задана в качестве входных данных шейдера, но при этом не используется.
 
Error — Поток не используется: буфер вершин назначен входным данным атрибутов вершин, но вершинная программа не ссылается на соответствующий регистр.
 
Error — Поток недопустим: объект VertexBuffer3D, назначенный в качестве входных данных вершинной программы, не является допустимым объектом.
 
RangeError — Поток имеет недостаточное количество вершин: в буфере вершин, который поставляет данные для рисования указанных треугольников, недостаточно данных.
 
RangeError — Смешение вершины потока выходит за границы: смещение, указанное в вызове setVertexBufferAt(), является отрицательным значением или выходит за границы буфера.
 
Error — Поток прочитан, но не задан: атрибут вершины, используемый текущей вершинной программой, не задан (с использованием метода setVertexBufferAt()).
 
Error — Поток буфера вершин не содержит достаточного количества элементов для экземпляров: если поток буфера вершин содержит недостаточно элементов для количества экземпляров.
 
Error — Поток буфера вершин для экземпляров неправильно задан с использованием минимального регистра атрибутов минимальных индексов: если буфер вершин, созданный с использованием CreateVertexBuffer(), получает большее значение индекса, чем значение для буфера вершин, созданного с использованием CreateVertexBufferForInstance().

Связанные элементы API


Пример  ( Использование этого примера )

Следующий класс отрисовывает три треугольника, используя функцию рисования экземпляров, которая позволяет использовать один вызов метода рисования вместо нескольких.
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.
        }    
    }
}

Следующий класс отрисовывает три треугольника, используя функцию рисования экземпляров, которая позволяет использовать один вызов метода рисования вместо нескольких.
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

()метод 
public function present():void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Отображает задний буфер визуализации.

При вызове метода present() результаты всех операций визуализации с момента последнего вызова present() делаются видимыми и запускается новый цикл визуализации. После вызова метода present необходимо вызвать метод clear() перед созданием еще одного вызова drawTriangles(). Иначе эта функция будет поочередно очищать буфер визуализации для желтого и зеленого цветов или, если для enableErrorChecking установлено значение true, создается исключение.

При вызове present() также сбрасывается цель визуализации, как и при вызове setRenderToBackBuffer().


Выдает
Error — Необходимо очистить перед отрисовкой: если метод clear() не вызван после предыдущего вызова present(). (Два последовательных вызова метода present() недопустимы, если между ними не вызывается метод clear().)
 
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.

setBlendFactors

()метод 
public function setBlendFactors(sourceFactor:String, destinationFactor:String):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Указывает коэффициенты, используемые для наложения цвета вывода операции рисования на существующий цвет.

Цвет вывода (исходный цвет) программы пиксельного шейдера объединяется с существующим цветом (целевым цветом) этого пикселя согласно следующей формуле:

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

Целевой цвет — это текущий цвет в буфере визуализации для этого пикселя. Другими словами, это результат самого последнего вызова метода clear() и любых промежуточных вызовов метода drawTriangles().

Используйте метод setBlendFactors(), чтобы задать коэффициенты, используемые для умножения исходных и целевых цветов перед наложением. По умолчанию используются коэффициенты наложения sourceFactor = Context3DBlendFactor.ONE и destinationFactor = Context3DBlendFactor.ZERO, которые приводят к тому, что исходный цвет перезаписывает целевой цвет (другими словами, наложения двух цветов не происходит). Для нормального наложения альфа-канала используйте sourceFactor = Context3DBlendFactor.SOURCE_ALPHA и destinationFactor = Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA.

Используйте константы, определенные в классе Context3DBlendFactor, чтобы установить параметры этой функции.

Параметры

sourceFactor:String — Коэффициент, на который умножается исходный цвет. Значение по умолчанию — Context3DBlendFactor.ONE.
 
destinationFactor:String — Коэффициент, на который умножается целевой цвет. Значение по умолчанию — Context3DBlendFactor.ZERO.


Выдает
Error — Недопустимое перечисление: когда sourceFactor или destinationFactor не является одним из распознаваемых значений, которые определены в классе Context3DBlendFactor.

Связанные элементы API


Пример  ( Использование этого примера )

Следующий класс показывает различные коэффициенты наложения. В примере четыре прямоугольника разных цветов отрисовываются в буфере визуализации. Этот набор прямоугольников является «целью» наложения. После этого устанавливаются режимы наложения источника и цели, и отрисовывается больший по размеру прямоугольник, «источник наложения». Используйте клавиши 1 и 2 для циклического переключения режимов наложения источника. Используйте клавиши 3 и 4 для циклического переключения режимов наложения цели.
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

()метод 
public function setColorMask(red:Boolean, green:Boolean, blue:Boolean, alpha:Boolean):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Устанавливает маску, используемую при записи цветов в буфер визуализации.

При записи цвета в буфер визуализации обновляются только те компоненты цвета, для которых соответствующий параметр маски цвета имеет значение true. Например, если вызывается метод setColorMask( true, false, false, false ), в буфер визуализации записывается только красный компонент цвета, пока маска цвета не будет изменена снова. Маска цвета не влияет на поведение метода clear().

Параметры

red:Boolean — Значение false задается, чтобы предотвратить изменение красного канала.
 
green:Boolean — Значение false задается, чтобы предотвратить изменение зеленого канала.
 
blue:Boolean — Значение false задается, чтобы предотвратить изменение синего канала.
 
alpha:Boolean — Значение false задается, чтобы предотвратить изменение альфа-канала.


Пример  ( Использование этого примера )

Следующий пример демонстрирует эффект настройки маски цвета. В примере два треугольника отрисовываются одним цветом. Первый треугольник отрисован до установки маски, поэтому он визуализируется как белый. Нижний треугольник отрисован после установки маски для всех каналов, кроме красного. Поскольку для обновления доступен только красный канал, белый треугольник визуализируется как красный.
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

()метод 
public function setCulling(triangleFaceToCull:String):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает режим отбора треугольников.

Треугольники могут быть исключены из сцены раньше в конвейере визуализации на основе их ориентации относительно плоскости просмотра. Для правильного отбора указывайте порядок вершин последовательно (по часовой или против часовой стрелки), как видится со стороны модели.

Параметры

triangleFaceToCull:String — режим отбора. Используйте одну из констант, определенных в классе Context3DTriangleFace.


Выдает
Error — Недопустимая ошибка перечисления: когда triangleFaceToCull не принимает одно из значений, определенных в классе Context3DTriangleFace.

Связанные элементы API

setDepthTest

()метод 
public function setDepthTest(depthMask:Boolean, passCompareMode:String):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает тип сравнения, используемый для тестирования глубины.

Глубина вывода исходного пикселя из программы пиксельного шейдера сравнивается с текущим значением в буфере глубины. Если сравнение дает результат false, то исходный пиксель не учитывается. Если возвращается true, то исходный пиксель обрабатывается на следующем этапе визуализации, то есть в ходе проверки трафарета. Кроме того, буфер глубины обновляется в соответствии с глубиной исходного пикселя, если параметру depthMask задано значение true.

Задает тест, используемый для сравнения значений глубин для исходных и целевых пикселей. Исходный пиксель объединяется с целевым пикселем, если после сравнения устанавливается значение true. Оператор сравнения применяется в качестве инфиксного оператора, который вставляется между значениями исходного и целевого пикселей в указанном порядке.

Параметры

depthMask:Boolean — значение целевой глубины будет обновлено из исходного пикселя, если значение равно true.
 
passCompareMode:String — операция теста сравнения глубин. Одно из значений Context3DCompareMode.

Связанные элементы API

    setFillMode

()метод 
public function setFillMode(fillMode:String):void

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 16

Задает режим заливки, используемый для визуализации. Интерфейс доступен только в версии AIR для компьютеров.

Параметры

fillMode:String — Если выбрано значение WIREFRAME, то для отображения объекта будет применяться сетка из базовых линий. Если выбрано значение SOLID, то для отображения объекта будут применяться полигоны со сплошной заливкой.

Связанные элементы API

setProgram

()метод 
public function setProgram(program:Program3D):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает вершинные и фрагментные шейдерные программы для использования в ходе последующей визуализации.

Параметры

program:Program3D — объект Program3D, представляющий вершинную и фрагментную программы для использования.

Связанные элементы API


Пример  ( Использование этого примера )

Этот пример демонстрирует создание, загрузку и активацию пары вершин и пиксельных программ для контекста визуализации. Обратите внимание, что объект renderContext является экземпляром класса Context3D. Программы в примере записаны на языке Adobe Graphics Assembly Language (AGAL).
//A simple vertex program in AGAL
const VERTEX_SHADER:String =
    "m44 op, va0, vc0 \n" +    
    "mov v0, va1"; 

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

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

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

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

setProgramConstantsFromByteArray

()метод 
public function setProgramConstantsFromByteArray(programType:String, firstRegister:int, numRegisters:int, data:ByteArray, byteArrayOffset:uint):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.1, AIR 3.1

Задает константы для использования шейдерными программами с применением значений, хранящихся в объекте ByteArray.

Задает константы, доступ к которым можно получить из программы вершин или фрагментов.

Параметры

programType:String — один из Context3DProgramType.
 
firstRegister:int — индекс первой задаваемой константы программы затенения.
 
numRegisters:int — количество задаваемых регистров. Каждый регистр считывается в формате четырех значений с плавающей запятой.
 
data:ByteArray — исходный объект ByteArray
 
byteArrayOffset:uint — смещение в объекте ByteArray для чтения данных


Выдает
TypeError — kNullPointerError, если значение data равно null.
 
RangeError — kConstantRegisterOutOfBounds, если попытаться задать больше, чем максимальное количество констант затенения.
 
RangeError — kBadInputSize, если значение byteArrayOffset больше или равно длине архива data или если количество элементов в массиве data минус byteArrayOffset меньше numRegisters*16

Связанные элементы API

setProgramConstantsFromMatrix

()метод 
public function setProgramConstantsFromMatrix(programType:String, firstRegister:int, matrix:Matrix3D, transposedMatrix:Boolean = false):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает константы для использования шейдерными программами с применением значений, хранящихся в объекте Matrix3D.

Используйте эту функцию для передачи матрицы в шейдерную программу. Функция задает 4 регистра констант, используемых вершинной или фрагментной программой. Матрица назначается регистрам построчно. Первый регистр констант назначается верхней строке матрицы. Можно задать 128 регистров для вершинной программы и 28 регистров для фрагментной программы.

Параметры

programType:String — Тип шейдерной программы: Context3DProgramType.VERTEX или Context3DProgramType.FRAGMENT.
 
firstRegister:int — индекс первого регистра констант, который необходимо задать. Поскольку объект Matrix3D имеет 16 значений, задаются четыре регистра.
 
matrix:Matrix3D — матрица, содержащая значения констант.
 
transposedMatrix:Boolean (default = false) — если значение равно true, значения матрицы копируются в регистры в транспонированном порядке. Значение по умолчанию false.


Выдает
TypeError — Ошибка пустого указателя: когда matrix имеет нулевое значение.
 
RangeError — Регистр констант выходит за границы: при попытке установить значение, превышающее максимальное число регистров констант шейдера.

Дополнительно

Связанные элементы API

setProgramConstantsFromVector

()метод 
public function setProgramConstantsFromVector(programType:String, firstRegister:int, data:Vector.<Number>, numRegisters:int = -1):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает входные данные констант для шейдерных программ.

Задает массив констант, к которым получает доступ программа затенения вершин или фрагментов. Программы затенения получают доступ к константам, заданным в объекте Program3D, как к регистрам констант. Каждый регистр констант состоит из 4 значений с плавающими запятыми (x, y, z, w). Поэтому каждый регистр нуждается в четырех записях вектора данных. Количество реестров, которое можно задать для вершинной программы и фрагментной программы, зависит от Context3DProfile.

Параметры

programType:String — Тип шейдерной программы: Context3DProgramType.VERTEX или Context3DProgramType.FRAGMENT.
 
firstRegister:int — индекс первого регистра констант, который необходимо задать.
 
data:Vector.<Number> — значения констант с плавающей запятой. В массиве data должно содержаться не менее 4 элементов numRegisters.
 
numRegisters:int (default = -1) — количество задаваемых констант. Укажите значение -1 (значение по умолчанию), чтобы задать достаточное число регистров для использования всех доступных данных.


Выдает
TypeError — Ошибка пустого указателя: когда data имеет значение null.
 
RangeError — Регистр констант выходит за границы: при попытке установить значение, превышающее максимальное число регистров констант шейдера.
 
RangeError — Элементов в массиве data минус byteArrayOffset меньше numRegisters*4

Дополнительно

Связанные элементы API

setRenderToBackBuffer

()метод 
public function setRenderToBackBuffer():void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает задний буфер визуализации в качестве цели визуализации. Последующие вызовы методов drawTriangles() и clear() приведут к обновлениям заднего буфера. Используйте этот метод, чтобы восстановить обычную визуализацию после использования метода setRenderToTexture().

setRenderToTexture

()метод 
public function setRenderToTexture(texture:flash.display3D.textures:TextureBase, enableDepthAndStencil:Boolean = false, antiAlias:int = 0, surfaceSelector:int = 0, colorOutputIndex:int = 0):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает указанную текстуру в качестве цели визуализации.

Последующие вызовы методов drawTriangles() и clear() приводят к обновлению указанной текстуры, а не заднего буфера. Множественные отображения создаются автоматически. Используйте метод setRenderToBackBuffer() для восстановления обычной визуализации в заднем буфере.

Перед рисованием очистка не требуется. Если очистка не выполняется, содержимое визуализации будет сохранено. также будут очищены буферы глубины и трафаретов. При первом рисовании происходит принудительная очистка. При вызове метода present() в качестве цели восстанавливается задний буфер.

Параметры

texture:flash.display3D.textures:TextureBase — целевая текстура для визуализации. Задайте значение null, чтобы возобновить визуализацию в заднем буфере (setRenderToBackBuffer() и present также восстанавливают в качестве цели задний буфер).
 
enableDepthAndStencil:Boolean (default = false) — Если установлено значение true, возможно тестирование глубины и трафарета. Если установлено значение false, все состояния глубины и трафаретов игнорируются в последующих операциях отрисовки.
 
antiAlias:int (default = 0) — Качество сглаживания. Используйте значение 0, чтобы отключить сглаживание; более высокие значения позволяют повысить качество сглаживания, но требуют большего количества вычислений. В настоящее время значение игнорируется мобильной платформой и контекстом программной визуализации.
 
surfaceSelector:int (default = 0) — Указывает, какой элемент текстуры необходимо обновить. Объекты Texture имеют одну поверхность, поэтому необходимо указать значение 0 (значение по умолчанию). Объекты CubeTexture имеют шесть поверхностей, поэтому необходимо указать целое число от 0 до 5.
 
colorOutputIndex:int (default = 0) — Регистр цвета вывода. Должен иметь значение 0 для ограниченного режима или режима по базовой линии. В противном случае указывает регистр цвета вывода.


Выдает
ArgumentError — для несоответствующего параметра surfaceSelector. Значение должно быть равно 0 для двумерных текстур и 0–5 для кубических карт.
 
ArgumentError — Значение texture не извлекается из класса TextureBase (классов Texture или CubeTexture).
 
ArgumentError — Значение colorOutputIndex должно быть целым числом от 0 до 3.
 
ArgumentError — для этого вызова требуется контекст Context3D, создаваемый с помощью стандартного профиля или его расширенных версий.

Связанные элементы API

setSamplerStateAt

()метод 
public function setSamplerStateAt(sampler:int, wrap:String, filter:String, mipfilter:String):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.6, AIR 3.6

Ручная перезапись состояния образца текстуры.

Состояние образца текстуры обычно задается во время вызова setProgram. Однако состояние образца текстуры можно заменить при помощи этой функции. Если вы не хотите, чтобы программа изменила состояние образца, задайте бит ignoresamnpler в AGAL и используйте эту функцию.

Параметры

sampler:int — образец Регистр образца для применения. Сопоставляется с регистром образца в AGAL.
 
wrap:String — Режим обтекания. Определен в Context3DWrapMode. По умолчанию используется значение repeat.
 
filter:String — Режим фильтрования текстуры. Определен в Context3DTextureFilter. По умолчанию используется значение nearest.
 
mipfilter:String — Фильтр множественного отображения. Определен в Context3DMipFilter. По умолчанию используется значение none.


Выдает
Error — образец вне диапазона
 
Error — обтекание, фильтр, ошибка bad enum фильтра mip
 
Error — Объект удален: если этот объект Context3D был удален путем вызова метода dispose() или из-за потери связи с базовым аппаратным обеспечением визуализации.

Связанные элементы API

setScissorRectangle

()метод 
public function setScissorRectangle(rectangle:Rectangle):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает прямоугольник вырезания, который является типом маски рисования. Средство визуализации отрисовывает только область внутри прямоугольника вырезания. Вырезание не влияет на операции очистки.

Передайте значение null, чтобы выключить вырезание.

Параметры

rectangle:Rectangle — Прямоугольник, в котором необходимо выполнить отрисовку. Укажите положение и размеры прямоугольника в пикселях. Начало системы координат находится в верхнем левом углу области просмотра, а положительные значения увеличиваются вниз и вправо (аналогично стандартной экранной системе координат Flash).


Пример  ( Использование этого примера )

Следующий класс отрисовывает два треугольника в видовом экране 640x480 пикселей на рабочей области. Треугольники имеют одну общую вершину, которая расположена в исходной точке (0,0,0).

Треугольники определены с использованием буфера вершин и буфера индексов. Буфер вершины содержит информацию положении и цвете для каждой вершины треугольника. Буфер индексов содержит индексы для буфера вершин. Три индекса определяют треугольник. Например, треугольник, который состоял из первых трех точек в буфере вершин, обозначается как «0,1,2» в буфере индексов.

В этом простом примере не выполняется 3D-преобразование. На экран выводятся только объекты в канонической области просмотра (кубический объем 2x2x2 с центром в исходной точке). Однако при визуализации типичной 3D-сцены выполняется перспективная или ортогональная проекция объектов для визуализации в этой области просмотра.

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

()метод 
public function setStencilActions(triangleFace:String = "frontAndBack", compareMode:String = "always", actionOnBothPass:String = "keep", actionOnDepthFail:String = "keep", actionOnDepthPassStencilFail:String = "keep"):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает режим трафаретов и операцию.

8-битное значение ссылки на трафарет может быть связано с каждым вызовом отрисовки. Во время визуализации значение ссылки может быть протестировано относительно значений, ранее сохраненных в буфере кадров. Результат теста может влиять на действие отрисовки, а также на необходимость и способ обновления сохраненного значения трафарета. Кроме того, тестирование глубин определяет необходимость тестирования трафаретов. Тест глубин, завершившийся со сбоем, может также использоваться для управления действием, выполняемым буфером трафаретов.

В конвейере обработки пикселей в первую очередь выполняется тестирование глубин. Если тестирование глубин завершается с ошибкой, может быть выполнено обновление буфера трафаретов, но дальнейшая оценка значения буфера трафаретов недопустима. Если тестирование глубин завершается успешно, выполняется тестирование трафаретов. В зависимости от результатов тестирования трафаретов могут быть предприняты альтернативные действия.

Значение ссылки на трафарет задается с использованием метода setStencilReferenceValue().

Параметры

triangleFace:String (default = "frontAndBack") — ориентации треугольников, которые влияют на операцию с трафаретами. Один из Context3DTriangleFace.
 
compareMode:String (default = "always") — оператор тестирования, используемый для сравнения текущего значения ссылки на трафарет и значения трафарета целевого пикселя. Обновление цвета и глубины целевого пикселя выполняется, если значение после сравнения равно true. Действия с трафаретами выполняются по требованию в следующих параметрах действий. Оператор сравнения применяется как инфиксный оператор между текущим и целевым значениями ссылок в указанном порядке: (в псевдокоде: if stencilReference OPERATOR stencilBuffer then pass). Используйте одну из констант, определенных в классе Context3DCompareMode.
 
actionOnBothPass:String (default = "keep") — действие, которое будет предпринято, если успешно выполняются сравнения глубин и трафаретов. Используйте одну из констант, определенных в классе Context3DStencilAction.
 
actionOnDepthFail:String (default = "keep") — действие, которое будет выполняться, если сравнение глубин завершится со сбоем. Используйте одну из констант, определенных в классе Context3DStencilAction.
 
actionOnDepthPassStencilFail:String (default = "keep") — действие, которое будет выполняться, если сравнение глубин будет выполнено успешно, а сравнение трафаретов — со сбоем. Используйте одну из констант, определенных в классе Context3DStencilAction.


Выдает
Error — Недопустимая ошибка перечисления: когда triangleFace не принимает одно из значений, определенных в классе Context3DTriangleFace.
 
Error — Недопустимая ошибка перечисления: когда compareMode не принимает одно из значений, определенных в классе Context3DCompareMode.
 
Error — Недопустимая ошибка перечисления: когда actionOnBothPass, actionOnDepthFail или actionOnDepthPassStencilFail не принимает одно из значений, определенных в классе Context3DStencilAction.

Связанные элементы API


Пример  ( Использование этого примера )

Следующий класс демонстрирует отрисовку трафарета, который применяется в качестве маски для последующих операций отрисовки. Выполняются следующие действия.
  • Очистка буфера трафарета до 0.
  • Задание увеличения действия трафарета после прохождения проверки трафарета.
  • Установка для трафарета значения ссылки 0.
  • Отрисовка треугольной маски. При отрисовке треугольника выполняется проверка трафарета, поскольку буфер трафарета был очищен до 0 и значение ссылки равно 0. В результате значение буфера трафарета увеличивается на 1 при отрисовке треугольной маски.
  • Установка сохранения действия трафарета, чтобы последующие операции отрисовки не изменяли буфер трафарета.
  • Отрисовка прямоугольника во весь экран (многоцветный). Поскольку значение ссылки трафарета по-прежнему равно 0, происходит сбой проверки трафарета в маскированной области. Поэтому треугольник отрисовывается везде, за исключением маскированной области.
  • Установка значения ссылки трафарета, равного 1.
  • Отрисовка еще одного прямоугольника (красного) во весь экран. Теперь сбой проверки трафарета происходит везде, за исключением маскированной области, значение которой увеличено на 1. Поэтому прямоугольник отрисовывается только в маскированной области.

Наведите курсор мыши на пример для просмотра последовательности основных действий.

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

()метод 
public function setStencilReferenceValue(referenceValue:uint, readMask:uint = 255, writeMask:uint = 255):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает значение сравнения трафаретов, используемое для проверок трафаретов.

Используются только нижние 8 бит эталонного значения. Значение из буфера трафарета также имеет длину 8 бит. Используйте readMask и writeMask, чтобы применить буфер трафарета в качестве битового поля.

Параметры

referenceValue:uint — 8-битное значение ссылки, используемое в тестах сравнения значений ссылок.
 
readMask:uint (default = 255) — 8-битная маска, которая должна применяться и к текущему значению из буфера трафарета, и к эталонному значению перед сравнением.
 
writeMask:uint (default = 255) — 8-битная маска, применяемая к эталонному значению перед обновлением буфера трафарета.

Связанные элементы API

setTextureAt

()метод 
public function setTextureAt(sampler:int, texture:flash.display3D.textures:TextureBase):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Задает текстуру, которая будет использоваться в качестве регистра входной текстуры фрагментной программы.

Фрагментная программа может считывать данные не более чем из восьми объектов текстур. Используйте эту функцию для назначения объекта Texture или CubeTexture одному из регистров образца, используемых фрагментной программой.

Примечание. Если активная фрагментная программа заменяется (с использованием метода setProgram) шейдером, в котором используется меньшее количество текстур, установите для неиспользуемых регистров значение null:

         setTextureAt( 7, null );
         

Параметры

sampler:int — индекс регистра образца: значение от 0 до 7.
 
texture:flash.display3D.textures:TextureBase — объект текстуры, который необходимо сделать доступным: экземпляр Texture или оCubeTexture.

Дополнительно

Связанные элементы API

Texture
CubeTexture

setVertexBufferAt

()метод 
public function setVertexBufferAt(index:int, buffer:VertexBuffer3D, bufferOffset:int = 0, format:String = "float4"):void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11, AIR 3

Указывает, какие компоненты данных вершин соответствуют одному вводу данных в шейдерную вершинную программу.

Используйте метод setVertexBufferAt для определения принадлежности компонентов данных, определенных для каждой вершины в буфере VertexBuffer3D, входным данным вершинной программы. Разработчик программы вершин определяет, сколько данных требуется для каждой вершины. Данные сопоставляются из одного или нескольких потоков VertexBuffer3D в регистры атрибутов вершинной шейдерной программы.

Самая малая единица данных, используемая программой затенения вершин, равна 32 битам. Смещения в потоке вершин кратны 32 битам.

Например, программист может определить каждую вершину с использованием следующих данных:
position:  x    float32
           y    float32
           z    float32
color:     r    unsigned byte
           g    unsigned byte
           b    unsigned byte
           a    unsigned byte
Предположим, вершина была определена в объекте VertexBuffer3D с именем buffer; ее можно передать в вершинный шейдер с помощью следующего кода:
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

Параметры

index:int — индекс регистра атрибутов в вершинном шейдере (от 0 до 7).
 
buffer:VertexBuffer3D — буфер, содержащий данные исходной вершины, которые будут переданы в вершинный шейдер.
 
bufferOffset:int (default = 0) — смещение относительно начала данных для одной вершины, с которым необходимо начать чтение этого атрибута. В примере выше данные о положении имеют смещение, равное 0, поскольку это первый атрибут; цвет имеет смещение, равное 3, поскольку атрибут цвета следует за 32-разрядными значениями положения. Смещение указывается с шагом 32 бита.
 
format:String (default = "float4") — значение из класса Context3DVertexBufferFormat, указывающее тип данных этого атрибута.


Выдает
Error — Недопустимое перечисление: когда формат не принимает одно из значений, определенных в классе Context3DVertexBufferFormat.
 
RangeError — Регистр атрибутов выходит за пределы: когда параметр index не попадает в диапазон от 0 до 7. (В шейдере можно использовать не более восьми регистров атрибутов вершин.)

Дополнительно

Связанные элементы API

Context3DExample.as

Следующий класс отрисовывает вращающийся куб с использованием проекции перспективы.
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 ]Почему по-английски?
Содержимое Справочника ActionScript 3.0 отображается на английском языке

Не все части Справочника ActionScript 3.0 переводятся на все языки. Если какой-то текстовый элемент не переведен, он отображается на английском языке. Например, компонент ga.controls.HelpBox не переведен ни на один из языков. Это значит, что в русской версии справки компонент ga.controls.HelpBox будет отображаться на английском языке.