Enlightenment CVS committal Author : turran Project : e17 Module : proto/enesim
Dir : e17/proto/enesim/src/lib/raster/rasterizer Modified Files: rasterizer.c Makefile.am cpsc.c rasterizer.h Added Files: kiia.c Log Message: - Refactor the rasterizers - Initial code for Kiia's aa polygon rasterizer (doesnt generate anything yet) - Stub file for mask based "scanlines" (got to find a better word for this) - Add a helper to keep track of min and max values =================================================================== RCS file: /cvs/e/e17/proto/enesim/src/lib/raster/rasterizer/rasterizer.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- rasterizer.c 12 Oct 2007 11:04:52 -0000 1.1 +++ rasterizer.c 13 Nov 2007 00:23:45 -0000 1.2 @@ -5,37 +5,37 @@ #include "rasterizer.h" #include "scanline.h" -/** - * TODO - * add a function/struct element to set up window boundaries i.e - * destination surface/clip - * add a function/struct element to set up the odd/even/zero fill rule - */ - /*============================================================================* - * API * + * Global * *============================================================================*/ - /** * To be documented * FIXME: To be fixed */ -EAPI Enesim_Rasterizer * enesim_rasterizer_new(void) +Enesim_Rasterizer * enesim_rasterizer_new(void *data, Enesim_Rasterizer_Func *funcs, + Enesim_Rectangle boundaries) { Enesim_Rasterizer *r; r = calloc(1, sizeof(Enesim_Rasterizer)); - r->funcs = &cpsc; - r->data = cpsc.create(); + r->funcs = funcs; + r->data = data; + r->boundaries = boundaries; return r; } - +/*============================================================================* + * API * + *============================================================================*/ /** * To be documented * FIXME: To be fixed */ EAPI void enesim_rasterizer_vertex_add(Enesim_Rasterizer *r, float x, float y) { + assert(r); + assert(r->funcs); + assert(r->funcs->vertex_add); + r->funcs->vertex_add(r->data, x, y); } @@ -45,6 +45,10 @@ */ EAPI void enesim_rasterizer_generate(Enesim_Rasterizer *r, Enesim_Scanline *s) { + assert(r); + assert(r->funcs); + assert(r->funcs->generate); + r->funcs->generate(r->data, s); } @@ -52,10 +56,12 @@ * To be documented * FIXME: To be fixed */ -EAPI void enesim_rasterizer_boundings_set(Enesim_Rasterizer *r, int x, int y, int w, int h) +EAPI void enesim_rasterizer_delete(Enesim_Rasterizer *r) { - r->bound.x = x; - r->bound.y = y; - r->bound.w = w; - r->bound.h = h; -} + assert(r); + assert(r->funcs); + assert(r->funcs->delete); + + r->funcs->delete(r->data); + free(r); +} \ No newline at end of file =================================================================== RCS file: /cvs/e/e17/proto/enesim/src/lib/raster/rasterizer/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 19 Oct 2007 15:30:07 -0000 1.3 +++ Makefile.am 13 Nov 2007 00:23:45 -0000 1.4 @@ -3,6 +3,7 @@ INCLUDES = -I. \ -I$(top_srcdir)/src/lib/ \ +-I$(top_srcdir)/src/lib/util \ -I$(top_srcdir)/src/lib/raster \ -I$(top_srcdir)/src/lib/raster/scanline \ @EDATA_CFLAGS@ @@ -11,10 +12,11 @@ libenesim_rasterizer_la_SOURCES = \ rasterizer.c \ -cpsc.c +cpsc.c \ +kiia.c libenesim_rasterizer_la_LIBADD = libenesim_rasterizer_la_DEPENDENCIES = -libenesim_rasterizer_la_LDFLAGS = -version-info 1:0:0 +libenesim_rasterizer_la_LDFLAGS = =================================================================== RCS file: /cvs/e/e17/proto/enesim/src/lib/raster/rasterizer/cpsc.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- cpsc.c 14 Oct 2007 17:49:28 -0000 1.2 +++ cpsc.c 13 Nov 2007 00:23:45 -0000 1.3 @@ -35,6 +35,7 @@ typedef struct _Cpsc { Edata_Array *a; + Enesim_Rasterizer *r; Cpsc_Vertex *vertices; int num_vertices; } Cpsc; @@ -117,16 +118,6 @@ return 1; } -static void * _create(void) -{ - Cpsc *c; - - c = calloc(1, sizeof(Cpsc)); - c->a = edata_array_new(c, EDATA_ARRAY_ALLOC(_a_alloc), - EDATA_ARRAY_FREE(_a_free)); - return c; -} - static void _vertex_add(Cpsc *r, float x, float y) { int n = r->num_vertices; @@ -170,7 +161,7 @@ } free(vertices); vertices = r->vertices; - /* get the min and max y from the polygon and thw display size */ + /* get the min and max y from the polygon and the display size */ y0 = ceil(vertices[sindex[0]].y - 0.5); y1 = floor(vertices[sindex[n - 1]].y - 0.5); @@ -229,11 +220,33 @@ free(sindex); } +static void _delete(Cpsc *c) +{ + free(c); +} + +static Enesim_Rasterizer_Func cpsc_func = { + .vertex_add = ENESIM_RASTERIZER_VERTEX_ADD(_vertex_add), + .generate = ENESIM_RASTERIZER_GENERATE(_generate), + .delete = ENESIM_RASTERIZER_DELETE(_delete) +}; + /*============================================================================* - * Global * + * API * *============================================================================*/ -Enesim_Rasterizer_Func cpsc = { - .create = _create, - .vertex_add = _vertex_add, - .generate = _generate -}; +/** + * To be documented + * FIXME: To be fixed + */ +EAPI Enesim_Rasterizer * enesim_rasterizer_cpsc_new(Enesim_Rectangle boundaries) +{ + Enesim_Rasterizer *r; + Cpsc *c; + + c = calloc(1, sizeof(Cpsc)); + c->a = edata_array_new(c, EDATA_ARRAY_ALLOC(_a_alloc), + EDATA_ARRAY_FREE(_a_free)); + r = enesim_rasterizer_new(c, &cpsc_func, boundaries); + c->r = r; + return r; +} =================================================================== RCS file: /cvs/e/e17/proto/enesim/src/lib/raster/rasterizer/rasterizer.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- rasterizer.h 12 Oct 2007 11:04:52 -0000 1.1 +++ rasterizer.h 13 Nov 2007 00:23:45 -0000 1.2 @@ -4,25 +4,37 @@ /** * @todo * - on vertex add, calculate the bounding box + * - make each rasterizer to export what kind of scanlines it supports + * - add a function/struct element to set up window boundaries i.e + * destination surface/clip + * - add a function/struct element to set up the odd/even/zero fill rule + * - im not sure about using a rectangle for the boundaries, maybe only + * width and height? */ - +typedef void (*Enesim_Rasterizer_Vertex_Add)(void *r, float x, float y); +typedef void (*Enesim_Rasterizer_Generate)(void *r, Enesim_Scanline *sl); +typedef void (*Enesim_Rasterizer_Delete)(void *r); typedef struct _Enesim_Rasterizer_Func { - void *(*create)(void); - void (*vertex_add)(void *r, float x, float y); - void (*generate)(void *r, Enesim_Scanline *sl); + Enesim_Rasterizer_Vertex_Add vertex_add; + Enesim_Rasterizer_Generate generate; + Enesim_Rasterizer_Delete delete; /* TODO free */ } Enesim_Rasterizer_Func; -extern Enesim_Rasterizer_Func cpsc; -extern Enesim_Rasterizer_Func faap; +#define ENESIM_RASTERIZER_VERTEX_ADD(func) ((Enesim_Rasterizer_Vertex_Add)func) +#define ENESIM_RASTERIZER_GENERATE(func) ((Enesim_Rasterizer_Generate)func) +#define ENESIM_RASTERIZER_DELETE(func) ((Enesim_Rasterizer_Delete)func) struct _Enesim_Rasterizer { - Enesim_Rectangle bound; + Enesim_Rectangle boundaries; Enesim_Rasterizer_Func *funcs; void *data; }; + +Enesim_Rasterizer * enesim_rasterizer_new(void *data, Enesim_Rasterizer_Func *func, + Enesim_Rectangle boundaries); #endif ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs