" \n" \r
"vec4 blend(vec4 fore) \n"\r
"{ \n"\r
- " if(blend_mode == 29) // replace \n"\r
- " return fore; \n"\r
- " vec4 back = texture2D(background, gl_TexCoord[1].st).bgra; \n"\r
+ " vec4 back = texture2D(background, gl_TexCoord[1].st).bgra; \n" \r
+ " \n" \r
+ " if(blend_mode == 29) // mix \n"\r
+ " return fore + back; \n"\r
+ " \n" \r
" fore.rgb = get_blend_color(back.rgb, fore.rgb); \n"\r
- " return vec4(mix(back.rgb, fore.rgb, fore.a), back.a + fore.a); \n"\r
- "} \n";\r
+ " return fore + (1.0-fore.a)*back; \n"\r
+ "} \n"; \r
}\r
\r
std::string get_simple_blend_color_func()\r
"{ \n"\r
" gl_TexCoord[0] = gl_MultiTexCoord0; \n"\r
" gl_TexCoord[1] = gl_MultiTexCoord1; \n"\r
- " gl_FrontColor = gl_Color; \n"\r
" gl_Position = ftransform(); \n"\r
"} \n";\r
}\r
"uniform bool has_local_key; \n"\r
"uniform bool has_layer_key; \n"\r
"uniform int blend_mode; \n"\r
+ "uniform int alpha_mode; \n"\r
"uniform int pixel_format; \n"\r
" \n"\r
+ "uniform float opacity; \n"\r
"uniform bool levels; \n"\r
"uniform float min_input; \n"\r
"uniform float max_input; \n"\r
" if(csb) \n"\r
" color.rgb = ContrastSaturationBrightness(color.rgb, brt, sat, con); \n"\r
" if(has_local_key) \n"\r
- " color.a *= texture2D(local_key, gl_TexCoord[1].st).r; \n"\r
+ " color *= texture2D(local_key, gl_TexCoord[1].st).r; \n"\r
" if(has_layer_key) \n"\r
- " color.a *= texture2D(layer_key, gl_TexCoord[1].st).r; \n"\r
- " color *= gl_Color; \n"\r
+ " color *= texture2D(layer_key, gl_TexCoord[1].st).r; \n"\r
+ " color *= opacity; \n"\r
" color = blend(color); \n"\r
" gl_FragColor = color.bgra; \n"\r
"} \n";\r