view dmdrawline.h @ 96:6bf5220fa47e

Urgh .. use memset to silence some bogus GCC warnings about using potentially uninitialized values, while that will not actually be possible. In any case, it is annoying.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 02 Oct 2012 18:52:28 +0300
parents 997e26f17946
children 92cc5e1fa180
line wrap: on
line source


static int DM_DRAWLINE_NAME (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;
}

#undef DM_DRAWLINE_NAME
#undef DM_DRAWLINE_DST_BYTES
#undef DM_DRAWLINE_DST_TYPE