Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/evas
Dir : e17/libs/evas/src/modules/engines/gl_common
Modified Files:
evas_gl_common.h evas_gl_gradient.c evas_gl_image.c
evas_gl_texture.c
Log Message:
cedric's cache changes patch
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_common.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- evas_gl_common.h 25 Dec 2007 11:12:39 -0000 1.16
+++ evas_gl_common.h 12 Apr 2008 00:32:26 -0000 1.17
@@ -21,7 +21,7 @@
#include <unistd.h>
#ifdef BUILD_ENGINE_GL_GLEW
-# include <GL/glew.h>
+#include <GL/glew.h>
#endif /* BUILD_ENGINE_GL_GLEW */
#include <GL/gl.h>
@@ -196,8 +196,8 @@
void evas_gl_common_ycbcr601pl_texture_update(Evas_GL_Texture
*tex, unsigned char **rows, int w, int h, int smooth);
Evas_GL_Image *evas_gl_common_image_load(Evas_GL_Context *gc, const char
*file, const char *key, Evas_Image_Load_Opts *lo);
-Evas_GL_Image *evas_gl_common_image_new_from_data(Evas_GL_Context *gc, int
w, int h, int *data, int alpha, int cspace);
-Evas_GL_Image *evas_gl_common_image_new_from_copied_data(Evas_GL_Context
*gc, int w, int h, int *data, int alpha, int cspace);
+Evas_GL_Image *evas_gl_common_image_new_from_data(Evas_GL_Context *gc, int
w, int h, DATA32 *data, int alpha, int cspace);
+Evas_GL_Image *evas_gl_common_image_new_from_copied_data(Evas_GL_Context
*gc, int w, int h, DATA32 *data, int alpha, int cspace);
Evas_GL_Image *evas_gl_common_image_new(Evas_GL_Context *gc, int w, int h,
int alpha, int cspace);
void evas_gl_common_image_free(Evas_GL_Image *im);
void evas_gl_common_image_dirty(Evas_GL_Image *im);
===================================================================
RCS file:
/cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_gradient.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- evas_gl_gradient.c 4 Aug 2007 12:33:12 -0000 1.7
+++ evas_gl_gradient.c 12 Apr 2008 00:32:26 -0000 1.8
@@ -1,7 +1,5 @@
#include "evas_gl_private.h"
-static void _evas_gl_common_gradient_texture_build(Evas_GL_Context *gc,
Evas_GL_Gradient *gr);
-
Evas_GL_Gradient *
evas_gl_common_gradient_new(void)
{
@@ -211,9 +209,10 @@
{
RGBA_Image *im;
int op = dc->render_op, cuse = dc->clip.use;
-
- im = evas_common_image_create(w, h);
- if (!im) return;
+
+ im = (RGBA_Image *)
evas_cache_image_empty(evas_common_image_cache_get());
+ if (!im) return;
+ im = (RGBA_Image *) evas_cache_image_size_set(&im->cache_entry, w, h);
dc->render_op = _EVAS_RENDER_FILL;
dc->clip.use = 0;
evas_common_gradient_draw(im, dc, 0, 0, w, h, gr->grad);
@@ -221,8 +220,9 @@
gr->tex = evas_gl_common_texture_new(gc, im, 0);
else
evas_gl_common_texture_update(gr->tex, im, 0);
-
- evas_common_image_delete(im);
+
+ evas_cache_image_drop(&im->cache_entry);
+
dc->render_op = op;
dc->clip.use = cuse;
if (!gr->tex) return;
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_image.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- evas_gl_image.c 25 Dec 2007 11:12:39 -0000 1.10
+++ evas_gl_image.c 12 Apr 2008 00:32:26 -0000 1.11
@@ -3,9 +3,9 @@
Evas_GL_Image *
evas_gl_common_image_load(Evas_GL_Context *gc, const char *file, const char
*key, Evas_Image_Load_Opts *lo)
{
- Evas_GL_Image *im;
- RGBA_Image *im_im;
- Evas_List *l;
+ Evas_GL_Image *im;
+ RGBA_Image *im_im;
+ Evas_List *l;
im_im = evas_common_load_image_from_file(file, key, lo);
if (!im_im) return NULL;
@@ -15,7 +15,7 @@
im = l->data;
if (im->im == im_im)
{
- evas_cache_image_drop(im_im);
+ evas_cache_image_drop(&im_im->cache_entry);
gc->images = evas_list_remove_list(gc->images, l);
gc->images = evas_list_prepend(gc->images, im);
im->references++;
@@ -42,7 +42,7 @@
}
Evas_GL_Image *
-evas_gl_common_image_new_from_data(Evas_GL_Context *gc, int w, int h, int
*data, int alpha, int cspace)
+evas_gl_common_image_new_from_data(Evas_GL_Context *gc, int w, int h, DATA32
*data, int alpha, int cspace)
{
Evas_GL_Image *im;
Evas_List *l;
@@ -50,9 +50,9 @@
for (l = gc->images; l; l = l->next)
{
im = l->data;
- if (((void *)(im->im->image->data) == (void *)data) &&
- (im->im->image->w == w) &&
- (im->im->image->h == h))
+ if (((void *)(im->im->image.data) == (void *)data) &&
+ (im->im->cache_entry.w == w) &&
+ (im->im->cache_entry.h == h))
{
gc->images = evas_list_remove_list(gc->images, l);
gc->images = evas_list_prepend(gc->images, im);
@@ -63,25 +63,18 @@
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
- im->im = evas_cache_image_empty(evas_common_image_cache_get());
+ im->im = (RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
+ w, h, data, alpha, cspace);
if (!im->im)
{
free(im);
return NULL;
}
im->gc = gc;
- im->im->image->w = w;
- im->im->image->h = h;
im->cs.space = cspace;
- if (alpha)
- im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
- else
- im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
switch (cspace)
{
case EVAS_COLORSPACE_ARGB8888:
- im->im->image->data = data;
- im->im->image->no_free = 1;
break;
case EVAS_COLORSPACE_YCBCR422P601_PL:
case EVAS_COLORSPACE_YCBCR422P709_PL:
@@ -103,42 +96,34 @@
}
Evas_GL_Image *
-evas_gl_common_image_new_from_copied_data(Evas_GL_Context *gc, int w, int h,
int *data, int alpha, int cspace)
+evas_gl_common_image_new_from_copied_data(Evas_GL_Context *gc, int w, int h,
DATA32 *data, int alpha, int cspace)
{
Evas_GL_Image *im;
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
- im->im = evas_cache_image_empty(evas_common_image_cache_get());
+ im->im = (RGBA_Image *)
evas_cache_image_copied_data(evas_common_image_cache_get(),
+ w, h, data, alpha,
cspace);
if (!im->im)
{
free(im);
return NULL;
}
- im->im->image->w = w;
- im->im->image->h = h;
im->gc = gc;
im->cs.space = cspace;
- if (alpha)
- im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
- else
- im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
switch (cspace)
{
case EVAS_COLORSPACE_ARGB8888:
- evas_common_image_surface_alloc(im->im->image);
- if (data)
- memcpy(im->im->image->data, data, w * h * sizeof(DATA32));
break;
case EVAS_COLORSPACE_YCBCR422P601_PL:
case EVAS_COLORSPACE_YCBCR422P709_PL:
if (im->tex) evas_gl_common_texture_free(im->tex);
im->tex = NULL;
im->cs.no_free = 0;
- im->cs.data = calloc(1, im->im->image->h * sizeof(unsigned char *) *
2);
+ im->cs.data = calloc(1, im->im->cache_entry.h * sizeof(unsigned char
*) * 2);
if ((data) && (im->cs.data))
- memcpy(im->cs.data, data, im->im->image->h * sizeof(unsigned char *)
* 2);
+ memcpy(im->cs.data, data, im->im->cache_entry.h * sizeof(unsigned
char *) * 2);
break;
default:
abort();
@@ -155,37 +140,30 @@
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
- im->im = evas_cache_image_empty(evas_common_image_cache_get());
+ im->im = (RGBA_Image *)
evas_cache_image_empty(evas_common_image_cache_get());
if (!im->im)
{
free(im);
return NULL;
}
- im->im->image->w = w;
- im->im->image->h = h;
im->gc = gc;
im->cs.space = cspace;
if (alpha)
im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
else
im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+ evas_cache_image_colorspace(&im->im->cache_entry, cspace);
+ im->im = (RGBA_Image *) evas_cache_image_size_set(&im->im->cache_entry, w,
h);
switch (cspace)
{
case EVAS_COLORSPACE_ARGB8888:
- evas_common_image_surface_alloc(im->im->image);
-// if (data)
-// memcpy(im->im->image->data, data, w * h * sizeof(DATA32));
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;
im->cs.no_free = 0;
- im->cs.data = calloc(1, im->im->image->h * sizeof(unsigned char *) *
2);
-// if ((data) && (im->cs.data))
-// memcpy(im->cs.data, data, im->im->image->h * sizeof(unsigned char *)
* 2);
+ im->cs.data = calloc(1, im->im->cache_entry.h * sizeof(unsigned char
*) * 2);
break;
default:
abort();
@@ -205,7 +183,7 @@
if (!im->cs.no_free) free(im->cs.data);
}
if (im->cached) im->gc->images = evas_list_remove(im->gc->images, im);
- if (im->im) evas_cache_image_drop(im->im);
+ if (im->im) evas_cache_image_drop(&im->im->cache_entry);
if (im->tex) evas_gl_common_texture_free(im->tex);
free(im);
}
@@ -213,7 +191,7 @@
void
evas_gl_common_image_dirty(Evas_GL_Image *im)
{
- im->im = evas_cache_image_dirty(im->im, 0, 0, im->im->image->w,
im->im->image->h);
+ im->im = (RGBA_Image *) evas_cache_image_dirty(&im->im->cache_entry, 0, 0,
im->im->cache_entry.w, im->im->cache_entry.h);
im->dirty = 1;
}
@@ -246,14 +224,14 @@
{
if ((im->cs.data) && (*((unsigned char **)im->cs.data)))
{
- if (im->dirty || !im->im->image->data)
+ if (im->dirty || !im->im->image.data)
{
- free(im->im->image->data);
- im->im->image->data = malloc(im->im->image->w *
im->im->image->h * sizeof(DATA32));
- if (im->im->image->data)
+ free(im->im->image.data);
+ im->im->image.data = malloc(im->im->cache_entry.w *
im->im->cache_entry.h * sizeof(DATA32));
+ if (im->im->image.data)
evas_common_convert_yuv_420p_601_rgba(im->cs.data,
- (void
*)im->im->image->data,
- im->im->image->w,
im->im->image->h);
+ (void
*)im->im->image.data,
+
im->im->cache_entry.w, im->im->cache_entry.h);
}
}
space = EVAS_COLORSPACE_ARGB8888;
@@ -265,7 +243,7 @@
switch (space)
{
case EVAS_COLORSPACE_ARGB8888:
- evas_cache_image_load_data(im->im);
+ evas_cache_image_load_data(&im->im->cache_entry);
if ((im->tex) && (im->dirty))
{
evas_gl_common_texture_update(im->tex, im->im, im->tex->smooth);
@@ -295,12 +273,12 @@
case EVAS_COLORSPACE_YCBCR422P709_PL:
if ((im->tex) && (im->dirty))
{
- evas_gl_common_ycbcr601pl_texture_update(im->tex, im->cs.data,
im->im->image->w, im->im->image->h, smooth);
+ evas_gl_common_ycbcr601pl_texture_update(im->tex, im->cs.data,
im->im->cache_entry.w, im->im->cache_entry.h, smooth);
im->dirty = 0;
}
if ((!im->tex) && (im->cs.data) && (*((unsigned char **)im->cs.data)))
{
- im->tex = evas_gl_common_ycbcr601pl_texture_new(gc, im->cs.data,
im->im->image->w, im->im->image->h, smooth);
+ im->tex = evas_gl_common_ycbcr601pl_texture_new(gc, im->cs.data,
im->im->cache_entry.w, im->im->cache_entry.h, smooth);
}
if (!im->tex) return;
ow = (dw * im->tex->tw) / sw;
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_texture.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- evas_gl_texture.c 4 Aug 2007 09:54:35 -0000 1.11
+++ evas_gl_texture.c 12 Apr 2008 00:32:26 -0000 1.12
@@ -4,7 +4,7 @@
evas_gl_common_texture_new(Evas_GL_Context *gc, RGBA_Image *im, int smooth)
{
Evas_GL_Texture *tex;
- int *im_data;
+ DATA32 *im_data;
int im_w, im_h;
int tw, th;
int shift;
@@ -13,16 +13,16 @@
tex = calloc(1, sizeof(Evas_GL_Texture));
if (!tex) return NULL;
- if ((gc->ext.nv_texture_rectangle) &&
- (!(gc->ext.arb_texture_non_power_of_two &&
+ if ((gc->ext.nv_texture_rectangle) &&
+ (!(gc->ext.arb_texture_non_power_of_two &&
gc->ext.sgis_generate_mipmap)))
{
tex->gc = gc;
- tex->w = im->image->w;
- tex->h = im->image->h;
+ tex->w = im->cache_entry.w;
+ tex->h = im->cache_entry.h;
tex->rectangle = 1;
- tex->tw = im->image->w;
- tex->th = im->image->h;
+ tex->tw = im->cache_entry.w;
+ tex->th = im->cache_entry.h;
tex->references = 0;
tex->smooth = smooth;
tex->changed = 1;
@@ -53,25 +53,25 @@
glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0,
texfmt, tex->w, tex->h, 0,
- pixfmt, NATIVE_PIX_UNIT, im->image->data);
+ pixfmt, NATIVE_PIX_UNIT, im->image.data);
return tex;
}
if ((gc->ext.arb_texture_non_power_of_two) &&
(gc->ext.sgis_generate_mipmap))
{
- tw = im->image->w;
- th = im->image->h;
+ tw = im->cache_entry.w;
+ th = im->cache_entry.h;
}
else
{
- shift = 1; while (im->image->w > shift) shift = shift << 1; tw = shift;
- shift = 1; while (im->image->h > shift) shift = shift << 1; th = shift;
+ shift = 1; while (im->cache_entry.w > shift) shift = shift << 1; tw =
shift;
+ shift = 1; while (im->cache_entry.h > shift) shift = shift << 1; th =
shift;
}
tex->gc = gc;
tex->w = tw;
tex->h = th;
- tex->tw = im->image->w;
- tex->th = im->image->h;
+ tex->tw = im->cache_entry.w;
+ tex->th = im->cache_entry.h;
tex->references = 0;
tex->smooth = 0;
tex->changed = 1;
@@ -84,15 +84,15 @@
tex->references++;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16);
-
+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- im_data = im->image->data;
- im_w = im->image->w;
- im_h = im->image->h;
+ im_data = im->image.data;
+ im_w = im->cache_entry.w;
+ im_h = im->cache_entry.h;
if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
else texfmt = GL_RGB8;
@@ -152,7 +152,7 @@
void
evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im, int smooth)
{
- int *im_data;
+ DATA32 *im_data;
int im_w, im_h;
int tw, th;
GLenum pixfmt, texfmt, target;
@@ -165,7 +165,7 @@
glEnable(GL_TEXTURE_RECTANGLE_NV);
glBindTexture(GL_TEXTURE_RECTANGLE_NV, tex->texture);
- data = im->image->data;
+ data = im->image.data;
#if 0 // trying the glXAllocateMemoryNV() thing but its abysmally slow
tmp = glXAllocateMemoryNV(tex->w * tex->h * sizeof(DATA32),
0.0, 1.0, 1.0);
@@ -177,7 +177,7 @@
tmp);
// evas_common_copy_pixels_rgba_to_rgba_mmx2(im->image->data, tmp,
// tex->w * tex->h);
- memcpy(tmp, im->image->data,
+ memcpy(tmp, im->image.data,
tex->w * tex->h * sizeof(DATA32));
data = tmp;
}
@@ -245,9 +245,9 @@
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
tex->smooth = 0;
- im_data = im->image->data;
- im_w = im->image->w;
- im_h = im->image->h;
+ im_data = im->image.data;
+ im_w = im->cache_entry.w;
+ im_h = im->cache_entry.h;
if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
else texfmt = GL_RGB8;
@@ -312,7 +312,7 @@
void
evas_gl_common_texture_mipmaps_build(Evas_GL_Texture *tex, RGBA_Image *im, int
smooth)
{
- int *im_data;
+ DATA32 *im_data;
int tw, th;
int im_w, im_h, w, h;
GLenum pixfmt, texfmt;
@@ -329,8 +329,8 @@
#endif
tw = tex->w;
th = tex->h;
- w = im->image->w;
- h = im->image->h;
+ w = im->cache_entry.w;
+ h = im->cache_entry.h;
level = 0;
im1 = im;
@@ -365,30 +365,31 @@
th /= 2;
level++;
- im2 = evas_common_image_create(w, h);
+ im2 = (RGBA_Image *)
evas_cache_image_empty(evas_common_image_cache_get());
+ im2 = (RGBA_Image *) evas_cache_image_size_set(&im2->cache_entry, w,
h);
#ifdef BUILD_MMX
if (mmx)
{
- evas_common_scale_rgba_mipmap_down_2x2_mmx(im1->image->data,
- im2->image->data,
+ evas_common_scale_rgba_mipmap_down_2x2_mmx(im1->image.data,
+ im2->image.data,
pw, ph);
}
else
#endif
{
if (im->flags & RGBA_IMAGE_HAS_ALPHA)
- evas_common_scale_rgba_mipmap_down_2x2_c(im1->image->data,
- im2->image->data,
+ evas_common_scale_rgba_mipmap_down_2x2_c(im1->image.data,
+ im2->image.data,
pw, ph);
else
- evas_common_scale_rgb_mipmap_down_2x2_c(im1->image->data,
- im2->image->data,
+ evas_common_scale_rgb_mipmap_down_2x2_c(im1->image.data,
+ im2->image.data,
pw, ph);
}
- if (im1 != im) evas_cache_image_drop(im1);
+ if (im1 != im) evas_cache_image_drop(&im1->cache_entry);
im1 = NULL;
- im_data = im2->image->data;
+ im_data = im2->image.data;
im_w = w;
im_h = h;
glTexSubImage2D(GL_TEXTURE_2D, level,
@@ -413,7 +414,7 @@
im1 = im2;
im2 = NULL;
}
- if ((im1 != im) && (im1)) evas_common_image_delete(im1);
+ if ((im1 != im) && (im1)) evas_cache_image_drop(&im1->cache_entry);
tex->have_mipmaps = 1;
#ifdef BUILD_MMX
if (mmx) evas_common_cpu_end_opt();
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs