diff dmlinefunc.h @ 133:92cc5e1fa180

Some work on line drawing routines.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 05 Oct 2012 00:36:40 +0300
parents 997e26f17946
children c2bf01e180a3
line wrap: on
line diff
--- a/dmlinefunc.h	Thu Oct 04 15:43:10 2012 +0300
+++ b/dmlinefunc.h	Fri Oct 05 00:36:40 2012 +0300
@@ -1,10 +1,9 @@
-
-#define DM_DRAWLINE_INNER pix[y0 + x0] = col;
-
 
 #define DM_DRAWLINE_NAME dmDrawLine8
 #define DM_DRAWLINE_DST_BYTES 1
 #define DM_DRAWLINE_DST_TYPE Uint8
+#define DM_DRAWLINE_INNER pix[y0 + x0] = col;
+#define DM_DRAWLINE_INNER pix[y0 + x0] = col;
 #include "dmdrawline.h"
 
 
@@ -14,34 +13,47 @@
 #include "dmdrawline.h"
 
 
-/*
-#undef DM_DRAWLINE_INNER
+#define DM_DRAWLINE_NAME dmDrawLine8Transparent
+#define DM_DRAWLINE_DST_BYTES 1
+#define DM_DRAWLINE_DST_TYPE Uint8
 #define DM_DRAWLINE_INNER \
-  int q = pix[y0 + x0] + col;
-  pix[y0 + x0] = q > 
+  pix[y0 + x0] = ((int)pix[y0 + x0] + col) >> 1;
+#include "dmdrawline.h"
 
 
-#define DM_DRAWLINE_NAME dmDrawLineAdd8
-#define DM_DRAWLINE_DST_BYTES 1
-#define DM_DRAWLINE_DST_TYPE Uint8
+#define DM_DRAWLINE_NAME dmDrawLine32Transparent
+#define DM_DRAWLINE_DST_BYTES 4
+#define DM_DRAWLINE_DST_TYPE DMRGBA32
+#define DM_DRAWLINE_INIT const DMRGBA32 *c = (DMRGBA32*) &col;
+#define DM_DRAWLINE_INNER \
+  const DMRGBA32 q = pix[y0 + x0]; \
+  const int qr = (q.r + c->r) >> 1, qg = (q.g + c->g) >> 1, qb = (q.b + c->b) >> 1;  \
+  pix[y0 + x0].r = qr; \
+  pix[y0 + x0].g = qg; \
+  pix[y0 + x0].b = qb;
 #include "dmdrawline.h"
 
 
-#define DM_DRAWLINE_NAME dmDrawLineAdd15
-#define DM_DRAWLINE_DST_BYTES 2
-#define DM_DRAWLINE_DST_TYPE Uint16
+
+
+#define DM_DRAWLINE_NAME dmDrawLine8Saturate
+#define DM_DRAWLINE_DST_BYTES 1
+#define DM_DRAWLINE_DST_TYPE Uint8
+#define DM_DRAWLINE_INNER \
+  const int q = pix[y0 + x0] + col; \
+  pix[y0 + x0] = q < 255 ? q : 255;
 #include "dmdrawline.h"
 
 
-#define DM_DRAWLINE_NAME dmDrawLineAdd16
-#define DM_DRAWLINE_DST_BYTES 2
-#define DM_DRAWLINE_DST_TYPE Uint16
+#define DM_DRAWLINE_NAME dmDrawLine32Saturate
+#define DM_DRAWLINE_DST_BYTES 4
+#define DM_DRAWLINE_DST_TYPE DMRGBA32
+#define DM_DRAWLINE_INIT const DMRGBA32 *c = (DMRGBA32*) &col;
+#define DM_DRAWLINE_INNER \
+  const DMRGBA32 q = pix[y0 + x0]; \
+  const int qr = q.r + c->r, qg = q.g + c->g, qb = q.b + c->b;  \
+  pix[y0 + x0].r = qr < 255 ? qr : 255; \
+  pix[y0 + x0].g = qg < 255 ? qg : 255; \
+  pix[y0 + x0].b = qb < 255 ? qb : 255;
 #include "dmdrawline.h"
 
-
-#define DM_DRAWLINE_NAME dmDrawLineAdd32
-#define DM_DRAWLINE_DST_BYTES 4
-#define DM_DRAWLINE_DST_TYPE Uint32
-#include "dmdrawline.h"
-*/
-