#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)
+#define PUSH_MASK(pn, mtex, mx, my, mw, mh) if (mtex) do { \
+ GLfloat tmx1, tmx2, tmy1, tmy2; \
+ tmx1 = (mtex->x + mx) / (double)mtex->pt->w; \
+ tmy1 = (mtex->y + my) / (double)mtex->pt->h; \
+ tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w; \
+ tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h; \
+ PUSH_TEXM(pn, tmx1, tmy1); \
+ PUSH_TEXM(pn, tmx2, tmy1); \
+ PUSH_TEXM(pn, tmx1, tmy2); \
+ PUSH_TEXM(pn, tmx2, tmy1); \
+ PUSH_TEXM(pn, tmx2, tmy2); \
+ PUSH_TEXM(pn, tmx1, tmy2); \
+ } while(0)
+
#define PIPE_GROW(gc, pn, inc) \
int nv = gc->pipe[pn].array.num * 3; (void) nv; \
int nc = gc->pipe[pn].array.num * 4; (void) nc; \
PUSH_TEXSAM(pn, samx, samy);
}
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
// if nomul... dont need this
PUSH_6_COLORS(pn, r, g, b, a);
PUSH_TEXUV(pn, tx2, ty2);
PUSH_TEXUV(pn, tx1, ty2);
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
PUSH_6_COLORS(pn, r, g, b, a);
}
GLuint prog;
int pn = 0;
- if (a < 255) blend = 1;
+ if ((a < 255) || (!!mtex))
+ blend = 1;
prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a, !!mtex,
SHADER_YUV_NOMUL, SHADER_YUV,
PUSH_TEXUV3(pn, t2x2, t2y2);
PUSH_TEXUV3(pn, t2x1, t2y2);
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
PUSH_6_COLORS(pn, r, g, b, a);
}
GLuint prog;
int pn = 0;
- if (a < 255) blend = 1;
+ if ((a < 255) || (!!mtex))
+ blend = 1;
prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a, !!mtex,
SHADER_YUY2_NOMUL, SHADER_YUY2,
PUSH_TEXUV2(pn, t2x2, t2y2);
PUSH_TEXUV2(pn, t2x1, t2y2);
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
PUSH_6_COLORS(pn, r, g, b, a);
}
GLuint prog;
int pn = 0;
- if (a < 255) blend = 1;
+ if ((a < 255) || (!!mtex))
+ blend = 1;
prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a, !!mtex,
SHADER_NV12_NOMUL, SHADER_NV12,
PUSH_TEXUV2(pn, t2x2, t2y2);
PUSH_TEXUV2(pn, t2x1, t2y2);
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
PUSH_6_COLORS(pn, r, g, b, a);
}
PUSH_TEXA(pn, t2x2, t2y2);
PUSH_TEXA(pn, t2x1, t2y2);
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
PUSH_6_COLORS(pn, r, g, b, a);
}
int flat = 0;
if (!(gc->dc->render_op == EVAS_RENDER_COPY) &&
- ((a < 255) || (tex->alpha))) blend = EINA_TRUE;
+ ((a < 255) || (tex->alpha) || (!!mtex))) blend = EINA_TRUE;
if ((A_VAL(&(p[0].col)) < 0xff) || (A_VAL(&(p[1].col)) < 0xff) ||
(A_VAL(&(p[2].col)) < 0xff) || (A_VAL(&(p[3].col)) < 0xff))
A_VAL(&cl));
}
- if (mtex)
- {
- GLfloat tmx1, tmy1, tmx2, tmy2;
-
- tmx1 = (mtex->x + mx) / (double)mtex->pt->w;
- tmy1 = (mtex->y + my) / (double)mtex->pt->h;
- tmx2 = (mtex->x + mx + mw) / (double)mtex->pt->w;
- tmy2 = (mtex->y + my + mh) / (double)mtex->pt->h;
-
- PUSH_TEXM(pn, tmx1, tmy1);
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx1, tmy2);
-
- PUSH_TEXM(pn, tmx2, tmy1);
- PUSH_TEXM(pn, tmx2, tmy2);
- PUSH_TEXM(pn, tmx1, tmy2);
- }
+ PUSH_MASK(pn, mtex, mx, my, mw, mh);
if (!flat)
{
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glDisableVertexAttribArray(SHAD_TEXUV3);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glDisableVertexAttribArray(SHAD_TEXM);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glDrawArrays(GL_LINES, 0, gc->pipe[i].array.num);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
}
else
{
+ GLint MASK_TEXTURE = GL_TEXTURE1;
+
if (gc->pipe[i].array.use_texuv)
{
glEnableVertexAttribArray(SHAD_TEXUV);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glActiveTexture(GL_TEXTURE0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- }
- else
- {
- glDisableVertexAttribArray(SHAD_TEXA);
- }
- /* Mask surface */
- if (gc->pipe[i].array.use_texm)
- {
- glEnableVertexAttribArray(SHAD_TEXM);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glVertexAttribPointer(SHAD_TEXM, 2, GL_FLOAT, GL_FALSE, 0, (void *)texm_ptr);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glActiveTexture(GL_TEXTURE3);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texm);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
- if (shared->info.anisotropic > 0.0)
- {
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, shared->info.anisotropic);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- }
-#endif
- if (gc->pipe[i].shader.smooth)
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- }
- else
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- }
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
- glActiveTexture(GL_TEXTURE0);
- GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ MASK_TEXTURE += 1;
}
else
{
- glDisableVertexAttribArray(SHAD_TEXM);
+ glDisableVertexAttribArray(SHAD_TEXA);
}
if (gc->pipe[i].array.use_texsam)
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glActiveTexture(GL_TEXTURE0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+
+ MASK_TEXTURE += 2;
}
else if (gc->pipe[i].array.use_texuv2)
{
}
glActiveTexture(GL_TEXTURE0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+
+ MASK_TEXTURE += 1;
}
else
{
glDisableVertexAttribArray(SHAD_TEXUV3);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
}
+
+ /* Mask surface */
+ if (gc->pipe[i].array.use_texm)
+ {
+ glEnableVertexAttribArray(SHAD_TEXM);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glVertexAttribPointer(SHAD_TEXM, 2, GL_FLOAT, GL_FALSE, 0, (void *)texm_ptr);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glActiveTexture(MASK_TEXTURE);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texm);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
+ if (shared->info.anisotropic > 0.0)
+ {
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, shared->info.anisotropic);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ }
+#endif
+ if (gc->pipe[i].shader.smooth)
+ {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ }
+ else
+ {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ }
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ glActiveTexture(GL_TEXTURE0);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ }
+ else
+ {
+ glDisableVertexAttribArray(SHAD_TEXM);
+ GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+ }
+
if (dbgflushnum == 1)
{
const char *types[6] =