Beispiel #1
0
std::string get_fragment(bool blend_modes)
{
	return

	"#version 130																		\n"
	"uniform sampler2D	background;														\n"
	"uniform sampler2D	plane[4];														\n"
	"uniform vec2		plane_size[4];													\n"
	"uniform sampler2D	local_key;														\n"
	"uniform sampler2D	layer_key;														\n"
	"																					\n"
	"uniform bool		is_hd;															\n"
	"uniform bool		has_local_key;													\n"
	"uniform bool		has_layer_key;													\n"
	"uniform int		blend_mode;														\n"
	"uniform int		keyer;															\n"
	"uniform int		pixel_format;													\n"
	"uniform int		deinterlace;													\n"
	"																					\n"
	"uniform float		opacity;														\n"
	"uniform bool		levels;															\n"
	"uniform float		min_input;														\n"
	"uniform float		max_input;														\n"
	"uniform float		gamma;															\n"
	"uniform float		min_output;														\n"
	"uniform float		max_output;														\n"
	"																					\n"
	"uniform bool		csb;															\n"
	"uniform float		brt;															\n"
	"uniform float		sat;															\n"
	"uniform float		con;															\n"
	"																					\n"	

	+
		
	(blend_modes ? get_blend_color_func() : get_simple_blend_color_func())

	+
	
	"																					\n"
	"vec4 ycbcra_to_rgba_sd(float Y, float Cb, float Cr, float A)						\n"
	"{																					\n"
	"   vec4 rgba;																		\n"
	"   rgba.b = (1.164*(Y*255 - 16) + 1.596*(Cr*255 - 128))/255;						\n"
	"   rgba.g = (1.164*(Y*255 - 16) - 0.813*(Cr*255 - 128) - 0.391*(Cb*255 - 128))/255;\n"
	"   rgba.r = (1.164*(Y*255 - 16) + 2.018*(Cb*255 - 128))/255;						\n"
	"   rgba.a = A;																		\n"
	"	return rgba;																	\n"	
	"}																					\n"			
	"																					\n"
	"vec4 ycbcra_to_rgba_hd(float Y, float Cb, float Cr, float A)						\n"
	"{																					\n"
	"   vec4 rgba;																		\n"
	"   rgba.b = (1.164*(Y*255 - 16) + 1.793*(Cr*255 - 128))/255;						\n"
	"   rgba.g = (1.164*(Y*255 - 16) - 0.534*(Cr*255 - 128) - 0.213*(Cb*255 - 128))/255;\n"
	"   rgba.r = (1.164*(Y*255 - 16) + 2.115*(Cb*255 - 128))/255;						\n"
	"   rgba.a = A;																		\n"
	"	return rgba;																	\n"
	"}																					\n"					
	"																					\n"		
	"vec4 ycbcra_to_rgba(float y, float cb, float cr, float a)							\n"
	"{																					\n"
	"	if(is_hd)																		\n"
	"		return ycbcra_to_rgba_hd(y, cb, cr, a);										\n"
	"	else																			\n"
	"		return ycbcra_to_rgba_sd(y, cb, cr, a);										\n"
	"}																					\n"
	"																					\n"
	"vec4 get_sample(sampler2D sampler, vec2 coords, vec2 size)							\n"
	"{																					\n"
	"	switch(deinterlace)																\n"
	"	{																				\n"
	"	case 1: // upper																\n"
	"		return texture2D(sampler, coords);											\n"
	"	case 2: // lower																\n"
	"		return texture2D(sampler, coords);											\n"
	"	default:																		\n"
	"		return texture2D(sampler, coords);											\n"
	"	}																				\n"
	"}																					\n"
	"																					\n"
	"vec4 get_rgba_color()																\n"
	"{																					\n"
	"	switch(pixel_format)															\n"
	"	{																				\n"
	"	case 0:		//gray																\n"
	"		return vec4(get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).rrr, 1.0);\n"
	"	case 1:		//bgra,																\n"
	"		return get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).bgra;			\n"
	"	case 2:		//rgba,																\n"
	"		return get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).rgba;			\n"
	"	case 3:		//argb,																\n"
	"		return get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).argb;			\n"
	"	case 4:		//abgr,																\n"
	"		return get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).gbar;			\n"
	"	case 5:		//ycbcr,															\n"
	"		{																			\n"
	"			float y  = get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			float cb = get_sample(plane[1], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			float cr = get_sample(plane[2], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			return ycbcra_to_rgba(y, cb, cr, 1.0);									\n"
	"		}																			\n"
	"	case 6:		//ycbcra															\n"
	"		{																			\n"
	"			float y  = get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			float cb = get_sample(plane[1], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			float cr = get_sample(plane[2], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			float a  = get_sample(plane[3], gl_TexCoord[0].st, plane_size[0]).r;	\n"
	"			return ycbcra_to_rgba(y, cb, cr, a);									\n"
	"		}																			\n"
	"	case 7:		//luma																\n"
	"		{																			\n"
	"			vec3 y3 = get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).rrr;	\n"
	"			return vec4((y3-0.065)/0.859, 1.0);										\n"
	"		}																			\n"
	"	case 8:		//bgr,																\n"
	"		return vec4(get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).bgr, 1.0);\n"
	"	case 9:		//rgb,																\n"
	"		return vec4(get_sample(plane[0], gl_TexCoord[0].st, plane_size[0]).rgb, 1.0);\n"
	"	}																				\n"
	"	return vec4(0.0, 0.0, 0.0, 0.0);												\n"
	"}																					\n"
	"																					\n"
	"void main()																		\n"
	"{																					\n"
	"	vec4 color = get_rgba_color();													\n"
	"   if(levels)																		\n"
	"		color.rgb = LevelsControl(color.rgb, min_input, max_input, gamma, min_output, max_output); \n"
	"	if(csb)																			\n"
	"		color.rgb = ContrastSaturationBrightness(color.rgb, brt, sat, con);			\n"
	"	if(has_local_key)																\n"
	"		color *= texture2D(local_key, gl_TexCoord[1].st).r;							\n"
	"	if(has_layer_key)																\n"
	"		color *= texture2D(layer_key, gl_TexCoord[1].st).r;							\n"
	"	color *= opacity;																\n"
	"	color = blend(color);															\n"
	"	gl_FragColor = color.bgra;														\n"
	"}																					\n";
}
Beispiel #2
0
std::string get_fragment(bool blend_modes)
{
	return

	"#version 130																		\n"
	"uniform sampler2D	background;														\n"
	"uniform sampler2D	plane[4];														\n"
	"uniform sampler2D	local_key;														\n"
	"uniform sampler2D	layer_key;														\n"
	"																					\n"
	"uniform bool		is_hd;															\n"
	"uniform bool		has_local_key;													\n"
	"uniform bool		has_layer_key;													\n"
	"uniform int		blend_mode;														\n"
	"uniform int		keyer;															\n"
	"uniform int		pixel_format;													\n"
	"																					\n"
	"uniform float		opacity;														\n"
	"uniform bool		levels;															\n"
	"uniform float		min_input;														\n"
	"uniform float		max_input;														\n"
	"uniform float		gamma;															\n"
	"uniform float		min_output;														\n"
	"uniform float		max_output;														\n"
	"																					\n"
	"uniform bool		csb;															\n"
	"uniform float		brt;															\n"
	"uniform float		sat;															\n"
	"uniform float		con;															\n"
	"																					\n"	
	"uniform bool		post_processing;												\n"
	"uniform bool		straighten_alpha;												\n"
	"																					\n"	
    "uniform int        chroma_mode;                                                    \n"
    "uniform vec2       chroma_blend;                                                   \n"
    "uniform float      chroma_spill;                                                   \n"

	+
		
	(blend_modes ? get_blend_color_func() : get_simple_blend_color_func())


    +

    get_chroma_func()

	+
	
	"																					\n"
	"vec4 ycbcra_to_rgba_sd(float Y, float Cb, float Cr, float A)						\n"
	"{																					\n"
	"   vec4 rgba;																		\n"
	"   rgba.b = (1.164*(Y*255 - 16) + 1.596*(Cr*255 - 128))/255;						\n"
	"   rgba.g = (1.164*(Y*255 - 16) - 0.813*(Cr*255 - 128) - 0.391*(Cb*255 - 128))/255;\n"
	"   rgba.r = (1.164*(Y*255 - 16) + 2.018*(Cb*255 - 128))/255;						\n"
	"   rgba.a = A;																		\n"
	"	return rgba;																	\n"	
	"}																					\n"			
	"																					\n"
	"vec4 ycbcra_to_rgba_hd(float Y, float Cb, float Cr, float A)						\n"
	"{																					\n"
	"   vec4 rgba;																		\n"
	"   rgba.b = (1.164*(Y*255 - 16) + 1.793*(Cr*255 - 128))/255;						\n"
	"   rgba.g = (1.164*(Y*255 - 16) - 0.534*(Cr*255 - 128) - 0.213*(Cb*255 - 128))/255;\n"
	"   rgba.r = (1.164*(Y*255 - 16) + 2.115*(Cb*255 - 128))/255;						\n"
	"   rgba.a = A;																		\n"
	"	return rgba;																	\n"
	"}																					\n"			
	"																					\n"		
	"vec4 ycbcra_to_rgba(float y, float cb, float cr, float a)							\n"
	"{																					\n"
	"	if(is_hd)																		\n"
	"		return ycbcra_to_rgba_hd(y, cb, cr, a);										\n"
	"	else																			\n"
	"		return ycbcra_to_rgba_sd(y, cb, cr, a);										\n"
	"}																					\n"
	"																					\n"
	"vec4 get_rgba_color()																\n"
	"{																					\n"
	"	switch(pixel_format)															\n"
	"	{																				\n"
	"	case 0:		//gray																\n"
	"		return vec4(texture2D(plane[0], gl_TexCoord[0].st).rrr, 1.0);				\n"
	"	case 1:		//bgra,																\n"
	"		return texture2D(plane[0], gl_TexCoord[0].st).bgra;							\n"
	"	case 2:		//rgba,																\n"
	"		return texture2D(plane[0], gl_TexCoord[0].st).rgba;							\n"
	"	case 3:		//argb,																\n"
	"		return texture2D(plane[0], gl_TexCoord[0].st).argb;							\n"
	"	case 4:		//abgr,																\n"
	"		return texture2D(plane[0], gl_TexCoord[0].st).gbar;							\n"
	"	case 5:		//ycbcr,															\n"
	"		{																			\n"
	"			float y  = texture2D(plane[0], gl_TexCoord[0].st).r;					\n"
	"			float cb = texture2D(plane[1], gl_TexCoord[0].st).r;					\n"
	"			float cr = texture2D(plane[2], gl_TexCoord[0].st).r;					\n"
	"			return ycbcra_to_rgba(y, cb, cr, 1.0);									\n"
	"		}																			\n"
	"	case 6:		//ycbcra															\n"
	"		{																			\n"
	"			float y  = texture2D(plane[0], gl_TexCoord[0].st).r;					\n"
	"			float cb = texture2D(plane[1], gl_TexCoord[0].st).r;					\n"
	"			float cr = texture2D(plane[2], gl_TexCoord[0].st).r;					\n"
	"			float a  = texture2D(plane[3], gl_TexCoord[0].st).r;					\n"
	"			return ycbcra_to_rgba(y, cb, cr, a);									\n"
	"		}																			\n"
	"	case 7:		//luma																\n"
	"		{																			\n"
	"			vec3 y3 = texture2D(plane[0], gl_TexCoord[0].st).rrr;					\n"
	"			return vec4((y3-0.065)/0.859, 1.0);										\n"
	"		}																			\n"
	"	}																				\n"
	"	return vec4(0.0, 0.0, 0.0, 0.0);												\n"
	"}																					\n"
	"																					\n"
	"vec4 post_process()																\n"
	"{																					\n"
	"	vec4 color = texture2D(background, gl_TexCoord[0].st).bgra;						\n"
	"																					\n"
	"	if (straighten_alpha && color.a > 0.0 && color.a != 1.0)						\n"
	"		color.rgb /= color.a;														\n"
	"																					\n"
	"	return color;																	\n"
	"}																					\n"
	"																					\n"
	"void main()																		\n"
	"{																					\n"
	"	if (post_processing)															\n"
	"	{																				\n"
	"		gl_FragColor = post_process().bgra;											\n"
	"		return;																		\n"
	"	}																				\n"
	"																					\n"
	"	vec4 color = get_rgba_color();													\n"
	"   color = chroma_key(color);                                                      \n"
	"   if(levels)																		\n"
	"		color.rgb = LevelsControl(color.rgb, min_input, max_input, gamma, min_output, max_output); \n"
	"	if(csb)																			\n"
	"		color.rgb = ContrastSaturationBrightness(color, brt, sat, con);		\n"
	"	if(has_local_key)																\n"
	"		color *= texture2D(local_key, gl_TexCoord[1].st).r;							\n"
	"	if(has_layer_key)																\n"
	"		color *= texture2D(layer_key, gl_TexCoord[1].st).r;							\n"
	"	color *= opacity;																\n"
	"	color = blend(color);															\n"
	"	gl_FragColor = color.bgra;														\n"
	"}																					\n";
}