пятница, 20 января 2012 г.

Основы AGAL

Начну с того, что AGALMiniAssembler.as который активно используется во всех примерах официально не поддерживается компанией Adobe, вследствие чего содержит небольшие неточности.
Во-первых, в нем описаны инструкции AGAL, которые на самом деле еще не реализованы (исключены). Это:

инструкции ifzinzifeineifgifliegielelseifreperpbrk, sgn.
А во-вторых, в нем нет двух инструкций, которые поддерживаются Flash Player'ом:
seq, sne.
Эти две инструкции аналогичны sge, slt.


Список регистров, которыми можно пользоваться в программе на языке AGAL следующий:


Название
Описание
F1
V2
r3
w4
Кол-во
VAx
атрибутные (setVertexBufferAt)

+
+

8
VCxxx
константные (setProgramConstantsFrom…)

+
+

128
VTx
временные

+
+
+
8
OP
выходной

+

+
1
Vx
переменная
+
+
+
+
8
FCxx
константные (setProgramConstantsFrom…)
+

+

28
FTx
временные
+

+
+
8
FSx
текстурные (setTextureAt)
+

+

8
OC
выходной
+


+
1


Возможное использование данного регистра (группы регистров) в:
1 - фрагментном шейдере
2 - вершинном шейдере
3 - качестве одного из двух регистров - источников (чтение)
4 - качестве регистра - назначения (запись)

Для полноценной поддержки неуказанных инструкций seq и sne необходимо:

открыть файл AGALMiniAssembler.as в режиме редактирования, найти строку:

OPMAP[ SGN ] = new OpCode( SGN, 2, 0x2b, 0 );


после нее добавить:


OPMAP[ SEQ ] = new OpCode( SEQ, 3, 0x2c, 0 );
OPMAP[ SNE ] = new OpCode( SNE, 3, 0x2d, 0 );

Потом, найти строку:


private static const SGN:String = "sgn";

после нее добавить:



private static const SEQ:String = "seq";
private static const SNE:String = "sne";




Комментариев нет:

Отправить комментарий