forked from enlightenment/efl
if shader compile fails - peroclate error back up to engine info_set so we
know gl engine is useless. SVN revision: 48956
This commit is contained in:
parent
3cd8279021
commit
4fefcad954
|
@ -322,7 +322,7 @@ void evas_gl_common_context_image_map4_push(Evas_GL_Context *gc,
|
|||
Eina_Bool tex_only);
|
||||
void evas_gl_common_context_flush(Evas_GL_Context *gc);
|
||||
|
||||
void evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
||||
int evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
||||
Evas_GL_Program_Source *vert,
|
||||
Evas_GL_Program_Source *frag,
|
||||
const char *name);
|
||||
|
|
|
@ -454,46 +454,46 @@ evas_gl_common_context_new(void)
|
|||
glEnableVertexAttribArray(SHAD_COLOR);
|
||||
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
||||
|
||||
evas_gl_common_shader_program_init(&(shared->shader.rect),
|
||||
&(shader_rect_vert_src),
|
||||
&(shader_rect_frag_src),
|
||||
"rect");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.font),
|
||||
&(shader_font_vert_src),
|
||||
&(shader_font_frag_src),
|
||||
"font");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.img),
|
||||
&(shader_img_vert_src),
|
||||
&(shader_img_frag_src),
|
||||
"img");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.img_nomul),
|
||||
&(shader_img_nomul_vert_src),
|
||||
&(shader_img_nomul_frag_src),
|
||||
"img_nomul");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.img_bgra),
|
||||
&(shader_img_bgra_vert_src),
|
||||
&(shader_img_bgra_frag_src),
|
||||
"img_bgra");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.img_bgra_nomul),
|
||||
&(shader_img_bgra_nomul_vert_src),
|
||||
&(shader_img_bgra_nomul_frag_src),
|
||||
"img_bgra_nomul");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.tex),
|
||||
&(shader_tex_vert_src),
|
||||
&(shader_tex_frag_src),
|
||||
"tex");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.tex_nomul),
|
||||
&(shader_tex_nomul_vert_src),
|
||||
&(shader_tex_nomul_frag_src),
|
||||
"tex_nomul");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.yuv),
|
||||
&(shader_yuv_vert_src),
|
||||
&(shader_yuv_frag_src),
|
||||
"yuv");
|
||||
evas_gl_common_shader_program_init(&(shared->shader.yuv_nomul),
|
||||
&(shader_yuv_nomul_vert_src),
|
||||
&(shader_yuv_nomul_frag_src),
|
||||
"yuv_nomul");
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.rect),
|
||||
&(shader_rect_vert_src),
|
||||
&(shader_rect_frag_src),
|
||||
"rect")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.font),
|
||||
&(shader_font_vert_src),
|
||||
&(shader_font_frag_src),
|
||||
"font")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.img),
|
||||
&(shader_img_vert_src),
|
||||
&(shader_img_frag_src),
|
||||
"img")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.img_nomul),
|
||||
&(shader_img_nomul_vert_src),
|
||||
&(shader_img_nomul_frag_src),
|
||||
"img_nomul")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.img_bgra),
|
||||
&(shader_img_bgra_vert_src),
|
||||
&(shader_img_bgra_frag_src),
|
||||
"img_bgra")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.img_bgra_nomul),
|
||||
&(shader_img_bgra_nomul_vert_src),
|
||||
&(shader_img_bgra_nomul_frag_src),
|
||||
"img_bgra_nomul")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.tex),
|
||||
&(shader_tex_vert_src),
|
||||
&(shader_tex_frag_src),
|
||||
"tex")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.tex_nomul),
|
||||
&(shader_tex_nomul_vert_src),
|
||||
&(shader_tex_nomul_frag_src),
|
||||
"tex_nomul")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.yuv),
|
||||
&(shader_yuv_vert_src),
|
||||
&(shader_yuv_frag_src),
|
||||
"yuv")) goto error;
|
||||
if (!evas_gl_common_shader_program_init(&(shared->shader.yuv_nomul),
|
||||
&(shader_yuv_nomul_vert_src),
|
||||
&(shader_yuv_nomul_frag_src),
|
||||
"yuv_nomul")) goto error;
|
||||
|
||||
glUseProgram(shared->shader.yuv.prog);
|
||||
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
||||
|
@ -530,6 +530,9 @@ evas_gl_common_context_new(void)
|
|||
gc->def_surface = evas_gl_common_image_surface_new(gc, 1, 1, 1);
|
||||
|
||||
return gc;
|
||||
error:
|
||||
evas_gl_common_context_free(gc);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -539,11 +542,11 @@ evas_gl_common_context_free(Evas_GL_Context *gc)
|
|||
|
||||
gc->references--;
|
||||
if (gc->references > 0) return;
|
||||
gc->shared->references--;
|
||||
if (gc->shared) gc->shared->references--;
|
||||
|
||||
evas_gl_common_image_free(gc->def_surface);
|
||||
if (gc->def_surface) evas_gl_common_image_free(gc->def_surface);
|
||||
|
||||
if (gc->shared->references == 0)
|
||||
if ((gc->shared) && (gc->shared->references == 0))
|
||||
{
|
||||
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.rect));
|
||||
evas_gl_common_shader_program_shutdown(&(gc->shared->shader.font));
|
||||
|
|
|
@ -420,7 +420,7 @@ gl_compile_link_error(GLuint target, const char *action)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
||||
Evas_GL_Program_Source *vert,
|
||||
Evas_GL_Program_Source *frag,
|
||||
|
@ -447,7 +447,7 @@ evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
|||
{
|
||||
gl_compile_link_error(p->vert, "compile vertex shader");
|
||||
printf("Abort compile of shader vert (%s):\n%s\n", name, vert->src);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
glShaderSource(p->frag, 1,
|
||||
(const char **)&(frag->src), NULL);
|
||||
|
@ -460,7 +460,7 @@ evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
|||
{
|
||||
gl_compile_link_error(p->frag, "compile fragment shader");
|
||||
printf("Abort compile of shader frag (%s):\n%s\n", name, frag->src);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
p->prog = glCreateProgram();
|
||||
|
@ -489,8 +489,9 @@ evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
|||
gl_compile_link_error(p->prog, "link fragment and vertex shaders");
|
||||
printf("Abort compile of shader frag (%s):\n%s\n", name, frag->src);
|
||||
printf("Abort compile of shader vert (%s):\n%s\n", name, vert->src);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -339,7 +339,17 @@ eng_setup(Evas *e, void *in)
|
|||
}
|
||||
|
||||
}
|
||||
if (!e->engine.data.output) return 0;
|
||||
if (!re->win)
|
||||
{
|
||||
free(re);
|
||||
return 0;
|
||||
}
|
||||
if (!e->engine.data.output)
|
||||
{
|
||||
if (re->win) eng_window_free(re->win);
|
||||
free(re);
|
||||
return 0;
|
||||
}
|
||||
if (!e->engine.data.context)
|
||||
e->engine.data.context =
|
||||
e->engine.func->context_new(e->engine.data.output);
|
||||
|
@ -362,13 +372,15 @@ eng_output_free(void *data)
|
|||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *)data;
|
||||
|
||||
|
||||
if (re)
|
||||
{
|
||||
// NOTE: XrmGetDatabase() result is shared per connection, do not free it.
|
||||
// if (re->xrdb) XrmDestroyDatabase(re->xrdb);
|
||||
|
||||
eng_window_free(re->win);
|
||||
free(re);
|
||||
|
||||
if (re->win) eng_window_free(re->win);
|
||||
free(re);
|
||||
}
|
||||
evas_common_font_shutdown();
|
||||
evas_common_image_shutdown();
|
||||
}
|
||||
|
|
|
@ -382,7 +382,7 @@ eng_window_new(Display *disp,
|
|||
gw->gl_context = evas_gl_common_context_new();
|
||||
if (!gw->gl_context)
|
||||
{
|
||||
free(gw);
|
||||
eng_window_free(gw);
|
||||
return NULL;
|
||||
}
|
||||
evas_gl_common_context_use(gw->gl_context);
|
||||
|
@ -396,7 +396,7 @@ eng_window_free(Evas_GL_X11_Window *gw)
|
|||
{
|
||||
win_count--;
|
||||
if (gw == _evas_gl_x11_window) _evas_gl_x11_window = NULL;
|
||||
evas_gl_common_context_free(gw->gl_context);
|
||||
if (gw->gl_context) evas_gl_common_context_free(gw->gl_context);
|
||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||
if (gw->egl_surface[0] != EGL_NO_SURFACE)
|
||||
eglDestroySurface(gw->egl_disp, gw->egl_surface[0]);
|
||||
|
|
Loading…
Reference in New Issue