Пакет | flash.display3D |
Класс | public final class Program3D |
Наследование | Program3D Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 2 |
Программы, управляемые объектом Program3D, управляют всей визуализацией треугольников во время вызова метода drawTriangles()
объекта Context3D. Загрузите двоичный байт-код в контекст визуализации с использованием метода upload
. (После загрузки ссылки на программу в исходном массиве байтов не сохраняются; изменение или удаление исходного массива байтов не влечет за собой изменение программы.)
Программы всегда состоят из двух связанных частей: вершинной и фрагментной программ.
- Вершинная программа работает с данными, определенными в объектах VertexBuffer3D, и отвечает за проецирование вершин в пространство клипа и передачу всех требуемых данных вершин, таких цвет, во фрагментную шейдерную программу.
- Фрагментная шейдерная программа работает с атрибутами, переданными в нее вершинной программой, и создает цвет для каждого растрированного фрагмента треугольника и, как результат, цвета пикселей. Обратите внимание, что фрагментные программы могут называться по-разному в литературе по трехмерному программированию, в том числе фрагментными шейдерами и пиксельными шейдерами.
Укажите пару программ, которую необходимо использовать для последующих операций визуализации, путем передачи соответствующего экземпляра Program3D в метод setProgram()
объекта Context3D.
Нельзя создать объект Program3D напрямую; воспользуйтесь методом createProgram()
объекта Context3D.
Связанные элементы API
Метод | Определено | ||
---|---|---|---|
Освобождает все ресурсы, связанные с этим объектом. | Program3D | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Загружает пару программ визуализации, выраженных байт-кодом AGAL (Adobe Graphics Assembly Language). | Program3D | ||
Возвращает элементарное значение заданного объекта. | Object |
dispose | () | метод |
public function dispose():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3 |
Освобождает все ресурсы, связанные с этим объектом. После утилизации объекта Program3D происходит сбой вызова метода upload() и визуализации с использованием этого объекта.
upload | () | метод |
public function upload(vertexProgram:ByteArray, fragmentProgram:ByteArray):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11, AIR 3 |
Загружает пару программ визуализации, выраженных байт-кодом AGAL (Adobe Graphics Assembly Language).
Программный байт-код может быть создан с использованием автономных инструментов Pixel Bender 3D. Кроме того, он может создаваться динамически. Класс AGALMiniAssembler является служебным классом, который компилирует программы на языке ассемблера AGAL в байт-код AGAL. Класс не входит в состав среды выполнения. При загрузке шейдерных программ байт-код компилируется в язык собственного шейдера текущего устройства (например, OpenGL или Direct3D). Среда выполнения проверяет байт-код при загрузке.
Программы выполняются при вызове метода drawTriangles()
объекта Context3D. Вершинная программа выполняется один раз для каждой вершины в списке треугольников, которые должны быть отрисованы. Фрагментная программа выполняется по одному разу для каждого пикселя на поверхности треугольника.
«Переменные», используемые шейдерной программой, называются регистрами. Определены следующие регистры:
Имя | Число для фрагментной программы | Число для вершинной программы | Цель |
---|---|---|---|
Атрибут | Нет данных | 8 | Ввод вершинного шейдера; чтение из буфера вершин, указанного с использованием Context3D.setVertexBufferAt(). |
Константа | 28 | 128 | Ввод шейдера; задается с использованием семейства функций Context3D.setProgramConstants(). |
Временный | 8 | 8 | Регистр временных значений для вычислений недоступен вне программы. |
Вывод | 1 | 1 | Вывод шейдера: в вершинной программе выводом является расположение пространства клипа, а во фрагментной — цвет. |
Переменная | 8 | 8 | Передайте интерполированные данные между вершинным и фрагментным шейдером. Регистры переменных из вершинной программы применяются в качестве входных данных для фрагментной программы. Значения интерполируются в соответствии с расстоянием от вершин треугольника. |
Образец | 8 | Нет данных | Входные данные фрагментного шейдера; считываются из текстуры, указанной с использованием Context3D.setTextureAt() |
Вершинная программа получает входные данные из двух источников: буферов вершин и регистров констант. Укажите, какие данные вершин необходимо использовать для определенного регистра атрибутов вершин с помощью метода setVertexBufferAt()
объекта Context3D. Можно определить до восьми регистров ввода для атрибутов вершин. Значения атрибутов вершин считываются из буфера вершин для каждой вершины в списке треугольников и помещаются в регистр атрибутов. Укажите регистры констант с использованием метода setProgramConstantsFromMatrix()
или setProgramConstantsFromVector()
класса Context3D. В регистрах постоянных хранится одинаковое значение для каждой вершины в списке треугольников. (Значения констант можно изменить только между вызовами метода drawTriangles()
.)
Вершинная программа отвечает за проецирование вершин треугольника в пространство клипа (каноническая область просмотра находится в пределах ±1 на осях x и y и 0-1 на оси z) и размещение преобразованных координат в соответствующем регистре вывода. (Как правило, соответствующая матрица проецирования передается в шейдер в наборе регистров констант.) Вершинная программа также должна скопировать все атрибуты вершин или вычисленные значения, необходимые во фрагментной программе, в специальный набор переменных, который называется регистром переменных. При выполнении фрагментного шейдера значение, указанное в регистре переменных, линейно интерполируется в соответствии с расстоянием текущего фрагмента от каждой вершины треугольника.
Фрагментная программа получает входные данные из регистра переменных и отдельного набора регистров констант (задается с помощью метода setProgramConstantsFromMatrix()
или setProgramConstantsFromVector()
). Для чтения данных текстур, загруженных в контекст визуализации, можно также использовать регистры образцов. Укажите текстуру, к которой необходимо получить доступ с помощью определенного регистра образцов, с использованием метода setTextureAt()
класса Context3D. Фрагментная программа отвечает за настройку для ее регистра вывода цветового значения.
Параметры
vertexProgram:ByteArray — Байт-код AGAL для программы вершин. Для объекта ByteArray необходимо использовать формат с прямым порядком байтов.
| |
fragmentProgram:ByteArray — Байт-код AGAL для программы фрагментов. Для объекта ByteArray необходимо использовать формат с прямым порядком байтов.
|
Выдает
TypeError — Ошибка пустого указателя: если vertexProgram или fragmentProgram принимает нулевое значение.
| |
Error — Объект удален: если объект Program3D был удален напрямую путем вызова метода dispose() или косвенно путем вызова метода dispose() объекта Context3D или если контекст визуализации был удален из-за потери связи с устройством.
| |
ArgumentError — Программа Agal слишком маленькая: когда длина любого массива программного кода меньше 31 байта. Это размер байт-кода шейдера программы с одной инструкцией.
| |
ArgumentError — Программа должна иметь прямой порядок байтов: если любой массив байт-кода программы не имеет прямой порядок байтов.
| |
Error — Сбой компиляции собственного шейдера: если вывод транслятора AGAL не является совместимой программой на языке собственного шейдера. Эта ошибка возникает только в проигрывателях выпуска.
| |
Error — Сбой компиляции OpenGL собственного шейдера: если вывод транслятора AGAL не является компилируемой программой на языке шейдерной программы OpengGL и включает диагностику компиляции. Эта ошибка возникает только в проигрывателях отладки.
| |
Error — Сбой компиляции D3D9 собственного шейдера: если вывод транслятора AGAL не является компилируемой программой на языке шейдерной программы Direct3D и включает диагностику компиляции. Эта ошибка возникает только в проигрывателях отладки.
Следующие ошибки выдаются, когда проверка байт-кода AGAL завершается ошибкой: | |
Error — Не является программой Agal: если заголовок magic byte является неверным. Первым байтом байт-кода должен быть 0xa0. Эта ошибка может обозначать, что для массива байтов установлен неверный порядок байтов.
| |
Error — Неверная версия Agal: если версия AGAL не поддерживается текущей версией SWF. Для SWF версии 13 необходимо установить AGAL версии 1.
| |
Error — Неверный тип программы Agal: если идентификатор типа программы AGAL недействителен. Третьим байтом в байт-коде должен быть 0xa1. Эта ошибка может обозначать, что для массива байтов установлен неверный порядок байтов.
| |
Error — Неверный тип шейдера Agal: если кодом типа шейдера не является фрагмент или вершина (1 или 0).
| |
Error — Недопустимый код операции Agal находится вне диапазона: если обнаружен недопустимый код операции в потоке маркеров.
| |
Error — Недопустимый код операции Agal не реализован: если обнаружен недопустимый код операции в потоке маркеров.
| |
Error — Код операции Agal разрешен только во фрагментной программе: если в потоке маркеров вершинной программы обнаруживается код операции, который разрешен только во фрагментных программах, таких как KIL или TEX.
| |
Error — Неверные исходные операнды Agal: если оба исходных операнда являются регистрами констант. Необходимо вычислить результат без использования шейдерной программы и передать его с помощью одного регистра констант.
| |
Error — Оба операнда предназначены для непрямого чтения: если оба операнда предназначены для непрямого чтения.
| |
Error — Назначение кода операции должно быть равно нулю: если маркер с кодом операции (например, KIL), для которого не указано назначение, задает ненулевое значение для регистра назначения.
| |
Error — Для назначения кода операции необходимо использовать маску: если код операции, создающей только трехкомпонентный результат, используется без маски.
| |
Error — Слишком много маркеров: если в программе AGAL слишком много маркеров (больше 200).
| |
Error — Тип фрагментного шейдера: если в качестве типа фрагментной программы (байт 6 параметра fragmentProgram) не задано значение 1.
| |
Error — Тип вершинного шейдера: если в качестве типа вершинной программы (байт 6 параметра vertexProgram) не задано значение 0.
| |
Error — Чтение переменных выполнено, но запись не произведена: если фрагментный шейдер считывает регистр переменных, который никогда не записывался вершинным шейдером.
| |
Error — Частичная запись переменных: если запись регистра переменных произведена частично. Все компоненты регистра переменных должны быть записаны.
| |
Error — Запись всех компонентов фрагмента: если вывод цвета фрагмента записан частично. Все четыре компонента вывода цвета должны быть записаны.
| |
Error — Запись всех компонентов вершины: если вывод пространства клипа вершины записан частично. Все компоненты вывода пространства обрезки вершины должны быть доступны для записи.
| |
Error — Неиспользованный операнд: если неиспользованный операнд в маркере не является нулевым.
| |
Error — Регистр образцов только во фрагменте: если регистр образцов текстуры используется только в вершинной программе.
| |
Error — Второй операнд регистра образцов: если регистр образцов используется в качестве цели или первого операнда маркера AGAL.
| |
Error — Косвенная адресация разрешена только в вершине: если косвенная адресация используется во фрагментной программе.
| |
Error — Косвенная адресация разрешена только в регистрах констант: если косвенная адресация используется в регистрах, отличных от регистров констант.
| |
Error — Тип косвенного источника: если типом косвенного источника не является регистр атрибутов, констант или временных значений.
| |
Error — Поля косвенной адресации должны быть равны нулю: если не все поля косвенной адресации равны нулю для прямой адресации.
| |
Error — Только чтение регистров переменных во фрагменте: если выполняется чтение регистра переменных в вершинной программе. Регистры переменных доступны только для записи в вершинных программах и только для чтения во фрагментных программах.
| |
Error — Только чтение регистров атрибутов в вершине: если выполняется чтение регистров атрибутов во фрагментной программе. Регистры атрибутов доступны только для чтения в вершинных программах.
| |
Error — Не удается прочитать регистр вывода: если выполняется чтение регистра вывода (положение или цвет). Регистры вывода доступны только для чтения, но не для записи.
| |
Error — Чтение регистра временных значений без записанных данных: если выполняется чтение регистра временных значений, в который ранее не были записаны данные.
| |
Error — Чтение компонента регистра временных значений без записанных данных: если выполняется чтение определенного компонента регистра временных значений, в который ранее не были записаны данные.
| |
Error — Невозможно выполнить запись в регистр образцов: если выполняется запись в регистр образцов. Регистры образцов доступны только для чтения, но не для записи.
| |
Error — Запись в регистр переменных: если выполняется запись в регистр переменных значений во фрагментной программе. Регистры переменных доступны только для записи в вершинных программах и только для чтения во фрагментных программах.
| |
Error — Невозможно выполнить запись в регистр атрибутов: если выполняется запись в регистр атрибутов. Регистры атрибутов доступны только для чтения.
| |
Error — Невозможно выполнить запись в регистр констант: если выполняется запись в регистр констант в шейдерной программе.
| |
Error — Целевая маска записи равна нулю: если целевая маска записи равна нулю. Должны быть заданы все компоненты регистра вывода.
| |
Error — Зарезервированные биты AGAL должны быть равны нулю: если какие-либо зарезервированные биты в маркере не равны нулю. Это обозначает ошибку при создании байт-кода (или неправильно сформированный байт-код).
| |
Error — Неизвестный тип регистра: если используется индекс недопустимого типа регистра.
| |
Error — Регистр образцов выходит за пределы: если используется недопустимый индекс регистра образцов.
| |
Error — Регистр переменных выходит за пределы: если используется недопустимый индекс регистра переменных.
| |
Error — Регистр атрибутов выходит за пределы: если используется недопустимый индекс регистра атрибутов.
| |
Error — Регистр констант выходит за пределы: если используется недопустимый индекс регистра констант.
| |
Error — Регистр вывода выходит за пределы: если используется недопустимый индекс регистра вывода.
| |
Error — Регистр временных значений выходит за пределы: если используется недопустимый индекс регистра временных значений.
| |
Error — Для образца карты куба должна использоваться фиксация: если образец карты куба не устанавливает режим обтекания для фиксации.
| |
Error — Неизвестный размер образца: если для образца используется неизвестный размер. (Поддерживаются только 2D и кубические текстуры.)
| |
Error — Неизвестный режим фильтрации: если образец использует неизвестный режим фильтрации. (Поддерживается только фильтрация ближайших соседних элементов и линейная фильтрация.)
| |
Error — Неизвестный режим множественного отображения: если образец использует неизвестный режим множественного отображения. (Поддерживаются только отсутствующий режим множественного отображения, режимы множественного отображения ближайших соседних элементов и линейного множественного отображения.)
| |
Error — Неизвестный режим обтекания: если образец использует неизвестный режим обтекания. (Поддерживаются только режимы обтекания с фиксацией или повторением.)
| |
Error — Неизвестный специальный флаг: если образец использует неизвестный специальный флаг.
| |
Error — Невозможно применить маску к выводимому цвету: нельзя применить маску к регистру вывода цветов во фрагментной программе. Должны быть заданы все компоненты регистра цветов.
| |
Error — Второй операнд должен быть регистром образцов: в коде операции tex AGAL в качестве второго исходного операнда должен использоваться образец.
| |
Error — Косвенная адресация не разрешена: косвенная адресация используется там, где это запрещено.
| |
Error — Сериализация должна быть скалярной величиной: ошибка сериализации.
| |
Error — Невозможно сериализовать 2-й источник: ошибка сериализации.
| |
Error — Во второй раз образец должен использоваться с теми же параметрами: во всех образцах, получающих доступ к одной текстуре, должны использоваться одинаковые параметры размера, обтекания, фильтра, специальные параметры и параметры множественного отображения.
| |
Error — 3768: API-интерфейс Stage3D не может использоваться во время выполнения в фоновом режиме.
|
Дополнительно
Связанные элементы API
Tue Jun 12 2018, 11:34 AM Z