if ((gc->shared) && (gc->shared->references == 0))
{
Evas_GL_Texture_Pool *pt;
- int i;
for (i = 0; i < SHADER_LAST; ++i)
evas_gl_common_shader_program_shutdown(&(gc->shared->shader[i]));
gc->pipe[n].array.alloc * sizeof(GLfloat) * 2);
}
+#ifdef GLPIPES
static int
pipe_region_intersects(Evas_Engine_GL_Context *gc, int n,
int x, int y, int w, int h)
}
return 0;
}
+#endif
static void
pipe_region_expand(Evas_Engine_GL_Context *gc, int n,
return 1;
}
+static int
+_evas_gl_common_context_push(int rtype,
+ Evas_Engine_GL_Context *gc,
+ Evas_GL_Texture *tex,
+ Evas_GL_Texture *texm,
+ GLuint prog,
+ int x, int y, int w, int h,
+ Eina_Bool blend,
+ Eina_Bool smooth,
+ Eina_Bool clip,
+ int cx, int cy, int cw, int ch)
+{
+ int pn = 0;
+
+#ifdef GLPIPES
+ again:
+#endif
+ vertex_array_size_check(gc, gc->state.top_pipe, 6);
+ pn = gc->state.top_pipe;
+#ifdef GLPIPES
+ if (!((pn == 0) && (gc->pipe[pn].array.num == 0)))
+ {
+ int found = 0;
+ int i;
+
+ for (i = pn; i >= 0; i--)
+ {
+ if ((gc->pipe[i].region.type == rtype)
+ && (!tex || gc->pipe[i].shader.cur_tex == tex->pt->texture)
+ && (!texm || gc->pipe[i].shader.cur_texm == texm->pt->texture)
+ && (gc->pipe[i].shader.cur_prog == prog)
+ && (gc->pipe[i].shader.smooth == smooth)
+ && (gc->pipe[i].shader.blend == blend)
+ && (gc->pipe[i].shader.render_op == gc->dc->render_op)
+ && (gc->pipe[i].shader.clip == clip)
+ && (!clip || ((gc->pipe[i].shader.cx == cx)
+ && (gc->pipe[i].shader.cy == cy)
+ && (gc->pipe[i].shader.cw == cw)
+ && (gc->pipe[i].shader.ch == ch))))
+ {
+ found = 1;
+ pn = i;
+ break;
+ }
+ if (pipe_region_intersects(gc, i, x, y, w, h)) break;
+ }
+ if (!found)
+ {
+ pn = gc->state.top_pipe + 1;
+ if (pn >= gc->shared->info.tune.pipes.max)
+ {
+ shader_array_flush(gc);
+ goto again;
+ }
+ gc->state.top_pipe = pn;
+ }
+ }
+ if ((tex) && (((tex->im) && (tex->im->native.data)) || tex->pt->dyn.img))
+ {
+ if (gc->pipe[pn].array.im != tex->im)
+ {
+ shader_array_flush(gc);
+ pn = gc->state.top_pipe;
+ gc->pipe[pn].array.im = tex->im;
+ goto again;
+ }
+ }
+#else
+ if (!((gc->pipe[pn].region.type == rtype)
+ && (!tex || gc->pipe[pn].shader.cur_tex == tex->pt->texture)
+ && (!texm || gc->pipe[pn].shader.cur_texm == texm->pt->texture)
+ && (gc->pipe[pn].shader.cur_prog == prog)
+ && (gc->pipe[pn].shader.smooth == smooth)
+ && (gc->pipe[pn].shader.blend == blend)
+ && (gc->pipe[pn].shader.render_op == gc->dc->render_op)
+ && (gc->pipe[pn].shader.clip == clip)
+ && (!clip || ((gc->pipe[pn].shader.cx == cx)
+ && (gc->pipe[pn].shader.cy == cy)
+ && (gc->pipe[pn].shader.cw == cw)
+ && (gc->pipe[pn].shader.ch == ch)))))
+ {
+ shader_array_flush(gc);
+ }
+ if ((tex) && (((tex->im) && (tex->im->native.data)) || tex->pt->dyn.img))
+ {
+ if (gc->pipe[pn].array.im != tex->im)
+ {
+ shader_array_flush(gc);
+ gc->pipe[pn].array.im = tex->im;
+ }
+ }
+#endif
+
+ return pn;
+}
+
void
evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
int x1, int y1, int x2, int y2,
}
}
-again:
- vertex_array_size_check(gc, gc->state.top_pipe, 6);
- pn = gc->state.top_pipe;
-#ifdef GLPIPES
- if ((pn == 0) && (gc->pipe[pn].array.num == 0))
- {
- gc->pipe[pn].region.type = RTYPE_IMAGE;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- // if nomul... dont need this
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- else
- {
- int found = 0;
-
- for (i = pn; i >= 0; i--)
- {
- if ((gc->pipe[i].region.type == RTYPE_IMAGE)
- && (gc->pipe[i].shader.cur_tex == tex->pt->texture)
- && (gc->pipe[i].shader.cur_prog == prog)
- && (gc->pipe[i].shader.smooth == smooth)
- && (gc->pipe[i].shader.blend == blend)
- && (gc->pipe[i].shader.render_op == gc->dc->render_op)
- && (gc->pipe[i].shader.clip == 0)
- )
- {
- found = 1;
- pn = i;
- break;
- }
- if (pipe_region_intersects(gc, i, x, y, w, h)) break;
- }
- if (!found)
- {
- pn = gc->state.top_pipe + 1;
- if (pn >= gc->shared->info.tune.pipes.max)
- {
- shader_array_flush(gc);
- goto again;
- }
- gc->state.top_pipe = pn;
- gc->pipe[pn].region.type = RTYPE_IMAGE;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- // if nomul... dont need this
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
-
- }
- }
- if ((tex->im) && (tex->im->native.data))
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- pn = gc->state.top_pipe;
- gc->pipe[pn].array.im = tex->im;
- goto again;
- }
- }
- if (tex->pt->dyn.img)
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- pn = gc->state.top_pipe;
- gc->pipe[pn].array.im = tex->im;
- goto again;
- }
- }
-#else
- if ((gc->pipe[pn].shader.cur_tex != tex->pt->texture)
- || (gc->pipe[pn].shader.cur_prog != prog)
- || (gc->pipe[pn].shader.smooth != smooth)
- || (gc->pipe[pn].shader.blend != blend)
- || (gc->pipe[pn].shader.render_op != gc->dc->render_op)
- || (gc->pipe[pn].shader.clip != 0)
- )
- {
- shader_array_flush(gc);
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- }
- if ((tex->im) && (tex->im->native.data))
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- gc->pipe[pn].array.im = tex->im;
- }
- }
- if (tex->pt->dyn.img)
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- gc->pipe[pn].array.im = tex->im;
- }
- }
+ pn = _evas_gl_common_context_push(RTYPE_IMAGE,
+ gc, tex, NULL,
+ prog,
+ x, y, w, h,
+ blend,
+ smooth,
+ 0, 0, 0, 0, 0);
+ gc->pipe[pn].region.type = RTYPE_IMAGE;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_prog = prog;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
gc->pipe[pn].array.line = 0;
gc->pipe[pn].array.use_vertex = 1;
// if nomul... dont need this
gc->pipe[pn].array.use_color = 1;
gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuvm = 0;
gc->pipe[pn].array.use_texuv2 = 0;
gc->pipe[pn].array.use_texuv3 = 0;
-#endif
pipe_region_expand(gc, pn, x, y, w, h);
GLuint prog = gc->shared->shader[SHADER_FONT].prog;
int pn = 0;
-again:
- vertex_array_size_check(gc, gc->state.top_pipe, 6);
- pn = gc->state.top_pipe;
-#ifdef GLPIPES
- if ((pn == 0) && (gc->pipe[pn].array.num == 0))
+ pn = _evas_gl_common_context_push(RTYPE_FONT,
+ gc, tex, NULL,
+ prog,
+ x, y, w, h,
+ 1,
+ 0,
+ 0, 0, 0, 0, 0);
+
+ gc->pipe[pn].region.type = RTYPE_FONT;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_prog = prog;
+ gc->pipe[pn].shader.smooth = 0;
+ gc->pipe[pn].shader.blend = 1;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 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; nt = pnum * 4;
+ gc->pipe[pn].array.num += 6;
+ array_alloc(gc, pn);
+
+ if (sw == 0.0)
{
- gc->pipe[pn].region.type = RTYPE_FONT;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = 0;
- gc->pipe[pn].shader.blend = 1;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
+ tx1 = tex->sx1;
+ ty1 = tex->sy1;
+ tx2 = tex->sx2;
+ ty2 = tex->sy2;
}
else
{
- int found = 0;
-
- for (i = pn; i >= 0; i--)
- {
- if ((gc->pipe[i].region.type == RTYPE_FONT)
- && (gc->pipe[i].shader.cur_tex == tex->pt->texture)
- && (gc->pipe[i].shader.cur_prog == prog)
- && (gc->pipe[i].shader.smooth == 0)
- && (gc->pipe[i].shader.blend == 1)
- && (gc->pipe[i].shader.render_op == gc->dc->render_op)
- && (gc->pipe[i].shader.clip == 0)
- )
- {
- found = 1;
- pn = i;
- break;
- }
- if (pipe_region_intersects(gc, i, x, y, w, h)) break;
- }
- if (!found)
- {
- pn = gc->state.top_pipe + 1;
- if (pn >= gc->shared->info.tune.pipes.max)
- {
- shader_array_flush(gc);
- goto again;
- }
- gc->state.top_pipe = pn;
- gc->pipe[pn].region.type = RTYPE_FONT;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = 0;
- gc->pipe[pn].shader.blend = 1;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- }
-#else
- if ((gc->pipe[pn].shader.cur_tex != tex->pt->texture)
- || (gc->pipe[pn].shader.cur_prog != prog)
- || (gc->pipe[pn].shader.smooth != 0)
- || (gc->pipe[pn].shader.blend != 1)
- || (gc->pipe[pn].shader.render_op != gc->dc->render_op)
- || (gc->pipe[pn].shader.clip != 0)
- )
- {
- shader_array_flush(gc);
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = 0;
- gc->pipe[pn].shader.blend = 1;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- }
-
- gc->pipe[pn].region.type = RTYPE_FONT;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
-#endif
-
- pipe_region_expand(gc, pn, x, y, w, h);
-
- pnum = gc->pipe[pn].array.num;
- nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nt = pnum * 4;
- gc->pipe[pn].array.num += 6;
- array_alloc(gc, pn);
-
- if (sw == 0.0)
- {
- tx1 = tex->sx1;
- ty1 = tex->sy1;
- tx2 = tex->sx2;
- ty2 = tex->sy2;
- }
- else
- {
- tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
- ty1 = ((double)(tex->y) + sy) / (double)tex->pt->h;
- tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
- ty2 = ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
- }
+ tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
+ ty1 = ((double)(tex->y) + sy) / (double)tex->pt->h;
+ tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
+ ty2 = ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
+ }
PUSH_VERTEX(pn, x , y , 0);
PUSH_VERTEX(pn, x + w, y , 0);
else
prog = gc->shared->shader[SHADER_YUV].prog;
-again:
- vertex_array_size_check(gc, gc->state.top_pipe, 6);
- pn = gc->state.top_pipe;
-#ifdef GLPIPES
- if ((pn == 0) && (gc->pipe[pn].array.num == 0))
- {
- gc->pipe[pn].region.type = RTYPE_YUV;
- 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_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- }
- else
- {
- int found = 0;
-
- for (i = pn; i >= 0; i--)
- {
- if ((gc->pipe[i].region.type == RTYPE_YUV)
- && (gc->pipe[i].shader.cur_tex == tex->pt->texture)
- && (gc->pipe[i].shader.cur_prog == prog)
- && (gc->pipe[i].shader.smooth == smooth)
- && (gc->pipe[i].shader.blend == blend)
- && (gc->pipe[i].shader.render_op == gc->dc->render_op)
- && (gc->pipe[i].shader.clip == 0)
- )
- {
- found = 1;
- pn = i;
- break;
- }
- if (pipe_region_intersects(gc, i, x, y, w, h)) break;
- }
- if (!found)
- {
- pn = gc->state.top_pipe + 1;
- if (pn >= gc->shared->info.tune.pipes.max)
- {
- shader_array_flush(gc);
- goto again;
- }
- gc->state.top_pipe = pn;
- gc->pipe[pn].region.type = RTYPE_YUV;
- 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_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- }
- }
-#else
- if ((gc->pipe[pn].shader.cur_tex != tex->pt->texture)
- || (gc->pipe[pn].shader.cur_prog != prog)
- || (gc->pipe[pn].shader.smooth != smooth)
- || (gc->pipe[pn].shader.blend != blend)
- || (gc->pipe[pn].shader.render_op != gc->dc->render_op)
- || (gc->pipe[pn].shader.clip != 0)
- )
- {
- shader_array_flush(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_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- }
+ pn = _evas_gl_common_context_push(RTYPE_YUV,
+ gc, tex, NULL,
+ prog,
+ x, y, w, h,
+ blend,
+ smooth,
+ 0, 0, 0, 0, 0);
gc->pipe[pn].region.type = RTYPE_YUV;
+ 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_prog = prog;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
gc->pipe[pn].array.line = 0;
gc->pipe[pn].array.use_vertex = 1;
gc->pipe[pn].array.use_color = 1;
gc->pipe[pn].array.use_texuv = 1;
gc->pipe[pn].array.use_texuv2 = 1;
gc->pipe[pn].array.use_texuv3 = 1;
-#endif
pipe_region_expand(gc, pn, x, y, w, h);
else
prog = gc->shared->shader[SHADER_YUY2].prog;
-again:
- vertex_array_size_check(gc, gc->state.top_pipe, 6);
- pn = gc->state.top_pipe;
-#ifdef GLPIPES
- if ((pn == 0) && (gc->pipe[pn].array.num == 0))
- {
- 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_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- else
- {
- int found = 0;
-
- for (i = pn; i >= 0; i--)
- {
- if ((gc->pipe[i].region.type == RTYPE_YUY2)
- && (gc->pipe[i].shader.cur_tex == tex->pt->texture)
- && (gc->pipe[i].shader.cur_prog == prog)
- && (gc->pipe[i].shader.smooth == smooth)
- && (gc->pipe[i].shader.blend == blend)
- && (gc->pipe[i].shader.render_op == gc->dc->render_op)
- && (gc->pipe[i].shader.clip == 0)
- )
- {
- found = 1;
- pn = i;
- break;
- }
- if (pipe_region_intersects(gc, i, x, y, w, h)) break;
- }
- if (!found)
- {
- pn = gc->state.top_pipe + 1;
- if (pn >= gc->shared->info.tune.pipes.max)
- {
- shader_array_flush(gc);
- goto again;
- }
- gc->state.top_pipe = pn;
- 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_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- }
-#else
- if ((gc->pipe[pn].shader.cur_tex != tex->pt->texture)
- || (gc->pipe[pn].shader.cur_prog != prog)
- || (gc->pipe[pn].shader.smooth != smooth)
- || (gc->pipe[pn].shader.blend != blend)
- || (gc->pipe[pn].shader.render_op != gc->dc->render_op)
- || (gc->pipe[pn].shader.clip != 0)
- )
- {
- shader_array_flush(gc);
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- }
+ pn = _evas_gl_common_context_push(RTYPE_YUY2,
+ gc, tex, NULL,
+ prog,
+ x, y, w, h,
+ blend,
+ smooth,
+ 0, 0, 0, 0, 0);
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_prog = prog;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
gc->pipe[pn].array.line = 0;
gc->pipe[pn].array.use_vertex = 1;
gc->pipe[pn].array.use_color = 1;
gc->pipe[pn].array.use_texuv = 1;
gc->pipe[pn].array.use_texuv2 = 1;
gc->pipe[pn].array.use_texuv3 = 0;
-#endif
pipe_region_expand(gc, pn, x, y, w, h);
py = (p[points[i]].y >> FP);
if (py < y) y = py;
else if (py > h) h = py;
- if (yuv)
+ if (yuv || yuy2)
{
t2x[i] = ((((double)p[i].u / 2) / FP1)) / (double)tex->ptu->w;
t2y[i] = ((((double)p[i].v / 2) / FP1)) / (double)tex->ptu->h;
}
- else if (yuy2)
- {
- t2x[i] = ((((double)p[i].u / 2) / FP1)) / (double)tex->ptuv->w;
- t2y[i] = ((((double)p[i].v / 2) / FP1)) / (double)tex->ptuv->h;
- }
}
w = w - x;
h = h - y;
gc->change.size = 1;
_evas_gl_common_viewport_set(gc);
}
-again:
- vertex_array_size_check(gc, gc->state.top_pipe, 6);
- pn = gc->state.top_pipe;
-#ifdef GLPIPES
- if ((pn == 0) && (gc->pipe[pn].array.num == 0))
- {
- gc->pipe[pn].region.type = RTYPE_MAP;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- if (yuv)
- {
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- }
- else if (yuy2)
- {
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- }
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- if (yuv)
- {
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- }
- else if (yuy2)
- {
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- else
- {
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- }
- else
- {
- int found = 0;
- for (i = pn; i >= 0; i--)
- {
- if ((gc->pipe[i].region.type == RTYPE_MAP)
- && (gc->pipe[i].shader.cur_tex == tex->pt->texture)
- && (gc->pipe[i].shader.cur_prog == prog)
- && (gc->pipe[i].shader.smooth == smooth)
- && (gc->pipe[i].shader.blend == blend)
- && (gc->pipe[i].shader.render_op == gc->dc->render_op)
- && (gc->pipe[i].shader.clip == clip)
- && (gc->pipe[i].shader.cx == cx)
- && (gc->pipe[i].shader.cy == cy)
- && (gc->pipe[i].shader.cw == cw)
- && (gc->pipe[i].shader.ch == ch)
- )
- {
- found = 1;
- pn = i;
- break;
- }
- if (pipe_region_intersects(gc, i, x, y, w, h)) break;
- }
- if (!found)
- {
- pn = gc->state.top_pipe + 1;
- if (pn >= gc->shared->info.tune.pipes.max)
- {
- shader_array_flush(gc);
- goto again;
- }
- gc->state.top_pipe = pn;
- gc->pipe[pn].region.type = RTYPE_MAP;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- if (yuv)
- {
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- }
- else if (yuy2)
- {
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- }
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- if (yuv)
- {
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- }
- else if (yuy2)
- {
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- else
- {
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- }
- }
- if ((tex->im) && (tex->im->native.data))
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- pn = gc->state.top_pipe;
- gc->pipe[pn].array.im = tex->im;
- goto again;
- }
- }
- if (tex->pt->dyn.img)
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- pn = gc->state.top_pipe;
- gc->pipe[pn].array.im = tex->im;
- goto again;
- }
- }
-#else
- if ((gc->pipe[pn].shader.cur_tex != tex->pt->texture)
- || (gc->pipe[pn].shader.cur_prog != prog)
- || (gc->pipe[pn].shader.smooth != smooth)
- || (gc->pipe[pn].shader.blend != blend)
- || (gc->pipe[pn].shader.render_op != gc->dc->render_op)
- || (gc->pipe[pn].shader.clip != clip)
- || (gc->pipe[pn].shader.cx != cx)
- || (gc->pipe[pn].shader.cy != cy)
- || (gc->pipe[pn].shader.cw != cw)
- || (gc->pipe[pn].shader.ch != ch)
- )
- {
- shader_array_flush(gc);
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- if (yuy2) gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_prog = prog;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- }
- if ((tex->im) && (tex->im->native.data))
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- gc->pipe[pn].array.im = tex->im;
- }
- }
- if (tex->pt->dyn.img)
- {
- if (gc->pipe[pn].array.im != tex->im)
- {
- shader_array_flush(gc);
- gc->pipe[pn].array.im = tex->im;
- }
- }
+ pn = _evas_gl_common_context_push(RTYPE_MAP,
+ gc, tex, NULL,
+ prog,
+ x, y, w, h,
+ blend,
+ smooth,
+ clip, cx, cy, cw, ch);
gc->pipe[pn].region.type = RTYPE_MAP;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
if (yuv)
{
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
}
else if (yuy2)
{
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- }
- else
- {
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
}
-#endif
+ gc->pipe[pn].shader.cur_prog = prog;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = clip;
+ gc->pipe[pn].shader.cx = cx;
+ gc->pipe[pn].shader.cy = cy;
+ gc->pipe[pn].shader.cw = cw;
+ gc->pipe[pn].shader.ch = ch;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = (yuv || yuy2) ? 1 : 0;
+ gc->pipe[pn].array.use_texuv3 = (yuv) ? 1 : 0;
pipe_region_expand(gc, pn, x, y, w, h);