Самый быстрый способ рисовать [полутоновое растровое изображение * colorValue] в дополнение к экрану на Android - PullRequest
0 голосов
/ 13 сентября 2011

Я хочу сделать несколько альфа-битовых изображений в градациях серого со значением цвета RGB, а затем нарисовать результирующее растровое изображение RGB для дополнительного скрининга, то есть для каждого нужного пикселя:

p_new[r/g/b] = p_old[r/g/b] + colorValue[r/g/b] * grayscaleBitmapValue

Я знаю, что могу создать промежуточное растровое изображение RGB или удержание текстуры (colorValue [r / g / b] * grayscaleBitmapValue), но я бы предпочел избежать этого расточительного шага, если это возможно, потому что каждое альфа-изображение будет умножено на довольно количество различных значений цвета.

Какой самый быстрый способ сделать это в 2D или OpenGL ES?

1 Ответ

1 голос
/ 13 сентября 2011

Для 2D-рисования настройте объект Paint следующим образом:

paint.setColorFilter(
    new PorterDuffColorFilter(colorValue, PorterDuff.Mode.MULTIPLY));
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD));

Для OpenGL ваш фрагментный шейдер может выглядеть так:

varying vec2 texcoord;
uniform sampler2D texture;
uniform vec4 multColor;
void main() {
    gl_FragColor = texture2D(texture, texcoord)*multColor;
}

... и вызовите glBlendFunc (GL_ONE, GL_ONE) для выполнения аддитивного смешивания.

...