"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 interlace_mode; \n"\r
"uniform int pixel_format; \n"\r
" \n"\r
"uniform float sat; \n"\r
"uniform float con; \n"\r
" \n"\r
- "uniform bool desaturate; \n"\r
- "uniform float desaturation; \n"\r
\r
+\r
\r
" case 26: return BlendSaturation(back, fore); \n"\r
" case 27: return BlendColor(back, fore); \n"\r
" case 28: return BlendLuminosity(back, fore); \n"\r
+ " case 29: return BlendInvert(back, fore); \n"\r
" } \n"\r
" \n"\r
" return BlendNormal(back, fore); \n"\r
" \n" \r
"vec4 blend_color(vec4 fore) \n"\r
"{ \n"\r
+ " fore.rgb = fore.bgr; // bgr to rgb \n"\r
" vec4 back = texture2D(background, gl_TexCoord[1].st); \n"\r
- " if(desaturate) \n"\r
- " fore.rgb = Desaturate(fore.rgb, desaturation); \n"\r
" if(levels) \n"\r
" fore.rgb = LevelsControl(fore.rgb, min_input, max_input, gamma, min_output, max_output); \n"\r
" if(csb) \n"\r
" fore.rgb = ContrastSaturationBrightness(fore.rgb, brt, sat, con); \n"\r
- " fore.rgb = get_blend_color(back.rgb, fore.rgb); \n"\r
+ " fore.rgb = get_blend_color(back.bgr, fore.rgb); \n"\r
+ " fore.rgb = fore.bgr; // rgb to bgr \n"\r
+ " \n"\r
" return vec4(fore.rgb * fore.a + back.rgb * (1.0-fore.a), back.a + fore.a); \n"\r
"} \n"\r
" \n"\r
" case 1: // lower \n"\r
" { \n"\r
" bool odd = mod(floor(gl_FragCoord.y), 2.0) > 0.5; \n"\r
- " if(odd) \n"\r
+ " if(!odd) \n"\r
" discard; \n"\r
" break; \n"\r
" } \n"\r
" case 2: //upper \n"\r
" { \n"\r
" bool odd = mod(floor(gl_FragCoord.y), 2.0) > 0.5; \n"\r
- " if(!odd) \n"\r
+ " if(odd) \n"\r
" discard; \n"\r
" break; \n"\r
" } \n"\r
shader_->set("local_key", 4);\r
shader_->set("layer_key", 5);\r
shader_->set("background", 6);\r
- shader_->set("gain", static_cast<GLfloat>(transform.get_gain()));\r
+ shader_->set("gain", transform.get_gain());\r
shader_->set("is_hd", pix_desc.planes.at(0).height > 700 ? 1 : 0);\r
shader_->set("has_local_key", local_key ? 1 : 0);\r
shader_->set("has_layer_key", layer_key ? 1 : 0);\r
shader_->set("blend_mode", transform.get_blend_mode());\r
+ shader_->set("alpha_mode", transform.get_alpha_mode());\r
shader_->set("interlace_mode", transform.get_mode());\r
shader_->set("pixel_format", pix_desc.pix_fmt); \r
\r
- shader_->set("levels", false); \r
- shader_->set("csb", false); \r
- shader_->set("desaturate", false); \r
+ auto levels = transform.get_levels();\r
\r
+ if(levels.min_input > 0.001 ||\r
+ levels.max_input < 0.999 ||\r
+ levels.min_output > 0.001 ||\r
+ levels.max_output < 0.999 ||\r
+ std::abs(levels.gamma - 1.0) > 0.001)\r
+ {\r
+ shader_->set("levels", true); \r
+ shader_->set("min_input", levels.min_input); \r
+ shader_->set("max_input", levels.max_input);\r
+ shader_->set("min_output", levels.min_output);\r
+ shader_->set("max_output", levels.max_output);\r
+ shader_->set("gamma", levels.gamma);\r
+ }\r
+ else\r
+ shader_->set("levels", false); \r
+\r
+ if(std::abs(transform.get_brightness() - 1.0) > 0.001 ||\r
+ std::abs(transform.get_saturation() - 1.0) > 0.001 ||\r
+ std::abs(transform.get_contrast() - 1.0) > 0.001)\r
+ {\r
+ shader_->set("csb", true); \r
+ \r
+ shader_->set("brt", transform.get_brightness()); \r
+ shader_->set("sat", transform.get_saturation());\r
+ shader_->set("con", transform.get_contrast());\r
+ }\r
+ else\r
+ shader_->set("csb", false); \r
+ \r
// Setup drawing area\r
\r
GL(glColor4d(1.0, 1.0, 1.0, transform.get_opacity()));\r