Уважемые господа форумчане.
Устал гуглить, может кто знает, как сделать лучше.
Я рисую пиксельную графику в Paint.Net - использую слои и разные режимы наложения, но при переносе в GM (у меня версия Standart Edition v1.4.1772) нет необходимых мне режимов смешивания. В связи с чем решил попробовать написать шейдеры соответствующие задаче -
для чего кстати весьма удобно использовать
www.shadertoy.comСуть проблемы: не понимаю, как передать шейдеру, то, что уже нарисовано на экране.
/// shd_color_doge : fragment
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform sampler2D bottom_texture;
void main()
{
// инвертируем текстуру спрайта
vec4 invertTop = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
invertTop.r = 1.0 - invertTop.r;
invertTop.g = 1.0 - invertTop.g;
invertTop.b = 1.0 - invertTop.b;
// преобразовываем исходную текстуру
vec4 result = texture2D(bottom_texture, v_vTexcoord);
result.r /= invertTop.r;
result.g /= invertTop.g;
result.b /= invertTop.b;
gl_FragColor = result;
}
идея была - дождаться, когда основная картинка нарисуется и передать шейдеру данные из application_surface при помощи события
Draw End
shader_set(shd_color_doge);
texture_set_stage(bottom_texture, surface_get_texture(application_surface));
draw_sprite(spr_flare, 0, mouse_x, mouse_y);
shader_reset();
В таком простом виде к сожалению не работает.
*(пробовал создать прослойку из еще одного surface - помогает, но получается очень громоздко и почему-то картинка рисуется периодически - мерцает)
Посоветуете, что-нибудь?)))