Чтобы боги не позавидовали.

Забавное состояние – сижу на работе и жду, когда приду домой. Писать на PS3. Выше – скриншот достижений. Синий треугольник, софтово растеризован на SPU. А вот полная версия картинки, для любителей прекрасного http://img364.imageshack.us/img364/7479/spurenderye7.png

А вот код http://www.everfall.com/paste/id.php?3m560c8hyjuh который этот треугольник рисует. Код довольно драфтовый. Приделают к этому ресурсу SVN или CVS сервер – выложу полные компилирующиеся сорцы.

Основная идея кода – простая. Надо разбить треугольник на полосочки ( высоты 4 и длины кратной 8 ), закрашивать эти полосочки кода по маскам ( граница слева – граница справа ). Для избежания мешанины из циклов for код обработки линий предствляет собой такой девайс, который, дойдя до конца линии, переключается на обработку следующей.

Забавно, что в документации по spu intrinsics я не нашел команды минимума и максимума, пришлось эмулировать:

  1. template<class T> inline T spu_min( const T &a, const T &b )
  2. {
  3. return spu_sel( a, b, spu_cmpgt( a, b ) );
  4. }

Не нашел и команды, которая приводит dword к uchar с saturation. Пришлось обратно эмулировать:

b = spu_min( spu_max( spu_splats( 0 ), b ), spu_splats( 255 ) );

Некрасиво.

“В Японии, в префектуре N, есть храм. На его резных дверях изображения сказочных птиц и зверей, которые были бы совершенны, если бы не отдельные элементы, грубо нарушающие гармонию узора. Но зачем они нужны? Чтобы боги не позавидовали…”