Запись только компонента красного цвета в выходные данные пиксельного шейдера AGAL

Мне нужен пиксельный шейдер AGAL, ​​который вместо простого копирования цвета, переданного ему из вершинного шейдера, на выход копирует только красный компонент из переданного цвета и устанавливает зеленый и синий компоненты в ноль. В псевдокоде:

temp = 0
temp.red = in.red
temp.alpha = in.alpha
out = temp

Я не могу понять, как написать это в AGAL. Следующее не делает этого:

mov ft0.ra, v0.ra
mov oc, ft0

Как я могу получить желаемый результат?


person user2010596    schedule 05.03.2013    source источник
comment
Какой результат вы получите с вашим кодом как есть?   -  person bwroga    schedule 05.03.2013
comment
Такой же результат, как если бы я скопировал все компоненты v0 в oc. Пробовал мов ft0.rgba, v0.rrra. Нет разницы.   -  person user2010596    schedule 06.03.2013
comment
Не могли бы вы опубликовать весь свой шейдер?   -  person bwroga    schedule 06.03.2013


Ответы (1)


Вы должны помнить, что

  • использование «.something» справа от регистра назначения означает, что вы используете маски
  • использование «.something» справа от исходного регистра означает, что вы используете swizzles.

Если предположить, что

  • fc0 содержит ноль в первой компоненте
  • v0 содержит цвет, из которого вы хотите извлечь красный компонент

Итак, вот ваш фрагментный шейдер:

// shader.
mov ft0, fc0.xxxx     // fill ft0 with zeros
mov ft0.xw, v0.xxxw   // fill ft0.x with v0.x and ft0.w with v0.w
mov oc, ft0

Источник: я написал компилятор ActionScript 3 Минко для компилятора AGAL.

person Eloims    schedule 10.04.2013