diff options
author | Cedric Bail <cedric.bail@samsung.com> | 2013-11-27 11:06:56 +0900 |
---|---|---|
committer | Cedric Bail <cedric.bail@samsung.com> | 2013-11-27 13:51:40 +0900 |
commit | f45a75f925dc2027bd4fa131952b1eadb4096a0f (patch) | |
tree | 7aec6fc0fc6f82bc2747e0ecd618cd5e0a01c51f | |
parent | 7aa577c774fae89d724546f6120793a0927fa67b (diff) | |
download | efl-f45a75f925dc2027bd4fa131952b1eadb4096a0f.tar.gz |
Revert "Revert "evas: allow fuzziness on the texture format returned by GL.""
This reverts commit 87385b05c3117aa8d46fd4029bfdeadf3444a7b9 that is necessary for desktop target.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_texture.c | 38 |
3 files changed, 42 insertions, 1 deletions
@@ -7,6 +7,10 @@ * ecore anim: Fixed animator not working problem when source_set is changed back and forth very fast. +2013-11-26 Cedric Bail + + * Evas: Allow fuzziness on the texture format returned by GL. + 2013-11-25 Tom Hacohen * Evas textblock: Fixed wrapping of lines ending with whites. @@ -228,6 +228,7 @@ Improvements: - Use mmap/munmap for image data allocation on system that have mmap. - Add iterator for walking child of smart objects, table and a box. - Use Eina_Spinlock for Evas_ScaleCache, Evas_Async_Events and Image_Entry. + - Allow fuzziness on the texture format returned by GL. * Ecore: - Use Eina_Spinlock for Ecore_Thread. * Ecore_Con: 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 1cacce3548..95cb3a4946 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_texture.c +++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c @@ -54,6 +54,42 @@ static const struct { #endif }; +static const GLenum matching_rgba[] = { GL_RGBA4, GL_RGBA8, GL_RGBA12, GL_RGBA16, 0x0 }; +static const GLenum matching_alpha[] = { GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, 0x0 }; +static const GLenum matching_luminance[] = { GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, 0x0 }; +static const GLenum matching_luminance_alpha[] = { GL_LUMINANCE4_ALPHA4, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, 0x0 }; + +static const struct { + GLenum master; + const GLenum *matching; +} matching_fmt[] = { + { GL_RGBA, matching_rgba }, + { GL_ALPHA, matching_alpha }, + { GL_LUMINANCE, matching_luminance }, + { GL_LUMINANCE_ALPHA, matching_luminance_alpha } +}; + +static Eina_Bool +_evas_gl_texture_match(GLenum intfmt, GLenum intfmtret) +{ + unsigned int i; + + if (intfmt == intfmtret) return EINA_TRUE; + + for (i = 0; i < sizeof (matching_fmt) / sizeof (matching_fmt[0]); i++) + if (matching_fmt[i].master == intfmt) + { + unsigned int j; + + for (j = 0; matching_fmt[i].matching[j] != 0x0; j++) + if (matching_fmt[i].matching[j] == intfmtret) + return EINA_TRUE; + return EINA_FALSE; + } + + return EINA_FALSE; +} + static int _evas_gl_texture_search_format(Eina_Bool alpha, Eina_Bool bgra) { @@ -161,7 +197,7 @@ _tex_2d(Evas_Engine_GL_Context *gc, int intfmt, int w, int h, int fmt, int type) glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &intfmtret); - if (intfmtret != intfmt) + if (!_evas_gl_texture_match(intfmt, intfmtret)) { ERR("Fail tex alloc %ix%i", w, h); // XXX send async err to evas |