про Pixel Bender и его применения для флешплеера

3 views
Skip to first unread message

Alexander Sergeyev

unread,
Nov 9, 2009, 3:56:29 PM11/9/09
to ruFlash
Приветствую, руФлеш!

В порядке экспериментов с ПиксельБендером в его родной среде
разработки реализовал несколько фильтров, и возрадовался, до чего же
мощная и универсальная штука. В той же степени огорчился, когда
попытался скомпилировать мои фильтры для флешплеера.
Массивы запрещены, циклы запрещены, рекурсивные вызовы функций явным
образом не запрещены, но если они есть, при компиляции пиксельбендер
выдает неведомую внутреннюю ошибку.
Кроме if ничего, практически, и не остается.
Мне этого не достаточно, чтобы самописные фильтры работали с ожидаемой
эффективностью.

У кого есть опыт хитрого обхождения ограничений ПиксельБендера для
флешплеера?

Daniil Tutubalin

unread,
Nov 11, 2009, 1:23:31 AM11/11/09
to ruf...@googlegroups.com
Всё, что запрещено для флеш плеера - именно запрещено.

В принципе, циклы можно развернуть, если они, конечно, не параметрические.
Т.е. например цикл

for (i=0; i<5; i++) doSomething(i);

нужно записать как

doSomething(0);
doSomething(1);
doSomething(2);
doSomething(3);
doSomething(4);

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

for (i=0; i<N; i++) doSomething(i);

превращается в:

if (N>0) doSomething(0);
if (N>1) doSomething(1);
if (N>2) doSomething(2);
if (N>3) doSomething(3);

Но следует помнить, что условный оператор - очень дорогой, так как
нарушает параллельность вычислений.

Alexander Sergeyev

unread,
Nov 11, 2009, 4:20:39 AM11/11/09
to ruFlash
Циклы как раз параметрические, и разворачивание с кучей навешенных if
это плохое, медленное решение.

Daniil Tutubalin

unread,
Nov 11, 2009, 5:15:20 AM11/11/09
to ruf...@googlegroups.com
Тогда только перестраивать алгоритм.
Например, если надо сложить в цикле N чисел, то складывать всегда,
скажем, 20 чисел, но лишние умножать на ноль.

Alexander Sergeyev

unread,
Nov 12, 2009, 3:03:32 AM11/12/09
to ruFlash
А насчет рекурсивного вызова функций, с этим не было успешного опыта?
Явным образом это нигде не запрещено.

Daniil Tutubalin

unread,
Nov 12, 2009, 3:56:34 AM11/12/09
to ruf...@googlegroups.com
Мне кажется в шейдерах для плешплеера вообще функции запрещены.
По крайней мере инструкцию вызова функции в байткоде не припомню, мне
кажется её нет.
Reply all
Reply to author
Forward
0 new messages