jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=698f7f17709064cbcfc9b04425131f5d7fbe7699
commit 698f7f17709064cbcfc9b04425131f5d7fbe7699 Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Wed Jul 9 10:09:03 2014 +0900 Evas gl: Don't use glCompressedTexSubImage2D for ETC1 Eeeeh. Not only we don't support atlasses with this RGB+A thing yet, but ETC1 does not even support SubImage2D (according to the current spec). Also, fix a few typos in that same function. --- .../evas/engines/gl_common/evas_gl_texture.c | 40 +++++++++++++--------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_texture.c b/src/modules/evas/engines/gl_common/evas_gl_texture.c index 3d9ac62..791dafb 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_texture.c +++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c @@ -1517,10 +1517,10 @@ evas_gl_common_texture_rgb_a_pair_new(Evas_Engine_GL_Context *gc, void evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, - RGBA_Image *im) + RGBA_Image *im) { DATA8 *data1, *data2; - Eina_Bool comp, upload; + Eina_Bool comp, upload, subimage = EINA_TRUE; int w, h, sz, rowlen, ystep = 1; if (!tex->pt) return; @@ -1530,6 +1530,10 @@ evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, ((int) im->cache_entry.space <= (int) EVAS_COLORSPACE_RGBA_S3TC_DXT5)) ystep = 4; + if ((im->cache_entry.space == EVAS_COLORSPACE_ETC1) || + (im->cache_entry.space == EVAS_COLORSPACE_ETC1_ALPHA)) + subimage = tex->gc->shared->info.etc1_subimage; + w = im->cache_entry.w + im->cache_entry.borders.l + im->cache_entry.borders.r; h = im->cache_entry.h + im->cache_entry.borders.t + im->cache_entry.borders.b; rowlen = _evas_gl_texture_size_get(w, ystep, tex->pt->intformat, NULL); @@ -1538,9 +1542,15 @@ evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, data2 = data1 + sz; upload = !!data1; - if (tex->gc->shared->info.unpack_row_length) + if ((w == tex->pt->w) && (h == tex->pt->h)) + subimage = EINA_FALSE; + + if (!subimage || tex->gc->shared->info.unpack_row_length) { - glPixelStorei(GL_UNPACK_ROW_LENGTH, w); GLERRLOG(); + if (tex->gc->shared->info.unpack_row_length) + { + glPixelStorei(GL_UNPACK_ROW_LENGTH, w); GLERRLOG(); + } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); GLERRLOG(); glBindTexture(GL_TEXTURE_2D, tex->pt->texture); GLERRLOG(); if (!_tex_2d(tex->gc, tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat)) @@ -1548,7 +1558,7 @@ evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, if (upload) { if (comp) - _comp_tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, sz, data1); + glCompressedTexImage2D(GL_TEXTURE_2D, 0, tex->pt->intformat, w, h, 0, sz, data1); else _tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, tex->pt->dataformat, data1); } @@ -1558,9 +1568,9 @@ evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, if (upload) { if (comp) - _comp_tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, sz, data2); + glCompressedTexImage2D(GL_TEXTURE_2D, 0, tex->pta->intformat, w, h, 0, sz, data2); else - _tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, tex->pt->dataformat, data2); + _tex_sub_2d(tex->gc, 0, 0, w, h, tex->pta->format, tex->pta->dataformat, data2); } } else @@ -1603,29 +1613,25 @@ evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, if (w == tex->w) { if (comp) - _comp_tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, sz, data2); + _comp_tex_sub_2d(tex->gc, 0, 0, w, h, tex->pta->format, sz, data2); else - _tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, tex->pt->dataformat, data2); + _tex_sub_2d(tex->gc, 0, 0, w, h, tex->pta->format, tex->pta->dataformat, data2); } else { for (y = 0; y < h; y += ystep) { if (comp) - _comp_tex_sub_2d(tex->gc, 0, 0, w, h, tex->pt->format, sz, data2); + _comp_tex_sub_2d(tex->gc, 0, 0, w, h, tex->pta->format, sz, data2); else - _tex_sub_2d(tex->gc, 0, y, w, ystep, tex->pt->format, - tex->pt->dataformat, data2 + rowlen * y / ystep); + _tex_sub_2d(tex->gc, 0, y, w, ystep, tex->pta->format, + tex->pta->dataformat, data2 + rowlen * y / ystep); } } } } on_error: - if (tex->pt->texture != tex->gc->pipe[0].shader.cur_tex) - { - glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex); - GLERRLOG(); - } + glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex); GLERRLOG(); } Evas_GL_Texture * --