Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/modules/engines/gl_x11 Modified Files: evas_engine.c Log Message: not complete yet - actually i need help with the fragment shader. in evas_gl_texture.c i have a frag shader, and it tries to use a set of 3 textures that act as the yuv planes, BUT the u and v textures (Utex and Vtex) are simply getting values from the Ytex - regardless of what i try. grrr. what's up with that? =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_x11/evas_engine.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- evas_engine.c 9 Dec 2006 08:52:08 -0000 1.17 +++ evas_engine.c 17 Dec 2006 15:48:51 -0000 1.18 @@ -457,6 +457,161 @@ evas_gl_common_gradient_draw(re->win->gl_context, gradient, x, y, w, h); } +static int +eng_image_alpha_get(void *data, void *image) +{ + Render_Engine *re; + Evas_GL_Image *im; + + re = (Render_Engine *)data; + im = image; + /* FIXME: can move to gl_common */ + switch (im->cs.space) + { + case EVAS_COLORSPACE_ARGB8888: + if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1; + default: + break; + } + return 0; +} + +static int +eng_image_colorspace_get(void *data, void *image) +{ + Render_Engine *re; + Evas_GL_Image *im; + + re = (Render_Engine *)data; + im = image; + return im->cs.space; +} + +static void * +eng_image_alpha_set(void *data, void *image, int has_alpha) +{ + Render_Engine *re; + Evas_GL_Image *im; + + re = (Render_Engine *)data; + eng_window_use(re->win); + im = image; + /* FIXME: can move to gl_common */ + if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im; + if ((has_alpha) && (im->im->flags & RGBA_IMAGE_HAS_ALPHA)) return image; + else if ((!has_alpha) && (!(im->im->flags & RGBA_IMAGE_HAS_ALPHA))) return image; + if (im->references > 1) + { + Evas_GL_Image *im_new; + + im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->image->w, im->im->image->h, im->im->image->data, + eng_image_alpha_get(data, image), + eng_image_colorspace_get(data, image)); + if (!im_new) return im; + evas_gl_common_image_free(im); + im = im_new; + } + else + evas_gl_common_image_dirty(im); + if (has_alpha) + im->im->flags |= RGBA_IMAGE_HAS_ALPHA; + else + im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA; + return image; +} + +static void * +eng_image_border_set(void *data, void *image, int l, int r, int t, int b) +{ + Render_Engine *re; + + re = (Render_Engine *)data; + return image; +} + +static void +eng_image_border_get(void *data, void *image, int *l, int *r, int *t, int *b) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + +static char * +eng_image_comment_get(void *data, void *image, char *key) +{ + Render_Engine *re; + Evas_GL_Image *im; + + re = (Render_Engine *)data; + im = image; + return im->im->info.comment; +} + +static char * +eng_image_format_get(void *data, void *image) +{ + Render_Engine *re; + Evas_GL_Image *im; + + re = (Render_Engine *)data; + im = image; + return NULL; +} + +static void +eng_image_colorspace_set(void *data, void *image, int cspace) +{ + Render_Engine *re; + Evas_GL_Image *im; + + re = (Render_Engine *)data; + im = image; + /* FIXME: can move to gl_common */ + if (im->cs.space == cspace) return; + switch (cspace) + { + case EVAS_COLORSPACE_ARGB8888: + if (im->cs.data) + { + if (!im->cs.no_free) free(im->cs.data); + im->cs.data = NULL; + im->cs.no_free = 0; + } + if (!im->im->image->no_free) + evas_common_image_surface_alloc(im->im->image); + break; + case EVAS_COLORSPACE_YCBCR422P601_PL: + case EVAS_COLORSPACE_YCBCR422P709_PL: + evas_common_image_surface_dealloc(im->im->image); + im->im->image->data = NULL; + if (im->tex) evas_gl_common_texture_free(im->tex); + im->tex = NULL; + if (im->cs.data) + { + if (!im->cs.no_free) free(im->cs.data); + } + im->cs.data = calloc(1, im->im->image->h * sizeof(unsigned char *) * 2); + im->cs.no_free = 0; + break; + default: + abort(); + break; + } + im->cs.space = cspace; +} + +static void +eng_image_native_set(void *data, void *image, void *native) +{ +} + +static void * +eng_image_native_get(void *data, void *image) +{ + return NULL; +} + static void * eng_image_load(void *data, char *file, char *key, int *error, Evas_Image_Load_Opts *lo) { @@ -469,23 +624,23 @@ } static void * -eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data) +eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace) { Render_Engine *re; re = (Render_Engine *)data; eng_window_use(re->win); - return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, image_data); + return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, image_data, alpha, cspace); } static void * -eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data) +eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace) { Render_Engine *re; re = (Render_Engine *)data; eng_window_use(re->win); - return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, image_data); + return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, image_data, alpha, cspace); } static void @@ -520,17 +675,23 @@ im_old = image; if ((im_old) && (im_old->im->image->w == w) && (im_old->im->image->h == h)) return image; - im = evas_gl_common_image_new(re->win->gl_context, w, h); if (im_old) { + im = evas_gl_common_image_new(re->win->gl_context, w, h, + eng_image_alpha_get(data, image), + eng_image_colorspace_get(data, image)); +/* evas_common_load_image_data_from_file(im_old->im); if (im_old->im->image->data) { evas_common_blit_rectangle(im_old->im, im->im, 0, 0, w, h, 0, 0); evas_common_cpu_end_opt(); } + */ evas_gl_common_image_free(im_old); } + else + im = evas_gl_common_image_new(re->win->gl_context, w, h, 1, EVAS_COLORSPACE_ARGB8888); return im; } @@ -554,24 +715,38 @@ im = image; eng_window_use(re->win); evas_common_load_image_data_from_file(im->im); - if (to_write) + switch (im->cs.space) { - if (im->references > 1) + case EVAS_COLORSPACE_ARGB8888: + if (to_write) { - Evas_GL_Image *im_new; - - im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->image->w, im->im->image->h, im->im->image->data); - if (!im_new) + if (im->references > 1) { - return im; - *image_data = NULL; + Evas_GL_Image *im_new; + + im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->image->w, im->im->image->h, im->im->image->data, + eng_image_alpha_get(data, image), + eng_image_colorspace_get(data, image)); + if (!im_new) + { + return im; + *image_data = NULL; + } + im = im_new; } - im = im_new; + else + evas_gl_common_image_dirty(im); } - else - evas_gl_common_image_dirty(im); + *image_data = im->im->image->data; + break; + case EVAS_COLORSPACE_YCBCR422P601_PL: + case EVAS_COLORSPACE_YCBCR422P709_PL: + *image_data = im->cs.data; + break; + default: + abort(); + break; } - *image_data = im->im->image->data; return im; } @@ -584,79 +759,41 @@ re = (Render_Engine *)data; im = image; eng_window_use(re->win); - if (image_data != im->im->image->data) + switch (im->cs.space) { - int w, h; - - w = im->im->image->w; - h = im->im->image->h; - evas_gl_common_image_free(im); - return eng_image_new_from_data(data, w, h, image_data); + case EVAS_COLORSPACE_ARGB8888: + if (image_data != im->im->image->data) + { + int w, h; + + w = im->im->image->w; + h = im->im->image->h; + evas_gl_common_image_free(im); + return eng_image_new_from_data(data, w, h, image_data, + eng_image_alpha_get(data, image), + eng_image_colorspace_get(data, image)); + } + break; + case EVAS_COLORSPACE_YCBCR422P601_PL: + case EVAS_COLORSPACE_YCBCR422P709_PL: + if (image_data != im->cs.data) + { + if (im->cs.data) + { + if (!im->cs.no_free) free(im->cs.data); + } + im->cs.data = image_data; + } + break; + default: + abort(); + break; } /* hmmm - but if we wrote... why bother? */ evas_gl_common_image_dirty(im); return im; } -static void * -eng_image_alpha_set(void *data, void *image, int has_alpha) -{ - Render_Engine *re; - Evas_GL_Image *im; - - re = (Render_Engine *)data; - eng_window_use(re->win); - im = image; - if ((has_alpha) && (im->im->flags & RGBA_IMAGE_HAS_ALPHA)) return image; - else if ((!has_alpha) && (!(im->im->flags & RGBA_IMAGE_HAS_ALPHA))) return image; - if (im->references > 1) - { - Evas_GL_Image *im_new; - - im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->image->w, im->im->image->h, im->im->image->data); - if (!im_new) return im; - evas_gl_common_image_free(im); - im = im_new; - } - else - evas_gl_common_image_dirty(im); - if (has_alpha) - im->im->flags |= RGBA_IMAGE_HAS_ALPHA; - else - im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA; - return image; -} - -static int -eng_image_alpha_get(void *data, void *image) -{ - Render_Engine *re; - Evas_GL_Image *im; - - re = (Render_Engine *)data; - im = image; - eng_window_use(re->win); - if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1; - return 0; -} - -static void * -eng_image_border_set(void *data, void *image, int l, int r, int t, int b) -{ - Render_Engine *re; - - re = (Render_Engine *)data; - return image; -} - -static void -eng_image_border_get(void *data, void *image, int *l, int *r, int *t, int *b) -{ - Render_Engine *re; - - re = (Render_Engine *)data; -} - static void eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth) { @@ -669,50 +806,6 @@ src_x, src_y, src_w, src_h, dst_x, dst_y, dst_w, dst_h, smooth); -} - -static char * -eng_image_comment_get(void *data, void *image, char *key) -{ - Render_Engine *re; - Evas_GL_Image *im; - - re = (Render_Engine *)data; - im = image; - return im->im->info.comment; -} - -static char * -eng_image_format_get(void *data, void *image) -{ - Render_Engine *re; - Evas_GL_Image *im; - - re = (Render_Engine *)data; - im = image; - return NULL; -} - -static void -eng_image_colorspace_set(void *data, void *image, int cspace) -{ -} - -static int -eng_image_colorspace_get(void *data, void *image) -{ - return EVAS_COLORSPACE_ARGB8888; -} - -static void -eng_image_native_set(void *data, void *image, void *native) -{ -} - -static void * -eng_image_native_get(void *data, void *image) -{ - return NULL; } static void ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs