forked from enlightenment/efl
Evas masking: Add support for YUV, YUY2, NV12 masking in GL
RGB+A masking needs to be implemented, because there's a clash (only one texture name "texa" is available).
This commit is contained in:
parent
a2604956f9
commit
6552e8a6cc
|
@ -691,6 +691,14 @@ modules/evas/engines/gl_common/shader/img_mask_bgra_frag.shd \
|
|||
modules/evas/engines/gl_common/shader/img_mask_bgra_vert.shd \
|
||||
modules/evas/engines/gl_common/shader/img_mask_bgra_nomul_frag.shd \
|
||||
modules/evas/engines/gl_common/shader/img_mask_bgra_nomul_vert.shd \
|
||||
modules/evas/engines/gl_common/shader/yuv_mask_frag.shd \
|
||||
modules/evas/engines/gl_common/shader/yuv_mask_vert.shd \
|
||||
modules/evas/engines/gl_common/shader/nv12_mask_frag.shd \
|
||||
modules/evas/engines/gl_common/shader/nv12_mask_vert.shd \
|
||||
modules/evas/engines/gl_common/shader/yuy2_mask_frag.shd \
|
||||
modules/evas/engines/gl_common/shader/yuy2_mask_vert.shd \
|
||||
modules/evas/engines/gl_common/shader/rgb_a_pair_mask_frag.shd \
|
||||
modules/evas/engines/gl_common/shader/rgb_a_pair_mask_vert.shd \
|
||||
$(NULL)
|
||||
|
||||
EXTRA_DIST += \
|
||||
|
|
|
@ -2068,7 +2068,7 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
int r, int g, int b, int a,
|
||||
Eina_Bool smooth)
|
||||
{
|
||||
int pnum, nv, nc, nu, nu2, nu3, i;
|
||||
int pnum, nv, nc, nu, nu2, nu3, na, i;
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Eina_Bool blend = 0;
|
||||
GLuint prog;
|
||||
|
@ -2076,10 +2076,9 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
|
||||
if (a < 255) blend = 1;
|
||||
|
||||
#warning YUV+mask
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a, !!mtex,
|
||||
SHADER_YUV_NOMUL, SHADER_YUV,
|
||||
SHADER_YUV_NOMUL, SHADER_YUV)].prog;
|
||||
SHADER_YUV_MASK, SHADER_YUV_MASK)].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(RTYPE_YUV,
|
||||
gc, tex,
|
||||
|
@ -2093,6 +2092,7 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].shader.cur_tex = tex->pt->texture;
|
||||
gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
|
||||
gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
|
||||
gc->pipe[pn].shader.cur_texa = mtex ? mtex->pt->texture : 0;
|
||||
gc->pipe[pn].shader.cur_prog = prog;
|
||||
gc->pipe[pn].shader.smooth = smooth;
|
||||
gc->pipe[pn].shader.blend = blend;
|
||||
|
@ -2108,13 +2108,13 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv = 1;
|
||||
gc->pipe[pn].array.use_texuv2 = 1;
|
||||
gc->pipe[pn].array.use_texuv3 = 1;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texa = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
|
||||
pnum = gc->pipe[pn].array.num;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; na = pnum * 2;
|
||||
nu2 = pnum * 2; nu3 = pnum * 2;
|
||||
gc->pipe[pn].array.num += 6;
|
||||
array_alloc(gc, pn);
|
||||
|
@ -2161,6 +2161,22 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_TEXUV3(pn, t2x2, t2y2);
|
||||
PUSH_TEXUV3(pn, t2x1, t2y2);
|
||||
|
||||
if (mtex)
|
||||
{
|
||||
t2x1 = (mtex->x + mx) / (double)mtex->pt->w;
|
||||
t2y1 = (mtex->y + my) / (double)mtex->pt->h;
|
||||
t2x2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
|
||||
t2y2 = (mtex->y + my + mh) / (double)mtex->pt->h;
|
||||
|
||||
PUSH_TEXA(pn, t2x1, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y2);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
PUSH_COLOR(pn, r, g, b, a);
|
||||
|
@ -2176,7 +2192,7 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
int r, int g, int b, int a,
|
||||
Eina_Bool smooth)
|
||||
{
|
||||
int pnum, nv, nc, nu, nu2, i;
|
||||
int pnum, nv, nc, nu, nu2, na, i;
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Eina_Bool blend = 0;
|
||||
GLuint prog;
|
||||
|
@ -2184,10 +2200,9 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
|
||||
if (a < 255) blend = 1;
|
||||
|
||||
#warning mask
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a, !!mtex,
|
||||
SHADER_YUY2_NOMUL, SHADER_YUY2,
|
||||
SHADER_YUY2_NOMUL, SHADER_YUY2)].prog;
|
||||
SHADER_YUY2_MASK, SHADER_YUY2_MASK)].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(RTYPE_YUY2,
|
||||
gc, tex,
|
||||
|
@ -2200,6 +2215,7 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].region.type = RTYPE_YUY2;
|
||||
gc->pipe[pn].shader.cur_tex = tex->pt->texture;
|
||||
gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
|
||||
gc->pipe[pn].shader.cur_texa = mtex ? mtex->pt->texture : 0;
|
||||
gc->pipe[pn].shader.cur_prog = prog;
|
||||
gc->pipe[pn].shader.smooth = smooth;
|
||||
gc->pipe[pn].shader.blend = blend;
|
||||
|
@ -2215,13 +2231,13 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv = 1;
|
||||
gc->pipe[pn].array.use_texuv2 = 1;
|
||||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texa = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
|
||||
pnum = gc->pipe[pn].array.num;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; na = pnum * 2;
|
||||
nu2 = pnum * 2;
|
||||
gc->pipe[pn].array.num += 6;
|
||||
array_alloc(gc, pn);
|
||||
|
@ -2260,6 +2276,22 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_TEXUV2(pn, t2x2, t2y2);
|
||||
PUSH_TEXUV2(pn, t2x1, t2y2);
|
||||
|
||||
if (mtex)
|
||||
{
|
||||
t2x1 = (mtex->x + mx) / (double)mtex->pt->w;
|
||||
t2y1 = (mtex->y + my) / (double)mtex->pt->h;
|
||||
t2x2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
|
||||
t2y2 = (mtex->y + my + mh) / (double)mtex->pt->h;
|
||||
|
||||
PUSH_TEXA(pn, t2x1, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y2);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
PUSH_COLOR(pn, r, g, b, a);
|
||||
|
@ -2275,7 +2307,7 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
int r, int g, int b, int a,
|
||||
Eina_Bool smooth)
|
||||
{
|
||||
int pnum, nv, nc, nu, nu2, i;
|
||||
int pnum, nv, nc, nu, nu2, na, i;
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Eina_Bool blend = 0;
|
||||
GLuint prog;
|
||||
|
@ -2283,10 +2315,9 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
|
||||
if (a < 255) blend = 1;
|
||||
|
||||
#warning mask
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a, !!mtex,
|
||||
SHADER_NV12_NOMUL, SHADER_NV12,
|
||||
SHADER_NV12_NOMUL, SHADER_NV12)].prog;
|
||||
SHADER_NV12_MASK, SHADER_NV12_MASK)].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(RTYPE_NV12,
|
||||
gc, tex,
|
||||
|
@ -2301,6 +2332,7 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].shader.cur_tex_dyn = tex->pt->dyn.img;
|
||||
gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
|
||||
gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
|
||||
gc->pipe[pn].shader.cur_texa = mtex ? mtex->pt->texture : 0;
|
||||
gc->pipe[pn].shader.cur_prog = prog;
|
||||
gc->pipe[pn].shader.smooth = smooth;
|
||||
gc->pipe[pn].shader.blend = blend;
|
||||
|
@ -2316,13 +2348,13 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv = 1;
|
||||
gc->pipe[pn].array.use_texuv2 = 1;
|
||||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texa = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
|
||||
pnum = gc->pipe[pn].array.num;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; na = pnum * 2;
|
||||
nu2 = pnum * 2;
|
||||
gc->pipe[pn].array.num += 6;
|
||||
array_alloc(gc, pn);
|
||||
|
@ -2361,6 +2393,22 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_TEXUV2(pn, t2x2, t2y2);
|
||||
PUSH_TEXUV2(pn, t2x1, t2y2);
|
||||
|
||||
if (mtex)
|
||||
{
|
||||
t2x1 = (mtex->x + mx) / (double)mtex->pt->w;
|
||||
t2y1 = (mtex->y + my) / (double)mtex->pt->h;
|
||||
t2x2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
|
||||
t2y2 = (mtex->y + my + mh) / (double)mtex->pt->h;
|
||||
|
||||
PUSH_TEXA(pn, t2x1, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y2);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
PUSH_COLOR(pn, r, g, b, a);
|
||||
|
@ -2390,11 +2438,10 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|||
GLuint prog;
|
||||
int pn;
|
||||
|
||||
#warning rgba+a+mask
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice
|
||||
(0, NULL, r, g, b, a, !!mtex,
|
||||
SHADER_RGB_A_PAIR_NOMUL, SHADER_RGB_A_PAIR,
|
||||
SHADER_RGB_A_PAIR_NOMUL, SHADER_RGB_A_PAIR)].prog;
|
||||
SHADER_RGB_A_PAIR_MASK, SHADER_RGB_A_PAIR_MASK)].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(RTYPE_IMAGE,
|
||||
gc, tex,
|
||||
|
@ -2407,6 +2454,8 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].region.type = RTYPE_IMAGE;
|
||||
gc->pipe[pn].shader.cur_tex = tex->pt->texture;
|
||||
gc->pipe[pn].shader.cur_texa = tex->pta->texture;
|
||||
#warning FIXME: must add texm instead
|
||||
//gc->pipe[pn].shader.cur_texu = mtex ? mtex->pt->texture : 0;
|
||||
gc->pipe[pn].shader.cur_prog = prog;
|
||||
gc->pipe[pn].shader.smooth = smooth;
|
||||
gc->pipe[pn].shader.blend = EINA_TRUE;
|
||||
|
@ -2468,6 +2517,24 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_TEXA(pn, t2x2, t2y2);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
|
||||
/*
|
||||
if (mtex)
|
||||
{
|
||||
t2x1 = (mtex->x + mx) / (double)mtex->pt->w;
|
||||
t2y1 = (mtex->y + my) / (double)mtex->pt->h;
|
||||
t2x2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
|
||||
t2y2 = (mtex->y + my + mh) / (double)mtex->pt->h;
|
||||
|
||||
PUSH_TEXM(pn, t2x1, t2y1);
|
||||
PUSH_TEXM(pn, t2x2, t2y1);
|
||||
PUSH_TEXM(pn, t2x1, t2y2);
|
||||
|
||||
PUSH_TEXM(pn, t2x2, t2y1);
|
||||
PUSH_TEXM(pn, t2x2, t2y2);
|
||||
PUSH_TEXM(pn, t2x1, t2y2);
|
||||
}
|
||||
*/
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
PUSH_COLOR(pn, r, g, b, a);
|
||||
|
@ -2485,7 +2552,7 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool smooth, Eina_Bool tex_only,
|
||||
Evas_Colorspace cspace)
|
||||
{
|
||||
int pnum, nv, nc, nu, nu2, nu3, i;
|
||||
int pnum, nv, nc, nu, nu2, nu3, na, i;
|
||||
const int points[6] = { 0, 1, 2, 0, 2, 3 };
|
||||
int x = 0, y = 0, w = 0, h = 0, px = 0, py = 0;
|
||||
GLfloat tx[4], ty[4], t2x[4], t2y[4];
|
||||
|
@ -2520,23 +2587,25 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
case EVAS_COLORSPACE_YCBCR422P709_PL:
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a, !!mtex,
|
||||
SHADER_YUV_NOMUL, SHADER_YUV,
|
||||
SHADER_YUV_NOMUL, SHADER_YUV)].prog;
|
||||
SHADER_YUV_MASK, SHADER_YUV_MASK)].prog;
|
||||
utexture = EINA_TRUE;
|
||||
break;
|
||||
case EVAS_COLORSPACE_YCBCR422601_PL:
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a, !!mtex,
|
||||
SHADER_YUY2_NOMUL, SHADER_YUY2,
|
||||
SHADER_YUY2_NOMUL, SHADER_YUY2)].prog;
|
||||
SHADER_YUY2_MASK, SHADER_YUY2_MASK)].prog;
|
||||
uvtexture = EINA_TRUE;
|
||||
break;
|
||||
case EVAS_COLORSPACE_YCBCR420NV12601_PL:
|
||||
case EVAS_COLORSPACE_YCBCR420TM12601_PL:
|
||||
prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a, !!mtex,
|
||||
SHADER_NV12_NOMUL, SHADER_NV12,
|
||||
SHADER_NV12_NOMUL, SHADER_NV12)].prog;
|
||||
SHADER_NV12_MASK, SHADER_NV12_MASK)].prog;
|
||||
uvtexture = EINA_TRUE;
|
||||
break;
|
||||
|
||||
// FIXME: Add RGB+A support
|
||||
|
||||
default:
|
||||
if (tex_only)
|
||||
{
|
||||
|
@ -2653,6 +2722,7 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
|
||||
gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
|
||||
}
|
||||
gc->pipe[pn].shader.cur_texa = mtex ? mtex->pt->texture : 0;
|
||||
gc->pipe[pn].shader.cur_prog = prog;
|
||||
gc->pipe[pn].shader.smooth = smooth;
|
||||
gc->pipe[pn].shader.blend = blend;
|
||||
|
@ -2668,13 +2738,13 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv = 1;
|
||||
gc->pipe[pn].array.use_texuv2 = (utexture || uvtexture) ? 1 : 0;
|
||||
gc->pipe[pn].array.use_texuv3 = (utexture) ? 1 : 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texa = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
|
||||
pnum = gc->pipe[pn].array.num;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nu2 = pnum * 2;
|
||||
nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nu2 = pnum * 2; na = pnum * 2;
|
||||
nu2 = pnum * 2; nu3 = pnum * 2;
|
||||
gc->pipe[pn].array.num += 6;
|
||||
array_alloc(gc, pn);
|
||||
|
@ -2733,6 +2803,25 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
B_VAL(&cl),
|
||||
A_VAL(&cl));
|
||||
}
|
||||
|
||||
if (mtex)
|
||||
{
|
||||
GLfloat t2x1, t2y1, t2x2, t2y2;
|
||||
|
||||
t2x1 = (mtex->x + mx) / (double)mtex->pt->w;
|
||||
t2y1 = (mtex->y + my) / (double)mtex->pt->h;
|
||||
t2x2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
|
||||
t2y2 = (mtex->y + my + mh) / (double)mtex->pt->h;
|
||||
|
||||
PUSH_TEXA(pn, t2x1, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
|
||||
PUSH_TEXA(pn, t2x2, t2y1);
|
||||
PUSH_TEXA(pn, t2x2, t2y2);
|
||||
PUSH_TEXA(pn, t2x1, t2y2);
|
||||
}
|
||||
|
||||
if (!flat)
|
||||
{
|
||||
shader_array_flush(gc);
|
||||
|
|
|
@ -49,5 +49,9 @@ typedef enum {
|
|||
SHADER_IMG_MASK_NOMUL,
|
||||
SHADER_IMG_MASK_BGRA,
|
||||
SHADER_IMG_MASK_BGRA_NOMUL,
|
||||
SHADER_YUV_MASK,
|
||||
SHADER_NV12_MASK,
|
||||
SHADER_YUY2_MASK,
|
||||
SHADER_RGB_A_PAIR_MASK,
|
||||
SHADER_LAST
|
||||
} Evas_GL_Shader;
|
||||
|
|
|
@ -2423,6 +2423,239 @@ Evas_GL_Program_Source shader_img_mask_bgra_nomul_vert_src =
|
|||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/yuv_mask_frag.shd */
|
||||
static const char const yuv_mask_frag_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
|
||||
"precision highp float;\n"
|
||||
"#else\n"
|
||||
"precision mediump float;\n"
|
||||
"#endif\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2D tex, texu, texv, texa;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 tex_c, tex_c2, tex_c3, tex_a;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" float r, g, b, y, u, v;\n"
|
||||
" y = texture2D(tex, tex_c.xy).r;\n"
|
||||
" u = texture2D(texu, tex_c2.xy).r;\n"
|
||||
" v = texture2D(texv, tex_c3.xy).r;\n"
|
||||
" y = (y - 0.0625) * 1.164;\n"
|
||||
" u = u - 0.5;\n"
|
||||
" v = v - 0.5;\n"
|
||||
" r = y + (1.402 * v);\n"
|
||||
" g = y - (0.34414 * u) - (0.71414 * v);\n"
|
||||
" b = y + (1.772 * u);\n"
|
||||
" gl_FragColor = vec4(r, g, b, 1.0) * texture2D(texa, tex_a.xy).a * col;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_yuv_mask_frag_src =
|
||||
{
|
||||
yuv_mask_frag_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/yuv_mask_vert.shd */
|
||||
static const char const yuv_mask_vert_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"precision highp float;\n"
|
||||
"#endif\n"
|
||||
"attribute vec4 vertex;\n"
|
||||
"attribute vec4 color;\n"
|
||||
"attribute vec2 tex_coord, tex_coord2, tex_coord3, tex_coorda;\n"
|
||||
"uniform mat4 mvp;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 tex_c, tex_c2, tex_c3, tex_a;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = mvp * vertex;\n"
|
||||
" col = color;\n"
|
||||
" tex_c = tex_coord;\n"
|
||||
" tex_c2 = tex_coord2;\n"
|
||||
" tex_c3 = tex_coord3;\n"
|
||||
" tex_a = tex_coorda;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_yuv_mask_vert_src =
|
||||
{
|
||||
yuv_mask_vert_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/nv12_mask_frag.shd */
|
||||
static const char const nv12_mask_frag_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
|
||||
"precision highp float;\n"
|
||||
"#else\n"
|
||||
"precision mediump float;\n"
|
||||
"#endif\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2D tex, texuv, texa;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 tex_c, tex_cuv, tex_a;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" float y,u,v,vmu,r,g,b;\n"
|
||||
" y=texture2D(tex,tex_c).g;\n"
|
||||
" u=texture2D(texuv,tex_cuv).g;\n"
|
||||
" v=texture2D(texuv,tex_cuv).a;\n"
|
||||
" u=u-0.5;\n"
|
||||
" v=v-0.5;\n"
|
||||
" vmu=v*0.813+u*0.391;\n"
|
||||
" u=u*2.018;\n"
|
||||
" v=v*1.596;\n"
|
||||
" y=(y-0.062)*1.164;\n"
|
||||
" r=y+v;\n"
|
||||
" g=y-vmu;\n"
|
||||
" b=y+u;\n"
|
||||
" gl_FragColor = vec4(r,g,b,1.0) * texture2D(texa, tex_a.xy).a * col;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_nv12_mask_frag_src =
|
||||
{
|
||||
nv12_mask_frag_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/nv12_mask_vert.shd */
|
||||
static const char const nv12_mask_vert_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"precision highp float;\n"
|
||||
"#endif\n"
|
||||
"attribute vec4 vertex;\n"
|
||||
"attribute vec4 color;\n"
|
||||
"attribute vec2 tex_coord, tex_coord2, tex_coorda;\n"
|
||||
"uniform mat4 mvp;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 tex_c, tex_cuv, tex_a;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = mvp * vertex;\n"
|
||||
" col = color;\n"
|
||||
" tex_c = tex_coord;\n"
|
||||
" tex_cuv = tex_coord2 * 0.5;\n"
|
||||
" tex_a = tex_coorda;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_nv12_mask_vert_src =
|
||||
{
|
||||
nv12_mask_vert_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/yuy2_mask_frag.shd */
|
||||
static const char const yuy2_mask_frag_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
|
||||
"precision highp float;\n"
|
||||
"#else\n"
|
||||
"precision mediump float;\n"
|
||||
"#endif\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2D tex, texuv, texa;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 tex_c, tex_cuv, tex_a;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" float y,u,v,vmu,r,g,b;\n"
|
||||
" y=texture2D(tex,tex_c).r;\n"
|
||||
" u=texture2D(texuv,tex_cuv).g;\n"
|
||||
" v=texture2D(texuv,tex_cuv).a;\n"
|
||||
" u=u-0.5;\n"
|
||||
" v=v-0.5;\n"
|
||||
" vmu=v*0.813+u*0.391;\n"
|
||||
" u=u*2.018;\n"
|
||||
" v=v*1.596;\n"
|
||||
" r=y+v;\n"
|
||||
" g=y-vmu;\n"
|
||||
" b=y+u;\n"
|
||||
" gl_FragColor = vec4(r,g,b,1.0) * texture2D(texa, tex_a.xy).a * col;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_yuy2_mask_frag_src =
|
||||
{
|
||||
yuy2_mask_frag_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/yuy2_mask_vert.shd */
|
||||
static const char const yuy2_mask_vert_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"precision highp float;\n"
|
||||
"#endif\n"
|
||||
"attribute vec4 vertex;\n"
|
||||
"attribute vec4 color;\n"
|
||||
"attribute vec2 tex_coord, tex_coord2, tex_coorda;\n"
|
||||
"uniform mat4 mvp;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 tex_c, tex_cuv, tex_a;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = mvp * vertex;\n"
|
||||
" col = color;\n"
|
||||
" tex_c = tex_coord;\n"
|
||||
" tex_cuv = vec2(tex_coord2.x * 0.5, tex_coord2.y);\n"
|
||||
" tex_a = tex_coorda;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_yuy2_mask_vert_src =
|
||||
{
|
||||
yuy2_mask_vert_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/rgb_a_pair_mask_frag.shd */
|
||||
static const char const rgb_a_pair_mask_frag_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
|
||||
"precision highp float;\n"
|
||||
"#else\n"
|
||||
"precision mediump float;\n"
|
||||
"#endif\n"
|
||||
"#endif\n"
|
||||
"uniform sampler2D tex;\n"
|
||||
"uniform sampler2D texa;\n"
|
||||
"uniform sampler2D texm;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 coord_c;\n"
|
||||
"varying vec2 coord_a;\n"
|
||||
"varying vec2 coord_m;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_FragColor.rgb = texture2D(tex, coord_c.xy).rgb * col.rgb * texture2D(texa, coord_a).g * texture2D(texm, coord_m.xy).a;\n"
|
||||
" gl_FragColor.a = col.a * texture2D(texa, coord_a).g * texture2D(texm, coord_m.xy).a;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_rgb_a_pair_mask_frag_src =
|
||||
{
|
||||
rgb_a_pair_mask_frag_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
/* Source: modules/evas/engines/gl_common/shader/rgb_a_pair_mask_vert.shd */
|
||||
static const char const rgb_a_pair_mask_vert_glsl[] =
|
||||
"#ifdef GL_ES\n"
|
||||
"precision highp float;\n"
|
||||
"#endif\n"
|
||||
"attribute vec4 vertex;\n"
|
||||
"attribute vec4 color;\n"
|
||||
"attribute vec2 tex_coord;\n"
|
||||
"attribute vec2 tex_coorda;\n"
|
||||
"attribute vec2 tex_coordm;\n"
|
||||
"uniform mat4 mvp;\n"
|
||||
"varying vec4 col;\n"
|
||||
"varying vec2 coord_c;\n"
|
||||
"varying vec2 coord_a;\n"
|
||||
"varying vec2 coord_m;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = mvp * vertex;\n"
|
||||
" col = color;\n"
|
||||
" coord_c = tex_coord;\n"
|
||||
" coord_a = tex_coorda;\n"
|
||||
" coord_m = tex_coordm;\n"
|
||||
"}\n";
|
||||
Evas_GL_Program_Source shader_rgb_a_pair_mask_vert_src =
|
||||
{
|
||||
rgb_a_pair_mask_vert_glsl,
|
||||
NULL, 0
|
||||
};
|
||||
|
||||
static const struct {
|
||||
Evas_GL_Shader id;
|
||||
Evas_GL_Program_Source *vert;
|
||||
|
@ -2476,5 +2709,9 @@ static const struct {
|
|||
{ SHADER_IMG_MASK_NOMUL, &(shader_img_mask_nomul_vert_src), &(shader_img_mask_nomul_frag_src), "img_mask_nomul" },
|
||||
{ SHADER_IMG_MASK_BGRA, &(shader_img_mask_bgra_vert_src), &(shader_img_mask_bgra_frag_src), "img_mask_bgra" },
|
||||
{ SHADER_IMG_MASK_BGRA_NOMUL, &(shader_img_mask_bgra_nomul_vert_src), &(shader_img_mask_bgra_nomul_frag_src), "img_mask_bgra_nomul" },
|
||||
{ SHADER_YUV_MASK, &(shader_yuv_mask_vert_src), &(shader_yuv_mask_frag_src), "yuv_mask" },
|
||||
{ SHADER_NV12_MASK, &(shader_nv12_mask_vert_src), &(shader_nv12_mask_frag_src), "nv12_mask" },
|
||||
{ SHADER_YUY2_MASK, &(shader_yuy2_mask_vert_src), &(shader_yuy2_mask_frag_src), "yuy2_mask" },
|
||||
{ SHADER_RGB_A_PAIR_MASK, &(shader_rgb_a_pair_mask_vert_src), &(shader_rgb_a_pair_mask_frag_src), "rgb_a_pair_mask" },
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
#ifdef GL_ES
|
||||
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||
precision highp float;
|
||||
#else
|
||||
precision mediump float;
|
||||
#endif
|
||||
#endif
|
||||
uniform sampler2D tex, texuv, texa;
|
||||
varying vec4 col;
|
||||
varying vec2 tex_c, tex_cuv, tex_a;
|
||||
void main()
|
||||
{
|
||||
float y,u,v,vmu,r,g,b;
|
||||
y=texture2D(tex,tex_c).g;
|
||||
u=texture2D(texuv,tex_cuv).g;
|
||||
v=texture2D(texuv,tex_cuv).a;
|
||||
|
||||
u=u-0.5;
|
||||
v=v-0.5;
|
||||
vmu=v*0.813+u*0.391;
|
||||
u=u*2.018;
|
||||
v=v*1.596;
|
||||
y=(y-0.062)*1.164;
|
||||
|
||||
r=y+v;
|
||||
g=y-vmu;
|
||||
b=y+u;
|
||||
|
||||
gl_FragColor = vec4(r,g,b,1.0) * texture2D(texa, tex_a.xy).a * col;
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#ifdef GL_ES
|
||||
precision highp float;
|
||||
#endif
|
||||
attribute vec4 vertex;
|
||||
attribute vec4 color;
|
||||
attribute vec2 tex_coord, tex_coord2, tex_coorda;
|
||||
uniform mat4 mvp;
|
||||
varying vec4 col;
|
||||
varying vec2 tex_c, tex_cuv, tex_a;
|
||||
void main()
|
||||
{
|
||||
gl_Position = mvp * vertex;
|
||||
col = color;
|
||||
tex_c = tex_coord;
|
||||
tex_cuv = tex_coord2 * 0.5;
|
||||
tex_a = tex_coorda;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#ifdef GL_ES
|
||||
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||
precision highp float;
|
||||
#else
|
||||
precision mediump float;
|
||||
#endif
|
||||
#endif
|
||||
uniform sampler2D tex;
|
||||
uniform sampler2D texa;
|
||||
uniform sampler2D texm;
|
||||
varying vec4 col;
|
||||
varying vec2 coord_c;
|
||||
varying vec2 coord_a;
|
||||
varying vec2 coord_m;
|
||||
void main()
|
||||
{
|
||||
gl_FragColor.rgb = texture2D(tex, coord_c.xy).rgb * col.rgb * texture2D(texa, coord_a).g * texture2D(texm, coord_m.xy).a;
|
||||
gl_FragColor.a = col.a * texture2D(texa, coord_a).g * texture2D(texm, coord_m.xy).a;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#ifdef GL_ES
|
||||
precision highp float;
|
||||
#endif
|
||||
attribute vec4 vertex;
|
||||
attribute vec4 color;
|
||||
attribute vec2 tex_coord;
|
||||
attribute vec2 tex_coorda;
|
||||
attribute vec2 tex_coordm;
|
||||
uniform mat4 mvp;
|
||||
varying vec4 col;
|
||||
varying vec2 coord_c;
|
||||
varying vec2 coord_a;
|
||||
varying vec2 coord_m;
|
||||
void main()
|
||||
{
|
||||
gl_Position = mvp * vertex;
|
||||
col = color;
|
||||
coord_c = tex_coord;
|
||||
coord_a = tex_coorda;
|
||||
coord_m = tex_coordm;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#ifdef GL_ES
|
||||
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||
precision highp float;
|
||||
#else
|
||||
precision mediump float;
|
||||
#endif
|
||||
#endif
|
||||
uniform sampler2D tex, texu, texv, texa;
|
||||
varying vec4 col;
|
||||
varying vec2 tex_c, tex_c2, tex_c3, tex_a;
|
||||
void main()
|
||||
{
|
||||
float r, g, b, y, u, v;
|
||||
y = texture2D(tex, tex_c.xy).r;
|
||||
u = texture2D(texu, tex_c2.xy).r;
|
||||
v = texture2D(texv, tex_c3.xy).r;
|
||||
y = (y - 0.0625) * 1.164;
|
||||
u = u - 0.5;
|
||||
v = v - 0.5;
|
||||
r = y + (1.402 * v);
|
||||
g = y - (0.34414 * u) - (0.71414 * v);
|
||||
b = y + (1.772 * u);
|
||||
gl_FragColor = vec4(r, g, b, 1.0) * texture2D(texa, tex_a.xy).a * col;
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
#ifdef GL_ES
|
||||
precision highp float;
|
||||
#endif
|
||||
attribute vec4 vertex;
|
||||
attribute vec4 color;
|
||||
attribute vec2 tex_coord, tex_coord2, tex_coord3, tex_coorda;
|
||||
uniform mat4 mvp;
|
||||
varying vec4 col;
|
||||
varying vec2 tex_c, tex_c2, tex_c3, tex_a;
|
||||
void main()
|
||||
{
|
||||
gl_Position = mvp * vertex;
|
||||
col = color;
|
||||
tex_c = tex_coord;
|
||||
tex_c2 = tex_coord2;
|
||||
tex_c3 = tex_coord3;
|
||||
tex_a = tex_coorda;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#ifdef GL_ES
|
||||
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||
precision highp float;
|
||||
#else
|
||||
precision mediump float;
|
||||
#endif
|
||||
#endif
|
||||
uniform sampler2D tex, texuv, texa;
|
||||
varying vec4 col;
|
||||
varying vec2 tex_c, tex_cuv, tex_a;
|
||||
void main()
|
||||
{
|
||||
float y,u,v,vmu,r,g,b;
|
||||
y=texture2D(tex,tex_c).r;
|
||||
u=texture2D(texuv,tex_cuv).g;
|
||||
v=texture2D(texuv,tex_cuv).a;
|
||||
|
||||
u=u-0.5;
|
||||
v=v-0.5;
|
||||
vmu=v*0.813+u*0.391;
|
||||
u=u*2.018;
|
||||
v=v*1.596;
|
||||
|
||||
r=y+v;
|
||||
g=y-vmu;
|
||||
b=y+u;
|
||||
|
||||
gl_FragColor = vec4(r,g,b,1.0) * texture2D(texa, tex_a.xy).a * col;
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#ifdef GL_ES
|
||||
precision highp float;
|
||||
#endif
|
||||
attribute vec4 vertex;
|
||||
attribute vec4 color;
|
||||
attribute vec2 tex_coord, tex_coord2, tex_coorda;
|
||||
uniform mat4 mvp;
|
||||
varying vec4 col;
|
||||
varying vec2 tex_c, tex_cuv, tex_a;
|
||||
void main()
|
||||
{
|
||||
gl_Position = mvp * vertex;
|
||||
col = color;
|
||||
tex_c = tex_coord;
|
||||
tex_cuv = vec2(tex_coord2.x * 0.5, tex_coord2.y);
|
||||
tex_a = tex_coorda;
|
||||
}
|
Loading…
Reference in New Issue