evas: refactorize OpenGL engine.

SVN revision: 62752
This commit is contained in:
Cedric BAIL 2011-08-24 16:20:15 +00:00
parent b63efee190
commit cea7b9dddb
3 changed files with 176 additions and 466 deletions

View File

@ -118,9 +118,44 @@ typedef struct _Evas_GL_Font_Texture Evas_GL_Font_Texture;
typedef struct _Evas_GL_Polygon Evas_GL_Polygon;
typedef struct _Evas_GL_Polygon_Point Evas_GL_Polygon_Point;
typedef enum {
SHADER_RECT,
SHADER_FONT,
SHADER_IMG,
SHADER_IMG_NOMUL,
SHADER_IMG_BGRA,
SHADER_IMG_BGRA_NOMUL,
SHADER_IMG_MASK,
SHADER_YUV,
SHADER_YUV_NOMUL,
SHADER_YUY2,
SHADER_YUY2_NOMUL,
SHADER_TEX,
SHADER_TEX_NOMUL,
SHADER_FILTER_INVERT,
SHADER_FILTER_INVERT_NOMUL,
SHADER_FILTER_INVERT_BGRA,
SHADER_FILTER_INVERT_BGRA_NOMUL,
SHADER_FILTER_GREYSCALE,
SHADER_FILTER_GREYSCALE_NOMUL,
SHADER_FILTER_GREYSCALE_BGRA,
SHADER_FILTER_GREYSCALE_BGRA_NOMUL,
SHADER_FILTER_SEPIA,
SHADER_FILTER_SEPIA_NOMUL,
SHADER_FILTER_SEPIA_BGRA,
SHADER_FILTER_SEPIA_BGRA_NOMUL,
/* SHADER_FILTER_BLUR, */
/* SHADER_FILTER_BLUR_NOMUL, */
/* SHADER_FILTER_BLUR_BGRA, */
/* SHADER_FILTER_BLUR_BGRA_NOMUL, */
SHADER_LAST
} Evas_GL_Shader;
struct _Evas_GL_Program
{
GLuint vert, frag, prog;
int tex_count;
};
struct _Evas_GL_Program_Source
@ -200,29 +235,8 @@ struct _Evas_GL_Shared
Eina_Hash *native_pm_hash;
Eina_Hash *native_tex_hash;
struct {
Evas_GL_Program rect;
Evas_GL_Program font;
Evas_GL_Program shader[SHADER_LAST];
Evas_GL_Program img, img_nomul;
Evas_GL_Program img_bgra, img_bgra_nomul;
Evas_GL_Program img_mask;
Evas_GL_Program yuv, yuv_nomul;
Evas_GL_Program yuy2, yuy2_nomul;
Evas_GL_Program tex, tex_nomul;
Evas_GL_Program filter_invert, filter_invert_nomul;
Evas_GL_Program filter_invert_bgra, filter_invert_bgra_nomul;
Evas_GL_Program filter_greyscale, filter_greyscale_nomul;
Evas_GL_Program filter_greyscale_bgra, filter_greyscale_bgra_nomul;
Evas_GL_Program filter_sepia, filter_sepia_nomul;
Evas_GL_Program filter_sepia_bgra, filter_sepia_bgra_nomul;
#if 0
Evas_GL_Program filter_blur_vert;
Evas_GL_Program filter_blur, filter_blur_nomul;
Evas_GL_Program filter_blur_bgra, filter_blur_bgra_nomul;
#endif
} shader;
int references;
int w, h;
int rot;
@ -410,6 +424,7 @@ struct _Evas_GL_Polygon_Point
int x, y;
};
#if 0
extern Evas_GL_Program_Source shader_rect_frag_src;
extern Evas_GL_Program_Source shader_rect_vert_src;
extern Evas_GL_Program_Source shader_font_frag_src;
@ -453,7 +468,6 @@ extern Evas_GL_Program_Source shader_filter_greyscale_frag_src;
extern Evas_GL_Program_Source shader_filter_greyscale_nomul_frag_src;
extern Evas_GL_Program_Source shader_filter_greyscale_bgra_frag_src;
extern Evas_GL_Program_Source shader_filter_greyscale_bgra_nomul_frag_src;
#if 0
/* blur (annoyingly) needs (aka is faster with) a vertex shader */
extern Evas_GL_Program_Source shader_filter_blur_vert_src;
extern Evas_GL_Program_Source shader_filter_blur_frag_src;

View File

@ -324,6 +324,7 @@ static void
_evas_gl_common_viewport_set(Evas_Engine_GL_Context *gc)
{
GLfloat proj[16];
unsigned int i;
int w = 1, h = 1, m = 1, rot = 1, foc = 0;
EINA_SAFETY_ON_NULL_RETURN(gc);
@ -445,162 +446,13 @@ _evas_gl_common_viewport_set(Evas_Engine_GL_Context *gc)
gc->shared->ay = ay;
}
glUseProgram(gc->shared->shader.rect.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.rect.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.font.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.font.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.yuv.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.yuv.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.yuv_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.yuv_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.yuy2.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.yuy2.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.yuy2_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.yuy2_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.tex.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.tex.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.tex_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.tex_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.img.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.img.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.img_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.img_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.img_bgra.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.img_bgra.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.img_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.img_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.img_mask.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.img_mask.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_invert.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_invert.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_invert_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_invert_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_invert_bgra.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_invert_bgra.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_invert_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_invert_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_greyscale.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_greyscale.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_greyscale_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_greyscale_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_greyscale_bgra.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_greyscale_bgra.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_greyscale_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_greyscale_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_sepia.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_sepia.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_sepia_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_sepia_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_sepia_bgra.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_sepia_bgra.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_sepia_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_sepia_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
#if 0
glUseProgram(gc->shared->shader.filter_blur_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_blur_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_blur_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_blur_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_blur_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_blur_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(gc->shared->shader.filter_blur_bgra_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader.filter_blur_bgra_nomul.prog, "mvp"), 1,
GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
#endif
for (i = 0; i < SHADER_LAST; ++i)
{
glUseProgram(gc->shared->shader[i].prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader[i].prog, "mvp"), 1, GL_FALSE, proj);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
}
glUseProgram(gc->pipe[0].shader.cur_prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
@ -822,46 +674,28 @@ evas_gl_common_context_new(void)
if (!evas_gl_common_shader_program_init(shared)) goto error;
glUseProgram(shared->shader.yuv.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuv.prog, "tex"), 0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuv.prog, "texu"), 1);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuv.prog, "texv"), 2);
#define SHADER_TEXTURE_ADD(Shared, Shader, Name) \
glUseProgram(Shared->shader[SHADER_##Shader].prog); \
GLERR(__FUNCTION__, __FILE__, __LINE__, ""); \
glUniform1i(glGetUniformLocation(Shared->shader[SHADER_##Shader].prog, #Name), Shared->shader[SHADER_##Shader].tex_count++); \
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(shared->shader.yuy2.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuy2.prog, "tex"), 0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuy2.prog, "texuv"), 1);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
SHADER_TEXTURE_ADD(shared, YUV, tex);
SHADER_TEXTURE_ADD(shared, YUV, texu);
SHADER_TEXTURE_ADD(shared, YUV, texv);
glUseProgram(shared->shader.yuv_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuv_nomul.prog, "tex"), 0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuv_nomul.prog, "texu"), 1);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuv_nomul.prog, "texv"), 2);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
SHADER_TEXTURE_ADD(shared, YUY2, tex);
SHADER_TEXTURE_ADD(shared, YUY2, texuv);
glUseProgram(shared->shader.yuy2_nomul.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuy2_nomul.prog, "tex"), 0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.yuy2_nomul.prog, "texuv"), 1);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUseProgram(shared->shader.img_mask.prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.img_mask.prog, "tex"), 0);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
glUniform1i(glGetUniformLocation(shared->shader.img_mask.prog, "texm"), 1);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
SHADER_TEXTURE_ADD(shared, YUV_NOMUL, tex);
SHADER_TEXTURE_ADD(shared, YUV_NOMUL, texu);
SHADER_TEXTURE_ADD(shared, YUV_NOMUL, texv);
SHADER_TEXTURE_ADD(shared, YUY2_NOMUL, tex);
SHADER_TEXTURE_ADD(shared, YUY2_NOMUL, texuv);
SHADER_TEXTURE_ADD(shared, IMG_MASK, tex);
SHADER_TEXTURE_ADD(shared, IMG_MASK, texm);
glUseProgram(gc->pipe[0].shader.cur_prog);
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
@ -918,22 +752,10 @@ evas_gl_common_context_free(Evas_Engine_GL_Context *gc)
if ((gc->shared) && (gc->shared->references == 0))
{
Evas_GL_Texture_Pool *pt;
int i;
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.rect));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.font));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_nomul));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_bgra));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_bgra_nomul));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_mask));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.yuv));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.yuv_nomul));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.yuy2));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.yuy2_nomul));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.tex));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.tex_nomul));
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.filter_invert));
for (i = 0; i < SHADER_LAST; ++i)
evas_gl_common_shader_program_shutdown(&(gc->shared->shader[i]));
while (gc->shared->images)
{
@ -1269,7 +1091,7 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
{
int pnum, nv, nc, nu, nt, i;
Eina_Bool blend = 0;
GLuint prog = gc->shared->shader.rect.prog;
GLuint prog = gc->shared->shader[SHADER_RECT].prog;
int pn = 0;
if (a < 255) blend = 1;
@ -1324,7 +1146,7 @@ evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
{
int pnum, nv, nc, nu, nt, i;
Eina_Bool blend = 0;
GLuint prog = gc->shared->shader.rect.prog;
GLuint prog = gc->shared->shader[SHADER_RECT].prog;
int pn = 0;
if (gc->dc->mask.mask)
@ -1475,7 +1297,7 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
int pnum, nv, nc, nu, nu2, nt, i;
GLfloat tx1, tx2, ty1, ty2;
Eina_Bool blend = 1;
GLuint prog = gc->shared->shader.img.prog;
GLuint prog = gc->shared->shader[SHADER_IMG].prog;
int pn = 0;
if (!tex->alpha) blend = 0;
@ -1490,16 +1312,16 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
if (tex->pt->dyn.img)
{
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
prog = gc->shared->shader.img_nomul.prog;
prog = gc->shared->shader[SHADER_IMG_NOMUL].prog;
else
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
else
{
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
prog = gc->shared->shader.tex_nomul.prog;
prog = gc->shared->shader[SHADER_TEX_NOMUL].prog;
else
prog = gc->shared->shader.tex.prog;
prog = gc->shared->shader[SHADER_TEX].prog;
}
}
else
@ -1507,16 +1329,16 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
if (tex->gc->shared->info.bgra)
{
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
prog = gc->shared->shader.img_bgra_nomul.prog;
prog = gc->shared->shader[SHADER_IMG_BGRA_NOMUL].prog;
else
prog = gc->shared->shader.img_bgra.prog;
prog = gc->shared->shader[SHADER_IMG_BGRA].prog;
}
else
{
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
prog = gc->shared->shader.img_nomul.prog;
prog = gc->shared->shader[SHADER_IMG_NOMUL].prog;
else
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
}
@ -1724,19 +1546,19 @@ evas_gl_common_context_image_mask_push(Evas_Engine_GL_Context *gc,
GLfloat tx1, tx2, ty1, ty2;
GLfloat txm1, txm2, tym1, tym2;
Eina_Bool blend = 1;
GLuint prog = gc->shared->shader.img_mask.prog;
GLuint prog = gc->shared->shader[SHADER_IMG_MASK].prog;
int pn = 0;
#if 0
if (tex->gc->shared->info.bgra)
{
prog = gc->shared->shader.img_mask.prog;
prog = gc->shared->shader[SHADER_IMG_MASK].prog;
}
else
{
#warning Nash: FIXME: Need two shaders?
printf("Not good: Need other texture\n");
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
#endif
@ -1966,6 +1788,7 @@ evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
{
int pnum, nv, nc, nu, nt, i;
GLfloat tx1, tx2, ty1, ty2;
GLuint prog = gc->shared->shader[SHADER_FONT].prog;
int pn = 0;
again:
@ -1976,7 +1799,7 @@ again:
{
gc->pipe[pn].region.type = RTYPE_FONT;
gc->pipe[pn].shader.cur_tex = tex->pt->texture;
gc->pipe[pn].shader.cur_prog = gc->shared->shader.font.prog;
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;
@ -2000,7 +1823,7 @@ again:
{
if ((gc->pipe[i].region.type == RTYPE_FONT)
&& (gc->pipe[i].shader.cur_tex == tex->pt->texture)
&& (gc->pipe[i].shader.cur_prog == gc->shared->shader.font.prog)
&& (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)
@ -2024,7 +1847,7 @@ 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 = gc->shared->shader.font.prog;
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;
@ -2043,7 +1866,7 @@ again:
}
#else
if ((gc->pipe[pn].shader.cur_tex != tex->pt->texture)
|| (gc->pipe[pn].shader.cur_prog != gc->shared->shader.font.prog)
|| (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)
@ -2052,7 +1875,7 @@ again:
{
shader_array_flush(gc);
gc->pipe[pn].shader.cur_tex = tex->pt->texture;
gc->pipe[pn].shader.cur_prog = gc->shared->shader.font.prog;
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;
@ -2127,15 +1950,15 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
int pnum, nv, nc, nu, nu2, nu3, nt, i;
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
Eina_Bool blend = 0;
GLuint prog = gc->shared->shader.yuv.prog;
GLuint prog = gc->shared->shader[SHADER_YUV].prog;
int pn = 0;
if (a < 255) blend = 1;
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
prog = gc->shared->shader.yuv_nomul.prog;
prog = gc->shared->shader[SHADER_YUV_NOMUL].prog;
else
prog = gc->shared->shader.yuv.prog;
prog = gc->shared->shader[SHADER_YUV].prog;
again:
vertex_array_size_check(gc, gc->state.top_pipe, 6);
@ -2171,7 +1994,7 @@ again:
{
if ((gc->pipe[i].region.type == RTYPE_YUV)
&& (gc->pipe[i].shader.cur_tex == tex->pt->texture)
&& (gc->pipe[i].shader.cur_prog == gc->shared->shader.font.prog)
&& (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)
@ -2314,15 +2137,15 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
int pnum, nv, nc, nu, nu2, nu3, nt, i;
GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
Eina_Bool blend = 0;
GLuint prog = gc->shared->shader.yuy2.prog;
GLuint prog = gc->shared->shader[SHADER_YUY2].prog;
int pn = 0;
if (a < 255) blend = 1;
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
prog = gc->shared->shader.yuy2_nomul.prog;
prog = gc->shared->shader[SHADER_YUY2_NOMUL].prog;
else
prog = gc->shared->shader.yuy2.prog;
prog = gc->shared->shader[SHADER_YUY2].prog;
again:
vertex_array_size_check(gc, gc->state.top_pipe, 6);
@ -2357,7 +2180,7 @@ again:
{
if ((gc->pipe[i].region.type == RTYPE_YUY2)
&& (gc->pipe[i].shader.cur_tex == tex->pt->texture)
&& (gc->pipe[i].shader.cur_prog == gc->shared->shader.font.prog)
&& (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)
@ -2496,7 +2319,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 = 1;
DATA32 cmul;
GLuint prog = gc->shared->shader.img.prog;
GLuint prog = gc->shared->shader[SHADER_IMG].prog;
int pn = 0;
int flat = 0;
@ -2523,31 +2346,31 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
}
if (yuv)
{
prog = gc->shared->shader.yuv.prog;
prog = gc->shared->shader[SHADER_YUV].prog;
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
{
if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
(p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
prog = gc->shared->shader.yuv_nomul.prog;
prog = gc->shared->shader[SHADER_YUV_NOMUL].prog;
else
prog = gc->shared->shader.yuv.prog;
prog = gc->shared->shader[SHADER_YUV].prog;
}
else
prog = gc->shared->shader.yuv.prog;
prog = gc->shared->shader[SHADER_YUV].prog;
}
else if (yuy2)
{
prog = gc->shared->shader.yuy2.prog;
prog = gc->shared->shader[SHADER_YUY2].prog;
if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
{
if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
(p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
prog = gc->shared->shader.yuy2_nomul.prog;
prog = gc->shared->shader[SHADER_YUY2_NOMUL].prog;
else
prog = gc->shared->shader.yuy2.prog;
prog = gc->shared->shader[SHADER_YUY2].prog;
}
else
prog = gc->shared->shader.yuy2.prog;
prog = gc->shared->shader[SHADER_YUY2].prog;
}
else
{
@ -2559,12 +2382,12 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
{
if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
(p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
prog = gc->shared->shader.img_nomul.prog;
prog = gc->shared->shader[SHADER_IMG_NOMUL].prog;
else
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
else
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
else
{
@ -2572,12 +2395,12 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
{
if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
(p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
prog = gc->shared->shader.tex_nomul.prog;
prog = gc->shared->shader[SHADER_TEX_NOMUL].prog;
else
prog = gc->shared->shader.tex.prog;
prog = gc->shared->shader[SHADER_TEX].prog;
}
else
prog = gc->shared->shader.tex.prog;
prog = gc->shared->shader[SHADER_TEX].prog;
}
}
else
@ -2588,12 +2411,12 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
{
if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
(p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
prog = gc->shared->shader.img_bgra_nomul.prog;
prog = gc->shared->shader[SHADER_IMG_BGRA_NOMUL].prog;
else
prog = gc->shared->shader.img_bgra.prog;
prog = gc->shared->shader[SHADER_IMG_BGRA].prog;
}
else
prog = gc->shared->shader.img_bgra.prog;
prog = gc->shared->shader[SHADER_IMG_BGRA].prog;
}
else
{
@ -2601,12 +2424,12 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
{
if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
(p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
prog = gc->shared->shader.img_nomul.prog;
prog = gc->shared->shader[SHADER_IMG_NOMUL].prog;
else
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
else
prog = gc->shared->shader.img.prog;
prog = gc->shared->shader[SHADER_IMG].prog;
}
}
}

View File

@ -1006,131 +1006,61 @@ _evas_gl_common_shader_program_source_init(Evas_GL_Program *p,
return 1;
}
#define SHADER_SOURCE_LINE(Big, Small) \
{ SHADER_##Big, &(shader_##Small##_vert_src), &(shader_##Small##_frag_src), #Small }
#define SHADER_SOURCE_FILTER_LINE(Big, Small) \
{ SHADER_##Big, &(shader_img_vert_src), &(shader_##Small##_frag_src), #Small }
static const struct {
Evas_GL_Shader id;
Evas_GL_Program_Source *vert;
Evas_GL_Program_Source *frag;
const char *name;
} _shaders_source[] = {
SHADER_SOURCE_LINE(RECT, rect),
SHADER_SOURCE_LINE(FONT, font),
SHADER_SOURCE_LINE(IMG, img),
SHADER_SOURCE_LINE(IMG_NOMUL, img_nomul),
SHADER_SOURCE_LINE(IMG_BGRA, img_bgra),
SHADER_SOURCE_LINE(IMG_BGRA_NOMUL, img_bgra_nomul),
SHADER_SOURCE_LINE(IMG_MASK, img_mask),
SHADER_SOURCE_LINE(YUV, yuv),
SHADER_SOURCE_LINE(YUV_NOMUL, yuv_nomul),
SHADER_SOURCE_LINE(YUY2, yuy2),
SHADER_SOURCE_LINE(YUY2_NOMUL, yuy2_nomul),
SHADER_SOURCE_LINE(TEX, tex),
SHADER_SOURCE_LINE(TEX_NOMUL, tex_nomul),
/* Most of the filters use the image fragment shader */
SHADER_SOURCE_FILTER_LINE(FILTER_INVERT, filter_invert),
SHADER_SOURCE_FILTER_LINE(FILTER_INVERT_NOMUL, filter_invert_nomul),
SHADER_SOURCE_FILTER_LINE(FILTER_INVERT_BGRA, filter_invert_bgra),
SHADER_SOURCE_FILTER_LINE(FILTER_INVERT_BGRA_NOMUL, filter_invert_bgra_nomul),
SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE, filter_greyscale),
SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE_NOMUL, filter_greyscale_nomul),
SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE_BGRA, filter_greyscale_bgra),
SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE_BGRA_NOMUL, filter_greyscale_bgra_nomul),
SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA, filter_sepia),
SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA_NOMUL, filter_sepia_nomul),
SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA_BGRA, filter_sepia_bgra),
SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA_BGRA_NOMUL, filter_sepia_bgra_nomul)/* , */
/* SHADER_SOURCE_LINE(FILTER_BLUR, filter_blur), */
/* SHADER_SOURCE_LINE(FILTER_BLUR_NOMUL, filter_blur_nomul), */
/* SHADER_SOURCE_LINE(FILTER_BLUR_BGRA, filter_blur_bgra), */
/* SHADER_SOURCE_LINE(FILTER_BLUR_BGRA_NOMUL, filter_blur_bgra_nomul) */
};
static int
_evas_gl_common_shader_source_init(Evas_GL_Shared *shared)
{
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.rect),
&(shader_rect_vert_src),
&(shader_rect_frag_src),
"rect")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.font),
&(shader_font_vert_src),
&(shader_font_frag_src),
"font")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.img),
&(shader_img_vert_src),
&(shader_img_frag_src),
"img")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.img_nomul),
&(shader_img_nomul_vert_src),
&(shader_img_nomul_frag_src),
"img_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.img_bgra),
&(shader_img_bgra_vert_src),
&(shader_img_bgra_frag_src),
"img_bgra")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.img_bgra_nomul),
&(shader_img_bgra_nomul_vert_src),
&(shader_img_bgra_nomul_frag_src),
"img_bgra_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.img_mask),
&(shader_img_mask_vert_src),
&(shader_img_mask_frag_src),
"img_mask")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.tex),
&(shader_tex_vert_src),
&(shader_tex_frag_src),
"tex")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.tex_nomul),
&(shader_tex_nomul_vert_src),
&(shader_tex_nomul_frag_src),
"tex_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.yuv),
&(shader_yuv_vert_src),
&(shader_yuv_frag_src),
"yuv")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.yuy2),
&(shader_yuy2_vert_src),
&(shader_yuy2_frag_src),
"yuy2")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.yuy2_nomul),
&(shader_yuy2_nomul_vert_src),
&(shader_yuy2_nomul_frag_src),
"yuy2_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.yuv_nomul),
&(shader_yuv_nomul_vert_src),
&(shader_yuv_nomul_frag_src),
"yuv_nomul")) return 0;
unsigned int i;
/* Most of the filters use the image fragment shader */
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_invert),
&(shader_img_vert_src),
&(shader_filter_invert_frag_src),
"filter_invert")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_invert_nomul),
&(shader_img_vert_src),
&(shader_filter_invert_nomul_frag_src),
"filter_invert_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_invert_bgra),
&(shader_img_vert_src),
&(shader_filter_invert_bgra_frag_src),
"filter_invert_bgra")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_invert_bgra_nomul),
&(shader_img_vert_src),
&(shader_filter_invert_bgra_nomul_frag_src),
"filter_invert_bgra_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_sepia),
&(shader_img_vert_src),
&(shader_filter_sepia_frag_src),
"filter_sepia")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_sepia_nomul),
&(shader_img_vert_src),
&(shader_filter_sepia_nomul_frag_src),
"filter_sepia_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_sepia_bgra),
&(shader_img_vert_src),
&(shader_filter_sepia_bgra_frag_src),
"filter_sepia_bgra")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_sepia_bgra_nomul),
&(shader_img_vert_src),
&(shader_filter_sepia_bgra_nomul_frag_src),
"filter_sepia_bgra_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_greyscale),
&(shader_img_vert_src),
&(shader_filter_greyscale_frag_src),
"filter_greyscale")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_greyscale_nomul),
&(shader_img_vert_src),
&(shader_filter_greyscale_nomul_frag_src),
"filter_greyscale_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_greyscale_bgra),
&(shader_img_vert_src),
&(shader_filter_greyscale_bgra_frag_src),
"filter_greyscale_bgra")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_greyscale_bgra_nomul),
&(shader_img_vert_src),
&(shader_filter_greyscale_bgra_nomul_frag_src),
"filter_greyscale_bgra_nomul")) return 0;
#if 0
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_blur),
&(shader_filter_blur_vert_src),
&(shader_filter_blur_frag_src),
"filter_blur")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_blur_nomul),
&(shader_filter_blur_vert_src),
&(shader_filter_blur_nomul_frag_src),
"filter_blur_nomul")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_blur_bgra),
&(shader_filter_blur_vert_src),
&(shader_filter_blur_bgra_frag_src),
"filter_blur_bgra")) return 0;
if (!_evas_gl_common_shader_program_source_init(&(shared->shader.filter_blur_bgra_nomul),
&(shader_filter_blur_vert_src),
&(shader_filter_blur_bgra_nomul_frag_src),
"filter_blur_bgra_nomul")) return 0;
#endif
for (i = 0; i < sizeof (_shaders_source) / sizeof (_shaders_source[0]); ++i)
if (!_evas_gl_common_shader_program_source_init(&(shared->shader[_shaders_source[i].id]),
_shaders_source[i].vert,
_shaders_source[i].frag,
_shaders_source[i].name))
return 0;
return 1;
}
@ -1142,6 +1072,7 @@ _evas_gl_common_shader_binary_init(Evas_GL_Shared *shared)
Eet_File *et = NULL;
char bin_dir_path[PATH_MAX];
char bin_file_path[PATH_MAX];
unsigned int i;
if (!_evas_gl_shader_dir_check(bin_dir_path, sizeof(bin_dir_path)))
return 0;
@ -1155,41 +1086,11 @@ _evas_gl_common_shader_binary_init(Evas_GL_Shared *shared)
et = eet_open(bin_file_path, EET_FILE_MODE_READ);
if (!et) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.rect), "rect", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.font), "font", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.img), "img", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.img_nomul), "img_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.img_bgra), "img_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.img_bgra_nomul), "img_bgra_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.img_mask), "img_mask", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.tex), "tex", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.tex_nomul),"tex_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.yuv), "yuv", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.yuy2), "yuy2", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.yuv_nomul), "yuv_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.yuy2_nomul), "yuy2_nomul", et)) goto error;
/* Most of the filters use the image fragment shader */
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_invert), "filter_invert", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_invert_nomul), "filter_invert_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_invert_bgra), "filter_invert_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_invert_bgra_nomul), "filter_invert_bgra_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_sepia), "filter_sepia", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_sepia_nomul), "filter_sepia_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_sepia_bgra), "filter_sepia_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_sepia_bgra_nomul), "filter_sepia_bgra_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_greyscale), "filter_greyscale", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_greyscale_nomul), "filter_greyscale_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_greyscale_bgra), "filter_greyscale_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_greyscale_bgra_nomul), "filter_greyscale_bgra_nomul", et)) goto error;
#if 0
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_blur), "filter_blur", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_blur_nomul), "filter_blur_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_blur_bgra), "filter_blur_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader.filter_blur_bgra_nomul), "filter_blur_bgra_nomul", et)) goto error;
#endif
for (i = 0; i < sizeof (_shaders_source) / sizeof (_shaders_source[0]); ++i)
if (!_evas_gl_common_shader_program_binary_init(&(shared->shader[_shaders_source[i].id]),
_shaders_source[i].name,
et))
goto error;
if (et) eet_close(et);
eet_shutdown();
@ -1211,6 +1112,7 @@ _evas_gl_common_shader_binary_save(Evas_GL_Shared *shared)
char bin_dir_path[PATH_MAX];
char bin_file_path[PATH_MAX];
char tmp_file[PATH_MAX];
unsigned int i;
if (!_evas_gl_shader_dir_check(bin_dir_path, sizeof(bin_dir_path)))
res = _evas_gl_shader_file_mkpath(bin_dir_path);
@ -1231,40 +1133,11 @@ _evas_gl_common_shader_binary_save(Evas_GL_Shared *shared)
et = eet_open(tmp_file, EET_FILE_MODE_WRITE);
if (!et) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.rect), "rect", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.font), "font", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.img), "img", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.img_nomul), "img_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.img_bgra), "img_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.img_bgra_nomul), "img_bgra_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.img_mask), "img_mask", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.tex), "tex", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.tex_nomul),"tex_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.yuv), "yuv", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.yuy2), "yuy2", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.yuv_nomul), "yuv_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.yuy2_nomul), "yuy2_nomul", et)) goto error;
/* Most of the filters use the image fragment shader */
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_invert), "filter_invert", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_invert_nomul), "filter_invert_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_invert_bgra), "filter_invert_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_invert_bgra_nomul), "filter_invert_bgra_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_sepia), "filter_sepia", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_sepia_nomul), "filter_sepia_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_sepia_bgra), "filter_sepia_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_sepia_bgra_nomul), "filter_sepia_bgra_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_greyscale), "filter_greyscale", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_greyscale_nomul), "filter_greyscale_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_greyscale_bgra), "filter_greyscale_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_greyscale_bgra_nomul), "filter_greyscale_bgra_nomul", et)) goto error;
#if 0
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_blur), "filter_blur", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_blur_nomul), "filter_blur_nomul", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_blur_bgra), "filter_blur_bgra", et)) goto error;
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader.filter_blur_bgra_nomul), "filter_blur_bgra_nomul", et)) goto error;
#endif
for (i = 0; i < sizeof (_shaders_source) / sizeof (_shaders_source[0]); ++i)
if (!_evas_gl_common_shader_program_binary_save(&(shared->shader[_shaders_source[i].id]),
_shaders_source[i].name,
et))
goto error;
if (eet_close(et) != EET_ERROR_NONE) goto error;
if (rename(tmp_file,bin_file_path) < 0) goto error;