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

Reply via email to