X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=ycbcr_input.frag;h=29f809d06e858752964df24ec7beba4d2e7b57d1;hp=fbf20d165df616f15af98fde6f0b0714675f51d5;hb=04ea19a8d042805d1483d1478a0dd74fb18eca24;hpb=7ea0b3a5be9bafaa2d1fa5a17ce285a725ce132b diff --git a/ycbcr_input.frag b/ycbcr_input.frag index fbf20d1..29f809d 100644 --- a/ycbcr_input.frag +++ b/ycbcr_input.frag @@ -1,6 +1,8 @@ -uniform sampler2D PREFIX(tex_y); -uniform sampler2D PREFIX(tex_cb); -uniform sampler2D PREFIX(tex_cr); +// Implicit uniforms: +// uniform sampler2D PREFIX(tex_y); +// uniform sampler2D PREFIX(tex_cbcr); // If CB_CR_SAME_TEXTURE. +// uniform sampler2D PREFIX(tex_cb); // If not CB_CR_SAME_TEXTURE. +// uniform sampler2D PREFIX(tex_cr); // If not CB_CR_SAME_TEXTURE. vec4 FUNCNAME(vec2 tc) { // OpenGL's origin is bottom-left, but most graphics software assumes @@ -9,12 +11,24 @@ vec4 FUNCNAME(vec2 tc) { tc.y = 1.0 - tc.y; vec3 ycbcr; +#if Y_CB_CR_SAME_TEXTURE + ycbcr = tex2D(PREFIX(tex_y), tc).xyz; +#else ycbcr.x = tex2D(PREFIX(tex_y), tc).x; + #if CB_CR_SAME_TEXTURE + #if CB_CR_OFFSETS_EQUAL + ycbcr.yz = tex2D(PREFIX(tex_cbcr), tc + PREFIX(cb_offset)).xy; + #else + ycbcr.y = tex2D(PREFIX(tex_cbcr), tc + PREFIX(cb_offset)).x; + ycbcr.z = tex2D(PREFIX(tex_cbcr), tc + PREFIX(cr_offset)).x; + #endif + #else ycbcr.y = tex2D(PREFIX(tex_cb), tc + PREFIX(cb_offset)).x; ycbcr.z = tex2D(PREFIX(tex_cr), tc + PREFIX(cr_offset)).x; + #endif +#endif ycbcr -= PREFIX(offset); - ycbcr *= PREFIX(scale); vec4 rgba; rgba.rgb = PREFIX(inv_ycbcr_matrix) * ycbcr;