Основная функция в ядре пиксель-бендера представляет собой цикл и вызывается обратно для каждого пикселя, оцениваемого ядром. Вот ссылка на учебник о том, как делать то, что вы хотите (работа с несколькими входами).
http://www.adobe.com/devnet/pixelbender/articles/creating_effects_pt09.html#articlecontentAdobe_numberedheader
По сути, все сводится к определению двух входных данных:
<languageVersion : 1.0;>
kernel blendy
< namespace : "com.adobe.devnet.pixelbender";
vendor : "Kevin's Filters";
version : 1;
description : "mashes two inputs together";
>
{
input image4 src; //Input image 1 as image4 (RGBA)
input image4 src2; //Input image 2 as image4 (RGBA)
output pixel4 dst; //Single pixel data type/represents single pixel value (RGBA)
void evaluatePixel()
{
dst = sampleNearest(src,outCoord());
}
}
Обратите внимание, что двумя параметрами sampleNearest являются исходное изображение и координаты пикселя для выборки. outCoord () Я считаю, что это просто текущий пиксель в цикле. Как уже упоминалось, evaludatePixel (в моем понимании) вызывается один раз на пиксель, который существует на входе. Вот модифицированная версия приведенного выше кода (по ссылке), которая считывает значение обоих входов одновременно:
<languageVersion : 1.0;>
kernel blendy
< namespace : "com.adobe.devnet.pixelbender";
vendor : "Kevin's Filters";
version : 1;
description : "mashes two inputs together";
>
{
input image4 src; //Input image 1 as image4 (RGBA)
input image4 src2; //Input image 2 as image4 (RGBA)
output pixel4 dst; //Output image
void evaluatePixel()
{
dst = sampleNearest(src2,outCoord()) + sampleNearest(src, outCoord());
}
}
Вот два видеоурока, который расскажет намного больше о том, как пиксель работает в длину:
http://gotoandlearn.com/play.php?id=83
http://gotoandlearn.com/play.php?id=84
http://www.gotoandlearn.com/play.php?id=95