Mercurial > hg > dmlib
view dmdrawline.h @ 2:9a8355b47e1c
Various improvements in the build system to add granularity
for building different parts of the engine and tools.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 28 Sep 2012 02:20:31 +0300 |
parents | 32250b436bca |
children | 997e26f17946 |
line wrap: on
line source
#ifdef DM_USE_SIMD static int DM_DRAWLINE_NAME_ASM (SDL_Surface *screen, int x0, int y0, int x1, int y1, const Uint32 col); #endif #ifdef DM_USE_C static int DM_DRAWLINE_NAME_C (SDL_Surface *screen, int x0, int y0, int x1, int y1, const Uint32 col) { int dx, dy, xstep, ystep; const int qpitch = screen->pitch / DM_DRAWLINE_DST_BYTES; // Clipping if (dmClipLineCoords(&x0, &y0, &x1, &y1, screen)) return -1; // Compute initial deltas dx = (x1 - x0) * 2; dy = (y1 - y0) * 2; if (dx < 0) { dx = -dx; xstep = -1; } else xstep = 1; if (dy < 0) { dy = -dy; ystep = -qpitch; } else ystep = qpitch; // Compute offsets y0 *= qpitch; y1 *= qpitch; DM_DRAWLINE_DST_TYPE *pix = screen->pixels; // Continue based on which delta is larger if (dx > dy) { int afrac = dy - (dx / 2); while (x0 != x1) { if (afrac >= 0) { y0 += ystep; afrac -= dx; } x0 += xstep; afrac += dy; DM_DRAWLINE_INNER } } else { int afrac = dx - (dy / 2); while (y0 != y1) { if (afrac >= 0) { x0 += xstep; afrac -= dy; } y0 += ystep; afrac += dx; DM_DRAWLINE_INNER } } return 0; } #endif #undef DM_DRAWLINE_NAME #undef DM_DRAWLINE_NAME_ASM #undef DM_DRAWLINE_NAME_C #undef DM_DRAWLINE_DST_BYTES #undef DM_DRAWLINE_DST_TYPE