1$input v_color0, v_texcoord0 2 3// license:BSD-3-Clause 4// copyright-holders:Ryan Holtz 5 6#include "common.sh" 7 8// Samplers 9SAMPLER2D(s_tex, 0); 10 11#define round(X) floor((X)+0.5) 12 13uniform vec4 u_tex_size0; 14uniform vec4 u_inv_tex_size0; 15 16vec3 ycc_to_rgb(float y, float cb, float cr) 17{ 18 float r = saturate(y + 1.40200 * (cr - 0.5)); 19 float g = saturate(y - 0.34414 * (cb - 0.5) - 0.71414 * (cr - 0.5)); 20 float b = saturate(y + 1.77200 * (cb - 0.5)); 21 return vec3(r, g, b); 22} 23 24void main() 25{ 26 vec2 size_minus_one = u_tex_size0.xy - vec2(1.0, 1.0); 27 vec2 original_uv = round(v_texcoord0.xy * size_minus_one); 28 float mod_val = mod(original_uv.x, 2.0); 29 vec2 rounded_uv = round(vec2(original_uv.x - mod_val, original_uv.y)); 30 vec2 next_uv = rounded_uv + vec2(1.0, 0.0); 31 vec2 srcpix0 = texture2D(s_tex, rounded_uv / size_minus_one).rg; 32 vec2 srcpix1 = texture2D(s_tex, next_uv / size_minus_one).rg; 33 float cr = srcpix1.r; 34 float cb = srcpix0.r; 35 if (mod_val < 1.0) 36 gl_FragColor = vec4(ycc_to_rgb(srcpix0.g, cb, cr), 1.0) * v_color0; 37 else 38 gl_FragColor = vec4(ycc_to_rgb(srcpix1.g, cb, cr), 1.0) * v_color0; 39} 40