forked from enlightenment/efl
Evas GL shaders: Add mask 21, 12, 22 downsampling modes
This is a huge patch, but keep in mind that 4326 line changes were automatically generated from the template GLSL files. This also adds some minor refactors here and there to accomodate for the new shaders, but nothing crazy. "GL fast-path" downsampled masks should now look pretty good.
This commit is contained in:
parent
6da5d54f8e
commit
2381d8160a
|
@ -296,6 +296,7 @@
|
|||
#define SHAD_TEXA 5
|
||||
#define SHAD_TEXSAM 6
|
||||
#define SHAD_MASK 7
|
||||
#define SHAD_MASKSAM 8
|
||||
|
||||
typedef struct _Evas_GL_Program Evas_GL_Program;
|
||||
typedef struct _Evas_GL_Program_Source Evas_GL_Program_Source;
|
||||
|
@ -547,6 +548,7 @@ struct _Evas_Engine_GL_Context
|
|||
GLfloat *texa;
|
||||
GLfloat *texsam;
|
||||
GLfloat *mask;
|
||||
GLfloat *masksam;
|
||||
Eina_Bool line: 1;
|
||||
Eina_Bool use_vertex : 1; // always true
|
||||
Eina_Bool use_color : 1;
|
||||
|
@ -556,6 +558,7 @@ struct _Evas_Engine_GL_Context
|
|||
Eina_Bool use_texa : 1;
|
||||
Eina_Bool use_texsam : 1;
|
||||
Eina_Bool use_mask : 1;
|
||||
Eina_Bool use_masksam : 1;
|
||||
Eina_Bool anti_alias : 1;
|
||||
Evas_GL_Image *im;
|
||||
GLuint buffer;
|
||||
|
@ -846,7 +849,7 @@ void evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *g
|
|||
int evas_gl_common_shader_program_init(Evas_GL_Shared *shared);
|
||||
void evas_gl_common_shader_program_init_done(void);
|
||||
void evas_gl_common_shader_program_shutdown(Evas_GL_Program *p);
|
||||
Evas_GL_Shader evas_gl_common_img_shader_select(Shader_Sampling sam, int nomul, int afill, int bgra, int mask);
|
||||
Evas_GL_Shader evas_gl_common_img_shader_select(Shader_Sampling sam, int nomul, int afill, int bgra, int mask, int masksam);
|
||||
const char *evas_gl_common_shader_name_get(Evas_GL_Shader shd);
|
||||
|
||||
Eina_Bool evas_gl_common_file_cache_is_dir(const char *file);
|
||||
|
|
|
@ -998,6 +998,7 @@ evas_gl_common_context_free(Evas_Engine_GL_Context *gc)
|
|||
if (gc->pipe[i].array.texuv2) free(gc->pipe[i].array.texuv2);
|
||||
if (gc->pipe[i].array.texuv3) free(gc->pipe[i].array.texuv3);
|
||||
if (gc->pipe[i].array.texsam) free(gc->pipe[i].array.texsam);
|
||||
if (gc->pipe[i].array.masksam) free(gc->pipe[i].array.masksam);
|
||||
if (gc->pipe[i].array.mask) free(gc->pipe[i].array.mask);
|
||||
}
|
||||
}
|
||||
|
@ -1262,6 +1263,7 @@ evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc,
|
|||
#define VERTEX_CNT 3
|
||||
#define COLOR_CNT 4
|
||||
#define TEX_CNT 2
|
||||
#define SAM_CNT 2
|
||||
#define MASK_CNT 4
|
||||
|
||||
#define PUSH_VERTEX(n, x, y, z) do { \
|
||||
|
@ -1322,15 +1324,19 @@ evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc,
|
|||
PUSH_TEXSAM(pn, dx, dy); PUSH_TEXSAM(pn, dx, dy); PUSH_TEXSAM(pn, dx, dy); \
|
||||
PUSH_TEXSAM(pn, dx, dy); PUSH_TEXSAM(pn, dx, dy); PUSH_TEXSAM(pn, dx, dy); \
|
||||
} while (0)
|
||||
#define PUSH_MASKSAM(pn, x, y, cnt) do { int _i; for (_i = 0; _i < cnt; _i++) { \
|
||||
gc->pipe[pn].array.masksam[nms++] = x; gc->pipe[pn].array.masksam[nms++] = y; \
|
||||
} } while (0)
|
||||
#define PUSH_6_COLORS(pn, r, g, b, a) \
|
||||
do { int i; for (i = 0; i < 6; i++) PUSH_COLOR(pn, r, g, b, a); } while(0)
|
||||
|
||||
static inline Eina_Bool
|
||||
_push_mask(Evas_Engine_GL_Context *gc, int pn, int nm, Evas_GL_Texture *mtex,
|
||||
int mx, int my, int mw, int mh)
|
||||
_push_mask(Evas_Engine_GL_Context *gc, const int pn, int nm, Evas_GL_Texture *mtex,
|
||||
int mx, int my, int mw, int mh, Shader_Sampling msam, int nms)
|
||||
{
|
||||
double glmx, glmy, glmw, glmh, yinv = -1.f;
|
||||
double gw = gc->w, gh = gc->h;
|
||||
int i, cnt = 6;
|
||||
|
||||
if (!((gc->pipe[0].shader.surface == gc->def_surface) ||
|
||||
(!gc->pipe[0].shader.surface)))
|
||||
|
@ -1353,14 +1359,17 @@ _push_mask(Evas_Engine_GL_Context *gc, int pn, int nm, Evas_GL_Texture *mtex,
|
|||
glmh = (double)(gh * mtex->h) / (double)(mh * mtex->pt->h);
|
||||
glmh *= yinv;
|
||||
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
if (!gc->pipe[pn].array.line)
|
||||
if (gc->pipe[pn].array.line)
|
||||
cnt = 2;
|
||||
|
||||
for (i = 0; i < cnt; i++)
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
|
||||
if (msam)
|
||||
{
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
PUSH_TEXM(pn, glmx, glmy, glmw, glmh);
|
||||
double samx = (double)(mtex->w) / (double)(mtex->pt->w * mw * 4);
|
||||
double samy = (double)(mtex->h) / (double)(mtex->pt->h * mh * 4);
|
||||
PUSH_MASKSAM(pn, samx, samy, cnt);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1373,8 +1382,8 @@ _push_mask(Evas_Engine_GL_Context *gc, int pn, int nm, Evas_GL_Texture *mtex,
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
#define PUSH_MASK(pn, mtex, mx, my, mw, mh) if (mtex) do { \
|
||||
_push_mask(gc, pn, nm, mtex, mx, my, mw, mh); \
|
||||
#define PUSH_MASK(pn, mtex, mx, my, mw, mh, msam) if (mtex) do { \
|
||||
_push_mask(gc, pn, nm, mtex, mx, my, mw, mh, msam, nms); \
|
||||
} while(0)
|
||||
|
||||
#define PIPE_GROW(gc, pn, inc) \
|
||||
|
@ -1384,8 +1393,9 @@ _push_mask(Evas_Engine_GL_Context *gc, int pn, int nm, Evas_GL_Texture *mtex,
|
|||
int nu2 = gc->pipe[pn].array.num * TEX_CNT; (void) nu2; \
|
||||
int nu3 = gc->pipe[pn].array.num * TEX_CNT; (void) nu3; \
|
||||
int na = gc->pipe[pn].array.num * TEX_CNT; (void) na; \
|
||||
int ns = gc->pipe[pn].array.num * TEX_CNT; (void) ns; \
|
||||
int ns = gc->pipe[pn].array.num * SAM_CNT; (void) ns; \
|
||||
int nm = gc->pipe[pn].array.num * MASK_CNT; (void) nm; \
|
||||
int nms = gc->pipe[pn].array.num * SAM_CNT; (void) nms; \
|
||||
gc->pipe[pn].array.num += inc; \
|
||||
array_alloc(gc, pn);
|
||||
|
||||
|
@ -1405,8 +1415,9 @@ array_alloc(Evas_Engine_GL_Context *gc, int n)
|
|||
ALOC(texa, GLfloat, TEX_CNT);
|
||||
ALOC(texuv2, GLfloat, TEX_CNT);
|
||||
ALOC(texuv3, GLfloat, TEX_CNT);
|
||||
ALOC(texsam, GLfloat, TEX_CNT);
|
||||
ALOC(texsam, GLfloat, SAM_CNT);
|
||||
ALOC(mask, GLfloat, MASK_CNT);
|
||||
ALOC(masksam, GLfloat, SAM_CNT);
|
||||
return;
|
||||
}
|
||||
gc->pipe[n].array.alloc += 6 * 1024;
|
||||
|
@ -1421,8 +1432,9 @@ array_alloc(Evas_Engine_GL_Context *gc, int n)
|
|||
RALOC(texa, GLfloat, TEX_CNT);
|
||||
RALOC(texuv2, GLfloat, TEX_CNT);
|
||||
RALOC(texuv3, GLfloat, TEX_CNT);
|
||||
RALOC(texsam, GLfloat, TEX_CNT);
|
||||
RALOC(texsam, GLfloat, SAM_CNT);
|
||||
RALOC(mask, GLfloat, MASK_CNT);
|
||||
RALOC(masksam, GLfloat, SAM_CNT);
|
||||
}
|
||||
|
||||
#ifdef GLPIPES
|
||||
|
@ -1511,28 +1523,24 @@ evas_gl_common_shader_select(Evas_Engine_GL_Context *gc,
|
|||
int r, int g, int b, int a,
|
||||
int sw, int sh, int w, int h, Eina_Bool smooth,
|
||||
Evas_GL_Texture *tex, Eina_Bool tex_only,
|
||||
Evas_GL_Texture *mtex,
|
||||
int *psam, int *pnomul)
|
||||
Evas_GL_Texture *mtex, Eina_Bool mask_smooth,
|
||||
int mw, int mh,
|
||||
Shader_Sampling *psam, int *pnomul, Shader_Sampling *pmasksam)
|
||||
{
|
||||
const Eina_Bool gc_bgra = gc->shared->info.bgra;
|
||||
int nomul = 1, bgra = 0;
|
||||
int mask = (mtex != NULL), afill = 0;
|
||||
Shader_Sampling sam = SHD_SAM11;
|
||||
Evas_GL_Shader shader;
|
||||
Shader_Sampling sam = SHD_SAM11, masksam = SHD_SAM11;
|
||||
Evas_GL_Shader shader = SHADER_RECT;
|
||||
int k = 0;
|
||||
|
||||
if ((type <= SHD_UNKNOWN) || (type >= SHD_TYPE_LAST))
|
||||
{
|
||||
CRI("Unknown shader type requested!");
|
||||
return SHADER_RECT;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ((type == SHD_RECT) || (type == SHD_LINE))
|
||||
return (!mtex) ? SHADER_RECT : SHADER_RECT_MASK;
|
||||
if (type == SHD_FONT)
|
||||
return (!mtex) ? SHADER_FONT : SHADER_FONT_MASK;
|
||||
|
||||
// sampling
|
||||
// image downscale sampling
|
||||
if (smooth && (type == SHD_IMAGE))
|
||||
{
|
||||
if ((sw >= (w * 2)) && (sh >= (h * 2)))
|
||||
|
@ -1543,6 +1551,39 @@ evas_gl_common_shader_select(Evas_Engine_GL_Context *gc,
|
|||
sam = SHD_SAM12;
|
||||
}
|
||||
|
||||
// mask downscale sampling
|
||||
if (mtex && mask_smooth)
|
||||
{
|
||||
if ((mtex->w >= (mw * 2)) && (mtex->h >= (mh * 2)))
|
||||
masksam = SHD_SAM22;
|
||||
else if (mtex->w >= (mw * 2))
|
||||
masksam = SHD_SAM21;
|
||||
else if (mtex->h >= (mh * 2))
|
||||
masksam = SHD_SAM12;
|
||||
}
|
||||
|
||||
// rect, line, polygon
|
||||
if ((type == SHD_RECT) || (type == SHD_LINE))
|
||||
{
|
||||
static const Evas_GL_Shader rect_shaders[] = {
|
||||
SHADER_RECT_MASK, SHADER_RECT_MASK12, SHADER_RECT_MASK21, SHADER_RECT_MASK22
|
||||
};
|
||||
if (!mtex) shader = SHADER_RECT;
|
||||
else shader = rect_shaders[masksam];
|
||||
goto end;
|
||||
}
|
||||
|
||||
// text
|
||||
if (type == SHD_FONT)
|
||||
{
|
||||
static const Evas_GL_Shader font_shaders[] = {
|
||||
SHADER_FONT_MASK, SHADER_FONT_MASK12, SHADER_FONT_MASK21, SHADER_FONT_MASK22
|
||||
};
|
||||
if (!mtex) shader = SHADER_FONT;
|
||||
else shader = font_shaders[masksam];
|
||||
goto end;
|
||||
}
|
||||
|
||||
// color mul
|
||||
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
|
||||
{
|
||||
|
@ -1581,24 +1622,24 @@ evas_gl_common_shader_select(Evas_Engine_GL_Context *gc,
|
|||
bgra = gc_bgra;
|
||||
|
||||
if ((type == SHD_IMAGE) || (type == SHD_MAP))
|
||||
shader = evas_gl_common_img_shader_select(sam, nomul, afill, bgra, mask);
|
||||
shader = evas_gl_common_img_shader_select(sam, nomul, afill, bgra, mask, masksam);
|
||||
else
|
||||
{
|
||||
#define SHADERS(name, ...) \
|
||||
SHADER_##name##_NOMUL##__VA_ARGS__, SHADER_##name##__VA_ARGS__, \
|
||||
SHADER_##name##_MASK_NOMUL, SHADER_##name##_MASK
|
||||
static const Evas_GL_Shader yuv_shaders[] = {
|
||||
// YUV does not support extra sampling
|
||||
SHADER_YUV_NOMUL, SHADER_YUV, SHADER_YUV_MASK_NOMUL, SHADER_YUV_MASK,
|
||||
SHADER_YUY2_NOMUL, SHADER_YUY2, SHADER_YUY2_MASK_NOMUL, SHADER_YUY2_MASK,
|
||||
SHADER_NV12_NOMUL, SHADER_NV12, SHADER_NV12_MASK_NOMUL, SHADER_NV12_MASK,
|
||||
SHADER_YUV_709_NOMUL, SHADER_YUV_709, SHADER_YUV_709_MASK_NOMUL, SHADER_YUV_709_MASK,
|
||||
SHADER_YUY2_709_NOMUL, SHADER_YUY2_709, SHADER_YUY2_709_MASK_NOMUL, SHADER_YUY2_709_MASK,
|
||||
SHADER_NV12_709_NOMUL, SHADER_NV12_709, SHADER_NV12_709_MASK_NOMUL, SHADER_NV12_709_MASK,
|
||||
// RGB+A could support extra sampling
|
||||
SHADER_RGB_A_PAIR_NOMUL, SHADER_RGB_A_PAIR, SHADER_RGB_A_PAIR_MASK_NOMUL, SHADER_RGB_A_PAIR_MASK,
|
||||
// TEX_EXTERNAL could support extra sampling
|
||||
SHADER_TEX_EXTERNAL_NOMUL, SHADER_TEX_EXTERNAL, SHADER_TEX_EXTERNAL_MASK_NOMUL, SHADER_TEX_EXTERNAL_MASK,
|
||||
SHADER_TEX_EXTERNAL_NOMUL_AFILL, SHADER_TEX_EXTERNAL_AFILL, SHADER_TEX_EXTERNAL_MASK_NOMUL, SHADER_TEX_EXTERNAL_MASK,
|
||||
|
||||
SHADERS(YUV),
|
||||
SHADERS(YUY2),
|
||||
SHADERS(NV12),
|
||||
SHADERS(YUV_709),
|
||||
SHADERS(YUY2_709),
|
||||
SHADERS(NV12_709),
|
||||
SHADERS(RGB_A_PAIR),
|
||||
SHADERS(TEX_EXTERNAL),
|
||||
SHADERS(TEX_EXTERNAL, _AFILL), /* note: afill + mask does not exist */
|
||||
};
|
||||
#undef SHADERS
|
||||
|
||||
switch (type)
|
||||
{
|
||||
|
@ -1612,7 +1653,7 @@ evas_gl_common_shader_select(Evas_Engine_GL_Context *gc,
|
|||
case SHD_TEX_EXTERNAL: k = 28; break;
|
||||
default:
|
||||
CRI("Unknown shader type requested!");
|
||||
return SHADER_RECT;
|
||||
goto end;
|
||||
}
|
||||
|
||||
shader = yuv_shaders[k + (afill * 4) + (mask * 2) + (!nomul)];
|
||||
|
@ -1623,9 +1664,10 @@ evas_gl_common_shader_select(Evas_Engine_GL_Context *gc,
|
|||
(int) sam, nomul, afill, bgra, mask, shader,
|
||||
evas_gl_common_shader_name_get(shader));
|
||||
*/
|
||||
|
||||
end:
|
||||
if (psam) *psam = sam;
|
||||
if (pnomul) *pnomul = nomul;
|
||||
if (pmasksam) *pmasksam = masksam;
|
||||
return shader;
|
||||
}
|
||||
|
||||
|
@ -1741,19 +1783,17 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
|
|||
int r, int g, int b, int a)
|
||||
{
|
||||
Eina_Bool blend = EINA_FALSE;
|
||||
Evas_GL_Shader shader = SHADER_RECT;
|
||||
Evas_GL_Shader shader;
|
||||
int pn = 0, i;
|
||||
GLuint prog, mtexid = 0;
|
||||
GLuint prog, mtexid = mtex ? mtex->pt->texture : 0;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
|
||||
if (!(gc->dc->render_op == EVAS_RENDER_COPY) && (a < 255))
|
||||
if (!(gc->dc->render_op == EVAS_RENDER_COPY) && ((a < 255) || (mtex)))
|
||||
blend = EINA_TRUE;
|
||||
|
||||
if (mtex)
|
||||
{
|
||||
blend = EINA_TRUE;
|
||||
mtexid = mtex->pt->texture;
|
||||
shader = SHADER_RECT_MASK;
|
||||
}
|
||||
shader = evas_gl_common_shader_select(gc, SHD_LINE, NULL, 0, r, g, b, a,
|
||||
0, 0, 0, 0, EINA_FALSE, NULL, EINA_FALSE,
|
||||
mtex, mask_smooth, mw, mh, NULL, NULL, &masksam);
|
||||
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
shader_array_flush(gc);
|
||||
|
@ -1783,12 +1823,13 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
|
||||
PIPE_GROW(gc, pn, 2);
|
||||
PUSH_VERTEX(pn, x1, y1, 0);
|
||||
PUSH_VERTEX(pn, x2, y2, 0);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
PUSH_COLOR(pn, r, g, b, a);
|
||||
|
@ -1803,6 +1844,7 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = 0;
|
||||
gc->pipe[pn].array.use_mask = 0;
|
||||
}
|
||||
|
||||
|
@ -1815,20 +1857,18 @@ evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool mask_smooth)
|
||||
{
|
||||
Eina_Bool blend = EINA_FALSE;
|
||||
Evas_GL_Shader shader = SHADER_RECT;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
GLuint mtexid = 0;
|
||||
GLuint mtexid = mtex ? mtex->pt->texture : 0;
|
||||
int pn = 0;
|
||||
|
||||
if (!(gc->dc->render_op == EVAS_RENDER_COPY) && (a < 255))
|
||||
if (!(gc->dc->render_op == EVAS_RENDER_COPY) && ((a < 255) || mtex))
|
||||
blend = EINA_TRUE;
|
||||
|
||||
if (mtex)
|
||||
{
|
||||
blend = EINA_TRUE;
|
||||
mtexid = mtex->pt->texture;
|
||||
shader = SHADER_RECT_MASK;
|
||||
}
|
||||
shader = evas_gl_common_shader_select(gc, SHD_RECT, NULL, 0, r, g, b, a,
|
||||
0, 0, 0, 0, EINA_FALSE, NULL, EINA_FALSE,
|
||||
mtex, mask_smooth, mw, mh, NULL, NULL, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
again:
|
||||
|
@ -1858,6 +1898,7 @@ again:
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
}
|
||||
else
|
||||
|
@ -1912,6 +1953,7 @@ again:
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
}
|
||||
}
|
||||
|
@ -1950,13 +1992,14 @@ again:
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_texa = 0;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
gc->pipe[pn].array.use_texm = !!mtex;
|
||||
#endif
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
PUSH_6_VERTICES(pn, x, y, w, h);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
||||
|
@ -2044,7 +2087,8 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool blend = EINA_FALSE;
|
||||
Evas_GL_Shader shader = SHADER_IMG;
|
||||
GLuint prog = gc->shared->shader[shader].prog;
|
||||
int pn = 0, sam = 0, render_op = gc->dc->render_op, nomul = 0;
|
||||
int pn = 0, render_op = gc->dc->render_op, nomul = 0;
|
||||
Shader_Sampling sam = 0, masksam = 0;
|
||||
int yinvert = 0;
|
||||
|
||||
if (!!mtex)
|
||||
|
@ -2058,7 +2102,8 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
|
|||
|
||||
shader = evas_gl_common_shader_select(gc, SHD_IMAGE, NULL, 0, r, g, b, a,
|
||||
sw, sh, w, h, smooth, tex, tex_only,
|
||||
mtex, &sam, &nomul);
|
||||
mtex, mask_smooth, mw, mh,
|
||||
&sam, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
if (tex->ptt)
|
||||
|
@ -2110,8 +2155,9 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv = 1;
|
||||
gc->pipe[pn].array.use_texuv2 = 0;
|
||||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2220,20 +2266,12 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
|
|||
|
||||
if (sam)
|
||||
{
|
||||
/* Note: Although these values look like constants (did anyone say
|
||||
* uniforms?), they are passed to the GLSL program as attributes so
|
||||
* that we can nicely pipe multiple glDrawArrays together by pushing
|
||||
* more vertices. Setting uniforms would break the whole concept of
|
||||
* piping commands into a single call to glDrawArrays.
|
||||
* Don't be as dumb as me and keep these vertices as is.
|
||||
* -- jpeg
|
||||
*/
|
||||
double samx = (double)(sw) / (double)(tex->pt->w * w * 4);
|
||||
double samy = (double)(sh) / (double)(tex->pt->h * h * 4);
|
||||
PUSH_SAMPLES(pn, samx, samy);
|
||||
}
|
||||
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
|
||||
if (!nomul)
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
|
@ -2248,11 +2286,15 @@ evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
|
|||
int r, int g, int b, int a)
|
||||
{
|
||||
GLfloat tx1, tx2, ty1, ty2;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
int pn = 0;
|
||||
|
||||
shader = (!mtex) ? SHADER_FONT : SHADER_FONT_MASK;
|
||||
shader = evas_gl_common_shader_select(gc, SHD_FONT, NULL, 0, r, g, b, a,
|
||||
sw, sh, w, h, EINA_FALSE, tex, EINA_FALSE,
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, NULL, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(SHD_FONT,
|
||||
|
@ -2284,8 +2326,9 @@ evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv = 1;
|
||||
gc->pipe[pn].array.use_texuv2 = 0;
|
||||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2307,7 +2350,7 @@ evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
|
|||
|
||||
PUSH_6_VERTICES(pn, x, y, w, h);
|
||||
PUSH_6_TEXUV(pn, tx1, ty1, tx2, ty2);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
||||
|
@ -2321,6 +2364,7 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool smooth)
|
||||
{
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Eina_Bool blend = 0;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
|
@ -2330,8 +2374,9 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
blend = 1;
|
||||
|
||||
shader = evas_gl_common_shader_select(gc, SHD_YUV, NULL, 0, r, g, b, a,
|
||||
w, h, w, h, smooth, tex, 0, mtex,
|
||||
NULL, &nomul);
|
||||
w, h, w, h, smooth, tex, 0,
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(SHD_YUV,
|
||||
|
@ -2367,6 +2412,7 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv3 = 1;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2385,7 +2431,7 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_6_TEXUV(pn, tx1, ty1, tx2, ty2);
|
||||
PUSH_6_TEXUV2(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_6_TEXUV3(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
if (!nomul)
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
@ -2400,6 +2446,7 @@ evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool smooth)
|
||||
{
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Eina_Bool blend = 0;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
|
@ -2409,8 +2456,9 @@ evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
|
|||
blend = 1;
|
||||
|
||||
shader = evas_gl_common_shader_select(gc, SHD_YUV_709, NULL, 0, r, g, b, a,
|
||||
w, h, w, h, smooth, tex, 0, mtex,
|
||||
NULL, &nomul);
|
||||
w, h, w, h, smooth, tex, 0,
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(SHD_YUV_709,
|
||||
|
@ -2446,6 +2494,7 @@ evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv3 = 1;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2464,7 +2513,7 @@ evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_6_TEXUV(pn, tx1, ty1, tx2, ty2);
|
||||
PUSH_6_TEXUV2(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_6_TEXUV3(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
if (!nomul)
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
@ -2479,6 +2528,7 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool smooth)
|
||||
{
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Eina_Bool blend = 0;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
|
@ -2488,8 +2538,9 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
blend = 1;
|
||||
|
||||
shader = evas_gl_common_shader_select(gc, SHD_YUY2, NULL, 0, r, g, b, a,
|
||||
sw, sh, w, h, smooth, tex, 0, mtex,
|
||||
NULL, &nomul);
|
||||
sw, sh, w, h, smooth, tex, 0,
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(SHD_YUY2,
|
||||
|
@ -2524,6 +2575,7 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2541,7 +2593,7 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_6_VERTICES(pn, x, y, w, h);
|
||||
PUSH_6_TEXUV(pn, tx1, ty1, tx2, ty2);
|
||||
PUSH_6_TEXUV2(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
if (!nomul)
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
@ -2556,6 +2608,7 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
Eina_Bool smooth)
|
||||
{
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Eina_Bool blend = 0;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
|
@ -2565,8 +2618,9 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
blend = 1;
|
||||
|
||||
shader = evas_gl_common_shader_select(gc, SHD_NV12, NULL, 0, r, g, b, a,
|
||||
sw, sh, w, h, smooth, tex, 0, mtex,
|
||||
NULL, &nomul);
|
||||
sw, sh, w, h, smooth, tex, 0,
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
|
@ -2604,6 +2658,7 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texuv3 = 0;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2621,7 +2676,7 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_6_VERTICES(pn, x, y, w, h);
|
||||
PUSH_6_TEXUV(pn, tx1, ty1, tx2, ty2);
|
||||
PUSH_6_TEXUV2(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
if (!nomul)
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
@ -2645,13 +2700,15 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|||
*/
|
||||
|
||||
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Evas_GL_Shader shader;
|
||||
GLuint prog;
|
||||
int pn, nomul = 0;
|
||||
|
||||
shader = evas_gl_common_shader_select(gc, SHD_RGB_A_PAIR, NULL, 0, r, g, b, a,
|
||||
sw, sh, w, h, smooth, tex, 0, mtex,
|
||||
NULL, &nomul);
|
||||
sw, sh, w, h, smooth, tex, 0,
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
pn = _evas_gl_common_context_push(SHD_RGB_A_PAIR,
|
||||
|
@ -2687,6 +2744,7 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_texa = EINA_TRUE;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2705,7 +2763,7 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|||
PUSH_6_VERTICES(pn, x, y, w, h);
|
||||
PUSH_6_TEXUV(pn, tx1, ty1, tx2, ty2);
|
||||
PUSH_6_TEXA(pn, t2x1, t2y1, t2x2, t2y2);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
if (!nomul)
|
||||
PUSH_6_COLORS(pn, r, g, b, a);
|
||||
}
|
||||
|
@ -2726,6 +2784,7 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
GLfloat tx[4], ty[4], t2x[4], t2y[4];
|
||||
Eina_Bool blend = EINA_FALSE;
|
||||
DATA32 cmul;
|
||||
Shader_Sampling masksam = SHD_SAM11;
|
||||
Evas_GL_Shader shader = SHADER_IMG;
|
||||
Eina_Bool utexture = EINA_FALSE;
|
||||
Eina_Bool uvtexture = EINA_FALSE;
|
||||
|
@ -2781,7 +2840,8 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
}
|
||||
shader = evas_gl_common_shader_select(gc, type, p, npoints, r, g, b, a,
|
||||
w, h, w, h, smooth, tex, tex_only,
|
||||
mtex, NULL, &nomul);
|
||||
mtex, mask_smooth, mw, mh,
|
||||
NULL, &nomul, &masksam);
|
||||
prog = gc->shared->shader[shader].prog;
|
||||
|
||||
x = w = (p[0].x >> FP);
|
||||
|
@ -2889,6 +2949,7 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
gc->pipe[pn].array.use_mask = !!mtex;
|
||||
gc->pipe[pn].array.use_texa = use_texa;
|
||||
gc->pipe[pn].array.use_texsam = 0;
|
||||
gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
|
||||
|
||||
pipe_region_expand(gc, pn, x, y, w, h);
|
||||
PIPE_GROW(gc, pn, 6);
|
||||
|
@ -2959,7 +3020,7 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|||
}
|
||||
}
|
||||
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh);
|
||||
PUSH_MASK(pn, mtex, mx, my, mw, mh, masksam);
|
||||
|
||||
if (!flat)
|
||||
{
|
||||
|
@ -3298,6 +3359,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
unsigned char *texa_ptr = NULL;
|
||||
unsigned char *texsam_ptr = NULL;
|
||||
unsigned char *mask_ptr = NULL;
|
||||
unsigned char *masksam_ptr = NULL;
|
||||
GLint MASK_TEXTURE = GL_TEXTURE0;
|
||||
|
||||
if (glsym_glMapBuffer && glsym_glUnmapBuffer)
|
||||
|
@ -3307,6 +3369,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
# define VERTEX_SIZE (gc->pipe[i].array.num * sizeof(GLshort) * VERTEX_CNT)
|
||||
# define COLOR_SIZE (gc->pipe[i].array.num * sizeof(GLubyte) * COLOR_CNT)
|
||||
# define TEX_SIZE (gc->pipe[i].array.num * sizeof(GLfloat) * TEX_CNT)
|
||||
# define SAM_SIZE (gc->pipe[i].array.num * sizeof(GLfloat) * SAM_CNT)
|
||||
# define MASK_SIZE (gc->pipe[i].array.num * sizeof(GLfloat) * MASK_CNT)
|
||||
vertex_ptr = NULL;
|
||||
color_ptr = vertex_ptr + VERTEX_SIZE;
|
||||
|
@ -3315,8 +3378,9 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
texuv3_ptr = texuv2_ptr + TEX_SIZE;
|
||||
texa_ptr = texuv3_ptr + TEX_SIZE;
|
||||
texsam_ptr = texa_ptr + TEX_SIZE;
|
||||
mask_ptr = texsam_ptr + TEX_SIZE;
|
||||
# define END_POINTER (mask_ptr + MASK_SIZE)
|
||||
mask_ptr = texsam_ptr + SAM_SIZE;
|
||||
masksam_ptr = mask_ptr + MASK_SIZE;
|
||||
# define END_POINTER (masksam_ptr + SAM_SIZE)
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, gc->pipe[i].array.buffer);
|
||||
if ((gc->pipe[i].array.buffer_alloc < (long)END_POINTER) ||
|
||||
|
@ -3344,9 +3408,13 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
if (gc->pipe[i].array.use_texa)
|
||||
memcpy(x + (unsigned long)texa_ptr, gc->pipe[i].array.texa, TEX_SIZE);
|
||||
if (gc->pipe[i].array.use_texsam)
|
||||
memcpy(x + (unsigned long)texsam_ptr, gc->pipe[i].array.texsam, TEX_SIZE);
|
||||
memcpy(x + (unsigned long)texsam_ptr, gc->pipe[i].array.texsam, SAM_SIZE);
|
||||
if (gc->pipe[i].array.use_mask)
|
||||
memcpy(x + (unsigned long)mask_ptr, gc->pipe[i].array.mask, MASK_SIZE);
|
||||
{
|
||||
memcpy(x + (unsigned long)mask_ptr, gc->pipe[i].array.mask, MASK_SIZE);
|
||||
if (gc->pipe[i].array.use_masksam)
|
||||
memcpy(x + (unsigned long)masksam_ptr, gc->pipe[i].array.masksam, SAM_SIZE);
|
||||
}
|
||||
/*
|
||||
fprintf(stderr, "copy %i bytes [%i/%i slots] [%i + %i + %i + %i + %i + %i + %i] <%i %i %i %i %i %i %i>\n",
|
||||
(int)((unsigned char *)END_POINTER),
|
||||
|
@ -3375,6 +3443,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
texa_ptr = (unsigned char *)gc->pipe[i].array.texa;
|
||||
texsam_ptr = (unsigned char *)gc->pipe[i].array.texsam;
|
||||
mask_ptr = (unsigned char *)gc->pipe[i].array.mask;
|
||||
masksam_ptr = (unsigned char *)gc->pipe[i].array.masksam;
|
||||
}
|
||||
|
||||
// use_vertex is always true
|
||||
|
@ -3432,8 +3501,19 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
if (gc->pipe[i].array.use_masksam)
|
||||
{
|
||||
glEnableVertexAttribArray(SHAD_MASKSAM);
|
||||
glVertexAttribPointer(SHAD_MASKSAM, SAM_CNT, GL_FLOAT, GL_FALSE, 0, masksam_ptr);
|
||||
}
|
||||
else glDisableVertexAttribArray(SHAD_MASKSAM);
|
||||
}
|
||||
else
|
||||
{
|
||||
glDisableVertexAttribArray(SHAD_MASK);
|
||||
glDisableVertexAttribArray(SHAD_MASKSAM);
|
||||
}
|
||||
else glDisableVertexAttribArray(SHAD_MASK);
|
||||
|
||||
glDrawArrays(GL_LINES, 0, gc->pipe[i].array.num);
|
||||
}
|
||||
|
@ -3486,7 +3566,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
if (gc->pipe[i].array.use_texsam)
|
||||
{
|
||||
glEnableVertexAttribArray(SHAD_TEXSAM);
|
||||
glVertexAttribPointer(SHAD_TEXSAM, TEX_CNT, GL_FLOAT, GL_FALSE, 0, texsam_ptr);
|
||||
glVertexAttribPointer(SHAD_TEXSAM, SAM_CNT, GL_FLOAT, GL_FALSE, 0, texsam_ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3586,10 +3666,18 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
if (gc->pipe[i].array.use_masksam)
|
||||
{
|
||||
glEnableVertexAttribArray(SHAD_MASKSAM);
|
||||
glVertexAttribPointer(SHAD_MASKSAM, SAM_CNT, GL_FLOAT, GL_FALSE, 0, masksam_ptr);
|
||||
}
|
||||
else glDisableVertexAttribArray(SHAD_MASKSAM);
|
||||
}
|
||||
else
|
||||
{
|
||||
glDisableVertexAttribArray(SHAD_MASK);
|
||||
glDisableVertexAttribArray(SHAD_MASKSAM);
|
||||
}
|
||||
|
||||
if (dbgflushnum == 1)
|
||||
|
@ -3645,6 +3733,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
if (gc->pipe[i].array.texuv3) free(gc->pipe[i].array.texuv3);
|
||||
if (gc->pipe[i].array.texsam) free(gc->pipe[i].array.texsam);
|
||||
if (gc->pipe[i].array.mask) free(gc->pipe[i].array.mask);
|
||||
if (gc->pipe[i].array.masksam) free(gc->pipe[i].array.masksam);
|
||||
|
||||
gc->pipe[i].array.line = 0;
|
||||
//gc->pipe[i].array.use_vertex = 0;
|
||||
|
@ -3655,6 +3744,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
gc->pipe[i].array.use_texa = 0;
|
||||
gc->pipe[i].array.use_texsam = 0;
|
||||
gc->pipe[i].array.use_mask = 0;
|
||||
gc->pipe[i].array.use_masksam = 0;
|
||||
gc->pipe[i].array.anti_alias = 0;
|
||||
|
||||
gc->pipe[i].array.vertex = NULL;
|
||||
|
@ -3665,6 +3755,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
|
|||
gc->pipe[i].array.texa = NULL;
|
||||
gc->pipe[i].array.texsam = NULL;
|
||||
gc->pipe[i].array.mask = NULL;
|
||||
gc->pipe[i].array.masksam = NULL;
|
||||
|
||||
gc->pipe[i].array.num = 0;
|
||||
gc->pipe[i].array.alloc = 0;
|
||||
|
|
|
@ -79,6 +79,7 @@ _evas_gl_common_shader_program_binary_init(Evas_GL_Program *p,
|
|||
glBindAttribLocation(p->prog, SHAD_TEXA, "tex_coorda");
|
||||
glBindAttribLocation(p->prog, SHAD_TEXSAM, "tex_sample");
|
||||
glBindAttribLocation(p->prog, SHAD_MASK, "mask_coord");
|
||||
glBindAttribLocation(p->prog, SHAD_MASKSAM, "tex_masksample");
|
||||
|
||||
glGetProgramiv(p->prog, GL_LINK_STATUS, &ok);
|
||||
if (!ok)
|
||||
|
@ -189,6 +190,7 @@ _evas_gl_common_shader_program_source_init(Evas_GL_Program *p,
|
|||
glBindAttribLocation(p->prog, SHAD_TEXA, "tex_coorda");
|
||||
glBindAttribLocation(p->prog, SHAD_TEXSAM, "tex_sample");
|
||||
glBindAttribLocation(p->prog, SHAD_MASK, "mask_coord");
|
||||
glBindAttribLocation(p->prog, SHAD_MASKSAM, "tex_masksample");
|
||||
|
||||
glLinkProgram(p->prog);
|
||||
ok = 0;
|
||||
|
@ -350,9 +352,10 @@ evas_gl_common_shader_program_shutdown(Evas_GL_Program *p)
|
|||
}
|
||||
|
||||
Evas_GL_Shader
|
||||
evas_gl_common_img_shader_select(Shader_Sampling sam, int nomul, int afill, int bgra, int mask)
|
||||
evas_gl_common_img_shader_select(Shader_Sampling sam, int nomul, int afill, int bgra, int mask, int masksam)
|
||||
{
|
||||
static Evas_GL_Shader _shaders[4 * 2 * 2 * 2 * 2]; // 128 possibilities
|
||||
// 256 combinaisons including many impossible
|
||||
static Evas_GL_Shader _shaders[4 * 2 * 2 * 2 * 2 * 4];
|
||||
static Eina_Bool init = EINA_FALSE;
|
||||
int idx;
|
||||
|
||||
|
@ -367,16 +370,18 @@ evas_gl_common_img_shader_select(Shader_Sampling sam, int nomul, int afill, int
|
|||
for (k = 0; k < (sizeof(_shaders_source) / sizeof(_shaders_source[0])); k++)
|
||||
{
|
||||
if (_shaders_source[k].type != SHD_IMAGE) continue;
|
||||
idx = _shaders_source[k].sam << 4;
|
||||
idx |= _shaders_source[k].bgra << 3;
|
||||
idx |= _shaders_source[k].mask << 2;
|
||||
idx |= _shaders_source[k].nomul << 1;
|
||||
idx |= _shaders_source[k].afill;
|
||||
idx = _shaders_source[k].sam << 6; // 2 bits
|
||||
idx |= _shaders_source[k].masksam << 4; // 2 bits
|
||||
idx |= _shaders_source[k].bgra << 3; // bool
|
||||
idx |= _shaders_source[k].mask << 2; // bool
|
||||
idx |= _shaders_source[k].nomul << 1; // bool
|
||||
idx |= _shaders_source[k].afill; // bool
|
||||
_shaders[idx] = _shaders_source[k].id;
|
||||
}
|
||||
}
|
||||
|
||||
idx = sam << 4;
|
||||
idx = sam << 6;
|
||||
idx |= masksam << 4;
|
||||
idx |= bgra << 3;
|
||||
idx |= mask << 2;
|
||||
idx |= nomul << 1;
|
||||
|
|
|
@ -4,8 +4,14 @@
|
|||
typedef enum {
|
||||
SHADER_RECT,
|
||||
SHADER_RECT_MASK,
|
||||
SHADER_RECT_MASK12,
|
||||
SHADER_RECT_MASK21,
|
||||
SHADER_RECT_MASK22,
|
||||
SHADER_FONT,
|
||||
SHADER_FONT_MASK,
|
||||
SHADER_FONT_MASK12,
|
||||
SHADER_FONT_MASK21,
|
||||
SHADER_FONT_MASK22,
|
||||
SHADER_IMG,
|
||||
SHADER_IMG_BGRA,
|
||||
SHADER_IMG_12,
|
||||
|
@ -38,6 +44,54 @@ typedef enum {
|
|||
SHADER_IMG_12_BGRA_MASK_NOMUL,
|
||||
SHADER_IMG_21_BGRA_MASK_NOMUL,
|
||||
SHADER_IMG_22_BGRA_MASK_NOMUL,
|
||||
SHADER_IMG_MASK12,
|
||||
SHADER_IMG_BGRA_MASK12,
|
||||
SHADER_IMG_12_MASK12,
|
||||
SHADER_IMG_21_MASK12,
|
||||
SHADER_IMG_22_MASK12,
|
||||
SHADER_IMG_12_BGRA_MASK12,
|
||||
SHADER_IMG_21_BGRA_MASK12,
|
||||
SHADER_IMG_22_BGRA_MASK12,
|
||||
SHADER_IMG_MASK12_NOMUL,
|
||||
SHADER_IMG_BGRA_MASK12_NOMUL,
|
||||
SHADER_IMG_12_MASK12_NOMUL,
|
||||
SHADER_IMG_21_MASK12_NOMUL,
|
||||
SHADER_IMG_22_MASK12_NOMUL,
|
||||
SHADER_IMG_12_BGRA_MASK12_NOMUL,
|
||||
SHADER_IMG_21_BGRA_MASK12_NOMUL,
|
||||
SHADER_IMG_22_BGRA_MASK12_NOMUL,
|
||||
SHADER_IMG_MASK21,
|
||||
SHADER_IMG_BGRA_MASK21,
|
||||
SHADER_IMG_12_MASK21,
|
||||
SHADER_IMG_21_MASK21,
|
||||
SHADER_IMG_22_MASK21,
|
||||
SHADER_IMG_12_BGRA_MASK21,
|
||||
SHADER_IMG_21_BGRA_MASK21,
|
||||
SHADER_IMG_22_BGRA_MASK21,
|
||||
SHADER_IMG_MASK21_NOMUL,
|
||||
SHADER_IMG_BGRA_MASK21_NOMUL,
|
||||
SHADER_IMG_12_MASK21_NOMUL,
|
||||
SHADER_IMG_21_MASK21_NOMUL,
|
||||
SHADER_IMG_22_MASK21_NOMUL,
|
||||
SHADER_IMG_12_BGRA_MASK21_NOMUL,
|
||||
SHADER_IMG_21_BGRA_MASK21_NOMUL,
|
||||
SHADER_IMG_22_BGRA_MASK21_NOMUL,
|
||||
SHADER_IMG_MASK22,
|
||||
SHADER_IMG_BGRA_MASK22,
|
||||
SHADER_IMG_12_MASK22,
|
||||
SHADER_IMG_21_MASK22,
|
||||
SHADER_IMG_22_MASK22,
|
||||
SHADER_IMG_12_BGRA_MASK22,
|
||||
SHADER_IMG_21_BGRA_MASK22,
|
||||
SHADER_IMG_22_BGRA_MASK22,
|
||||
SHADER_IMG_MASK22_NOMUL,
|
||||
SHADER_IMG_BGRA_MASK22_NOMUL,
|
||||
SHADER_IMG_12_MASK22_NOMUL,
|
||||
SHADER_IMG_21_MASK22_NOMUL,
|
||||
SHADER_IMG_22_MASK22_NOMUL,
|
||||
SHADER_IMG_12_BGRA_MASK22_NOMUL,
|
||||
SHADER_IMG_21_BGRA_MASK22_NOMUL,
|
||||
SHADER_IMG_22_BGRA_MASK22_NOMUL,
|
||||
SHADER_IMG_AFILL,
|
||||
SHADER_IMG_BGRA_AFILL,
|
||||
SHADER_IMG_NOMUL_AFILL,
|
||||
|
@ -99,6 +153,12 @@ static struct {
|
|||
} _shaders_textures[] = {
|
||||
{ SHADER_FONT_MASK, "tex" },
|
||||
{ SHADER_FONT_MASK, "texm" },
|
||||
{ SHADER_FONT_MASK12, "tex" },
|
||||
{ SHADER_FONT_MASK12, "texm" },
|
||||
{ SHADER_FONT_MASK21, "tex" },
|
||||
{ SHADER_FONT_MASK21, "texm" },
|
||||
{ SHADER_FONT_MASK22, "tex" },
|
||||
{ SHADER_FONT_MASK22, "texm" },
|
||||
{ SHADER_IMG_MASK, "tex" },
|
||||
{ SHADER_IMG_MASK, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK, "tex" },
|
||||
|
@ -131,6 +191,102 @@ static struct {
|
|||
{ SHADER_IMG_21_BGRA_MASK_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK_NOMUL, "texm" },
|
||||
{ SHADER_IMG_MASK12, "tex" },
|
||||
{ SHADER_IMG_MASK12, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK12, "tex" },
|
||||
{ SHADER_IMG_BGRA_MASK12, "texm" },
|
||||
{ SHADER_IMG_12_MASK12, "tex" },
|
||||
{ SHADER_IMG_12_MASK12, "texm" },
|
||||
{ SHADER_IMG_21_MASK12, "tex" },
|
||||
{ SHADER_IMG_21_MASK12, "texm" },
|
||||
{ SHADER_IMG_22_MASK12, "tex" },
|
||||
{ SHADER_IMG_22_MASK12, "texm" },
|
||||
{ SHADER_IMG_12_BGRA_MASK12, "tex" },
|
||||
{ SHADER_IMG_12_BGRA_MASK12, "texm" },
|
||||
{ SHADER_IMG_21_BGRA_MASK12, "tex" },
|
||||
{ SHADER_IMG_21_BGRA_MASK12, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK12, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK12, "texm" },
|
||||
{ SHADER_IMG_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_BGRA_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_12_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_12_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_21_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_21_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_12_BGRA_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_12_BGRA_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_21_BGRA_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_21_BGRA_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK12_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK12_NOMUL, "texm" },
|
||||
{ SHADER_IMG_MASK21, "tex" },
|
||||
{ SHADER_IMG_MASK21, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK21, "tex" },
|
||||
{ SHADER_IMG_BGRA_MASK21, "texm" },
|
||||
{ SHADER_IMG_12_MASK21, "tex" },
|
||||
{ SHADER_IMG_12_MASK21, "texm" },
|
||||
{ SHADER_IMG_21_MASK21, "tex" },
|
||||
{ SHADER_IMG_21_MASK21, "texm" },
|
||||
{ SHADER_IMG_22_MASK21, "tex" },
|
||||
{ SHADER_IMG_22_MASK21, "texm" },
|
||||
{ SHADER_IMG_12_BGRA_MASK21, "tex" },
|
||||
{ SHADER_IMG_12_BGRA_MASK21, "texm" },
|
||||
{ SHADER_IMG_21_BGRA_MASK21, "tex" },
|
||||
{ SHADER_IMG_21_BGRA_MASK21, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK21, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK21, "texm" },
|
||||
{ SHADER_IMG_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_BGRA_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_12_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_12_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_21_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_21_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_12_BGRA_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_12_BGRA_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_21_BGRA_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_21_BGRA_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK21_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK21_NOMUL, "texm" },
|
||||
{ SHADER_IMG_MASK22, "tex" },
|
||||
{ SHADER_IMG_MASK22, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK22, "tex" },
|
||||
{ SHADER_IMG_BGRA_MASK22, "texm" },
|
||||
{ SHADER_IMG_12_MASK22, "tex" },
|
||||
{ SHADER_IMG_12_MASK22, "texm" },
|
||||
{ SHADER_IMG_21_MASK22, "tex" },
|
||||
{ SHADER_IMG_21_MASK22, "texm" },
|
||||
{ SHADER_IMG_22_MASK22, "tex" },
|
||||
{ SHADER_IMG_22_MASK22, "texm" },
|
||||
{ SHADER_IMG_12_BGRA_MASK22, "tex" },
|
||||
{ SHADER_IMG_12_BGRA_MASK22, "texm" },
|
||||
{ SHADER_IMG_21_BGRA_MASK22, "tex" },
|
||||
{ SHADER_IMG_21_BGRA_MASK22, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK22, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK22, "texm" },
|
||||
{ SHADER_IMG_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_BGRA_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_BGRA_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_12_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_12_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_21_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_21_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_12_BGRA_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_12_BGRA_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_21_BGRA_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_21_BGRA_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_IMG_22_BGRA_MASK22_NOMUL, "tex" },
|
||||
{ SHADER_IMG_22_BGRA_MASK22_NOMUL, "texm" },
|
||||
{ SHADER_RGB_A_PAIR, "tex" },
|
||||
{ SHADER_RGB_A_PAIR, "texa" },
|
||||
{ SHADER_RGB_A_PAIR_MASK, "tex" },
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -53,6 +53,13 @@ varying vec2 tex_s[4];
|
|||
#ifdef SHD_MASK
|
||||
uniform sampler2D texm;
|
||||
varying vec2 tex_m;
|
||||
# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)
|
||||
varying float maskdiv_s;
|
||||
varying vec2 masktex_s[2];
|
||||
# elif defined(SHD_MASKSAM22)
|
||||
varying float maskdiv_s;
|
||||
varying vec2 masktex_s[4];
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef SHD_ALPHA
|
||||
|
@ -122,13 +129,30 @@ void main()
|
|||
c = vec4(1, 1, 1, 1);
|
||||
#endif
|
||||
|
||||
#ifdef SHD_MASK
|
||||
float ma;
|
||||
# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)
|
||||
float ma00 = texture2D(texm, tex_m + masktex_s[0]).a;
|
||||
float ma01 = texture2D(texm, tex_m + masktex_s[1]).a;
|
||||
ma = (ma00 + ma01) / maskdiv_s;
|
||||
# elif defined(SHD_MASKSAM22)
|
||||
float ma00 = texture2D(texm, tex_m + masktex_s[0]).a;
|
||||
float ma01 = texture2D(texm, tex_m + masktex_s[1]).a;
|
||||
float ma10 = texture2D(texm, tex_m + masktex_s[2]).a;
|
||||
float ma11 = texture2D(texm, tex_m + masktex_s[3]).a;
|
||||
ma = (ma00 + ma01 + ma10 + ma11) / maskdiv_s;
|
||||
# else
|
||||
ma = texture2D(texm, tex_m).a;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
gl_FragColor =
|
||||
c
|
||||
#ifndef SHD_NOMUL
|
||||
* col
|
||||
#endif
|
||||
#ifdef SHD_MASK
|
||||
* texture2D(texm, tex_m).a
|
||||
* ma
|
||||
#endif
|
||||
#ifdef SHD_TEXA
|
||||
* texture2D(texa, tex_a).r
|
||||
|
|
|
@ -89,6 +89,7 @@ for (( i = 0; i < ${#SHADERS[@]} ; i++ )) ; do
|
|||
nomul=0
|
||||
afill=0
|
||||
sam="SAM11"
|
||||
masksam="SAM11"
|
||||
tex=""
|
||||
|
||||
# Urgh. Some fixups
|
||||
|
@ -115,6 +116,9 @@ for (( i = 0; i < ${#SHADERS[@]} ; i++ )) ; do
|
|||
sam12) sam="SAM12";;
|
||||
sam21) sam="SAM21";;
|
||||
sam22) sam="SAM22";;
|
||||
masksam12) masksam="SAM12";;
|
||||
masksam21) masksam="SAM21";;
|
||||
masksam22) masksam="SAM22";;
|
||||
esac
|
||||
done
|
||||
|
||||
|
@ -145,7 +149,7 @@ for (( i = 0; i < ${#SHADERS[@]} ; i++ )) ; do
|
|||
printf "Evas_GL_Program_Source shader_${shdname}_src =\n{\n ${shdname}_glsl,\n NULL, 0\n};\n\n" >> ${OUTPUT}
|
||||
done
|
||||
|
||||
shaders_source="${shaders_source} { SHADER_${UNAME}, &(shader_${name}_vert_src), &(shader_${name}_frag_src), \"${name}\", SHD_${TYPE}, SHD_${sam}, ${bgra}, ${mask}, ${nomul}, ${afill} },\n"
|
||||
shaders_source="${shaders_source} { SHADER_${UNAME}, &(shader_${name}_vert_src), &(shader_${name}_frag_src), \"${name}\", SHD_${TYPE}, SHD_${sam}, SHD_${masksam}, ${bgra}, ${mask}, ${nomul}, ${afill} },\n"
|
||||
shaders_enum="${shaders_enum} SHADER_${UNAME},\n"
|
||||
|
||||
# Bind textures to the programs. Only if there is more than 1 texture.
|
||||
|
@ -165,6 +169,7 @@ static const struct {
|
|||
const char *name;
|
||||
Shader_Type type;
|
||||
Shader_Sampling sam;
|
||||
Shader_Sampling masksam;
|
||||
Eina_Bool bgra : 1;
|
||||
Eina_Bool mask : 1;
|
||||
Eina_Bool nomul : 1;
|
||||
|
|
|
@ -8,11 +8,17 @@
|
|||
# Rectangles, lines & polygons
|
||||
rect:
|
||||
rect_mask:mask
|
||||
rect_mask12:mask,masksam12
|
||||
rect_mask21:mask,masksam21
|
||||
rect_mask22:mask,masksam22
|
||||
|
||||
|
||||
# Fonts (alpha only)
|
||||
font:tex,alpha
|
||||
font_mask:tex,mask,alpha
|
||||
font_mask12:tex,mask,masksam12,alpha
|
||||
font_mask21:tex,mask,masksam21,alpha
|
||||
font_mask22:tex,mask,masksam22,alpha
|
||||
|
||||
|
||||
# Images: color version
|
||||
|
@ -55,6 +61,58 @@ img_21_bgra_mask_nomul:tex,mask,sam21,bgra,nomul
|
|||
img_22_bgra_mask_nomul:tex,mask,sam22,bgra,nomul
|
||||
|
||||
|
||||
# Now the same as above but with MASKSAM
|
||||
img_mask12:tex,mask,masksam12
|
||||
img_bgra_mask12:tex,mask,masksam12,bgra
|
||||
img_12_mask12:tex,mask,masksam12,sam12
|
||||
img_21_mask12:tex,mask,masksam12,sam21
|
||||
img_22_mask12:tex,mask,masksam12,sam22
|
||||
img_12_bgra_mask12:tex,mask,masksam12,sam12,bgra
|
||||
img_21_bgra_mask12:tex,mask,masksam12,sam21,bgra
|
||||
img_22_bgra_mask12:tex,mask,masksam12,sam22,bgra
|
||||
img_mask12_nomul:tex,mask,masksam12,nomul
|
||||
img_bgra_mask12_nomul:tex,mask,masksam12,nomul,bgra
|
||||
img_12_mask12_nomul:tex,mask,masksam12,sam12,nomul
|
||||
img_21_mask12_nomul:tex,mask,masksam12,sam21,nomul
|
||||
img_22_mask12_nomul:tex,mask,masksam12,sam22,nomul
|
||||
img_12_bgra_mask12_nomul:tex,mask,masksam12,sam12,bgra,nomul
|
||||
img_21_bgra_mask12_nomul:tex,mask,masksam12,sam21,bgra,nomul
|
||||
img_22_bgra_mask12_nomul:tex,mask,masksam12,sam22,bgra,nomul
|
||||
|
||||
img_mask21:tex,mask,masksam21
|
||||
img_bgra_mask21:tex,mask,masksam21,bgra
|
||||
img_12_mask21:tex,mask,masksam21,sam12
|
||||
img_21_mask21:tex,mask,masksam21,sam21
|
||||
img_22_mask21:tex,mask,masksam21,sam22
|
||||
img_12_bgra_mask21:tex,mask,masksam21,sam12,bgra
|
||||
img_21_bgra_mask21:tex,mask,masksam21,sam21,bgra
|
||||
img_22_bgra_mask21:tex,mask,masksam21,sam22,bgra
|
||||
img_mask21_nomul:tex,mask,masksam21,nomul
|
||||
img_bgra_mask21_nomul:tex,mask,masksam21,nomul,bgra
|
||||
img_12_mask21_nomul:tex,mask,masksam21,sam12,nomul
|
||||
img_21_mask21_nomul:tex,mask,masksam21,sam21,nomul
|
||||
img_22_mask21_nomul:tex,mask,masksam21,sam22,nomul
|
||||
img_12_bgra_mask21_nomul:tex,mask,masksam21,sam12,bgra,nomul
|
||||
img_21_bgra_mask21_nomul:tex,mask,masksam21,sam21,bgra,nomul
|
||||
img_22_bgra_mask21_nomul:tex,mask,masksam21,sam22,bgra,nomul
|
||||
|
||||
img_mask22:tex,mask,masksam22
|
||||
img_bgra_mask22:tex,mask,masksam22,bgra
|
||||
img_12_mask22:tex,mask,masksam22,sam12
|
||||
img_21_mask22:tex,mask,masksam22,sam21
|
||||
img_22_mask22:tex,mask,masksam22,sam22
|
||||
img_12_bgra_mask22:tex,mask,masksam22,sam12,bgra
|
||||
img_21_bgra_mask22:tex,mask,masksam22,sam21,bgra
|
||||
img_22_bgra_mask22:tex,mask,masksam22,sam22,bgra
|
||||
img_mask22_nomul:tex,mask,masksam22,nomul
|
||||
img_bgra_mask22_nomul:tex,mask,masksam22,nomul,bgra
|
||||
img_12_mask22_nomul:tex,mask,masksam22,sam12,nomul
|
||||
img_21_mask22_nomul:tex,mask,masksam22,sam21,nomul
|
||||
img_22_mask22_nomul:tex,mask,masksam22,sam22,nomul
|
||||
img_12_bgra_mask22_nomul:tex,mask,masksam22,sam12,bgra,nomul
|
||||
img_21_bgra_mask22_nomul:tex,mask,masksam22,sam21,bgra,nomul
|
||||
img_22_bgra_mask22_nomul:tex,mask,masksam22,sam22,bgra,nomul
|
||||
|
||||
|
||||
# Some AFILL versions
|
||||
img_afill:tex,afill
|
||||
|
|
|
@ -57,6 +57,15 @@ varying vec2 tex_s[4];
|
|||
#ifdef SHD_MASK
|
||||
attribute vec4 mask_coord;
|
||||
varying vec2 tex_m;
|
||||
# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)
|
||||
attribute vec2 tex_masksample;
|
||||
varying float maskdiv_s;
|
||||
varying vec2 masktex_s[2];
|
||||
# elif defined(SHD_MASKSAM22)
|
||||
attribute vec2 tex_masksample;
|
||||
varying float maskdiv_s;
|
||||
varying vec2 masktex_s[4];
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -89,22 +98,36 @@ void main()
|
|||
tex_a = tex_coorda;
|
||||
#endif
|
||||
|
||||
#if defined(SHD_SAM12) || defined(SHD_SAM21) || defined(SHD_SAM22)
|
||||
# if defined(SHD_SAM12)
|
||||
#if defined(SHD_SAM12)
|
||||
tex_s[0] = vec2(0, -tex_sample.y);
|
||||
tex_s[1] = vec2(0, tex_sample.y);
|
||||
div_s = vec4(2, 2, 2, 2);
|
||||
# elif defined(SHD_SAM21)
|
||||
#elif defined(SHD_SAM21)
|
||||
tex_s[0] = vec2(-tex_sample.x, 0);
|
||||
tex_s[1] = vec2( tex_sample.x, 0);
|
||||
div_s = vec4(2, 2, 2, 2);
|
||||
# else
|
||||
#elif defined(SHD_SAM22)
|
||||
tex_s[0] = vec2(-tex_sample.x, -tex_sample.y);
|
||||
tex_s[1] = vec2( tex_sample.x, -tex_sample.y);
|
||||
tex_s[2] = vec2( tex_sample.x, tex_sample.y);
|
||||
tex_s[3] = vec2(-tex_sample.x, tex_sample.y);
|
||||
div_s = vec4(4, 4, 4, 4);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(SHD_MASKSAM12)
|
||||
masktex_s[0] = vec2(0, -tex_masksample.y);
|
||||
masktex_s[1] = vec2(0, tex_masksample.y);
|
||||
maskdiv_s = 2.0;
|
||||
#elif defined(SHD_MASKSAM21)
|
||||
masktex_s[0] = vec2(-tex_masksample.x, 0);
|
||||
masktex_s[1] = vec2( tex_masksample.x, 0);
|
||||
maskdiv_s = 2.0;
|
||||
#elif defined(SHD_MASKSAM22)
|
||||
masktex_s[0] = vec2(-tex_masksample.x, -tex_masksample.y);
|
||||
masktex_s[1] = vec2( tex_masksample.x, -tex_masksample.y);
|
||||
masktex_s[2] = vec2( tex_masksample.x, tex_masksample.y);
|
||||
masktex_s[3] = vec2(-tex_masksample.x, tex_masksample.y);
|
||||
maskdiv_s = 4.0;
|
||||
#endif
|
||||
|
||||
#ifdef SHD_MASK
|
||||
|
|
Loading…
Reference in New Issue