Port renderedge.c to pixman
This commit is contained in:
parent
3ba3ede9bb
commit
2a960c442b
|
@ -36,16 +36,7 @@
|
||||||
_X_EXPORT xFixed
|
_X_EXPORT xFixed
|
||||||
RenderSampleCeilY (xFixed y, int n)
|
RenderSampleCeilY (xFixed y, int n)
|
||||||
{
|
{
|
||||||
xFixed f = xFixedFrac(y);
|
return pixman_sample_ceil_y (y, n);
|
||||||
xFixed i = xFixedFloor(y);
|
|
||||||
|
|
||||||
f = ((f + Y_FRAC_FIRST(n)) / STEP_Y_SMALL(n)) * STEP_Y_SMALL(n) + Y_FRAC_FIRST(n);
|
|
||||||
if (f > Y_FRAC_LAST(n))
|
|
||||||
{
|
|
||||||
f = Y_FRAC_FIRST(n);
|
|
||||||
i += xFixed1;
|
|
||||||
}
|
|
||||||
return (i | f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _div(a,b) ((a) >= 0 ? (a) / (b) : -((-(a) + (b) - 1) / (b)))
|
#define _div(a,b) ((a) >= 0 ? (a) / (b) : -((-(a) + (b) - 1) / (b)))
|
||||||
|
@ -57,16 +48,7 @@ RenderSampleCeilY (xFixed y, int n)
|
||||||
_X_EXPORT xFixed
|
_X_EXPORT xFixed
|
||||||
RenderSampleFloorY (xFixed y, int n)
|
RenderSampleFloorY (xFixed y, int n)
|
||||||
{
|
{
|
||||||
xFixed f = xFixedFrac(y);
|
return pixman_sample_floor_y (y, n);
|
||||||
xFixed i = xFixedFloor (y);
|
|
||||||
|
|
||||||
f = _div(f - Y_FRAC_FIRST(n), STEP_Y_SMALL(n)) * STEP_Y_SMALL(n) + Y_FRAC_FIRST(n);
|
|
||||||
if (f < Y_FRAC_FIRST(n))
|
|
||||||
{
|
|
||||||
f = Y_FRAC_LAST(n);
|
|
||||||
i -= xFixed1;
|
|
||||||
}
|
|
||||||
return (i | f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -75,52 +57,7 @@ RenderSampleFloorY (xFixed y, int n)
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
RenderEdgeStep (RenderEdge *e, int n)
|
RenderEdgeStep (RenderEdge *e, int n)
|
||||||
{
|
{
|
||||||
xFixed_48_16 ne;
|
pixman_edge_step (e, n);
|
||||||
|
|
||||||
e->x += n * e->stepx;
|
|
||||||
|
|
||||||
ne = e->e + n * (xFixed_48_16) e->dx;
|
|
||||||
|
|
||||||
if (n >= 0)
|
|
||||||
{
|
|
||||||
if (ne > 0)
|
|
||||||
{
|
|
||||||
int nx = (ne + e->dy - 1) / e->dy;
|
|
||||||
e->e = ne - nx * (xFixed_48_16) e->dy;
|
|
||||||
e->x += nx * e->signdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (ne <= -e->dy)
|
|
||||||
{
|
|
||||||
int nx = (-ne) / e->dy;
|
|
||||||
e->e = ne + nx * (xFixed_48_16) e->dy;
|
|
||||||
e->x -= nx * e->signdx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A private routine to initialize the multi-step
|
|
||||||
* elements of an edge structure
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
_RenderEdgeMultiInit (RenderEdge *e, int n, xFixed *stepx_p, xFixed *dx_p)
|
|
||||||
{
|
|
||||||
xFixed stepx;
|
|
||||||
xFixed_48_16 ne;
|
|
||||||
|
|
||||||
ne = n * (xFixed_48_16) e->dx;
|
|
||||||
stepx = n * e->stepx;
|
|
||||||
if (ne > 0)
|
|
||||||
{
|
|
||||||
int nx = ne / e->dy;
|
|
||||||
ne -= nx * e->dy;
|
|
||||||
stepx += nx * e->signdx;
|
|
||||||
}
|
|
||||||
*dx_p = ne;
|
|
||||||
*stepx_p = stepx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -136,35 +73,7 @@ RenderEdgeInit (RenderEdge *e,
|
||||||
xFixed x_bot,
|
xFixed x_bot,
|
||||||
xFixed y_bot)
|
xFixed y_bot)
|
||||||
{
|
{
|
||||||
xFixed dx, dy;
|
pixman_edge_init (e, n, y_start, x_top, y_top, x_bot, y_bot);
|
||||||
|
|
||||||
e->x = x_top;
|
|
||||||
e->e = 0;
|
|
||||||
dx = x_bot - x_top;
|
|
||||||
dy = y_bot - y_top;
|
|
||||||
e->dy = dy;
|
|
||||||
e->dx = 0;
|
|
||||||
if (dy)
|
|
||||||
{
|
|
||||||
if (dx >= 0)
|
|
||||||
{
|
|
||||||
e->signdx = 1;
|
|
||||||
e->stepx = dx / dy;
|
|
||||||
e->dx = dx % dy;
|
|
||||||
e->e = -dy;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
e->signdx = -1;
|
|
||||||
e->stepx = -(-dx / dy);
|
|
||||||
e->dx = -dx % dy;
|
|
||||||
e->e = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_RenderEdgeMultiInit (e, STEP_Y_SMALL(n), &e->stepx_small, &e->dx_small);
|
|
||||||
_RenderEdgeMultiInit (e, STEP_Y_BIG(n), &e->stepx_big, &e->dx_big);
|
|
||||||
}
|
|
||||||
RenderEdgeStep (e, y_start - y_top);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -179,24 +88,6 @@ RenderLineFixedEdgeInit (RenderEdge *e,
|
||||||
int x_off,
|
int x_off,
|
||||||
int y_off)
|
int y_off)
|
||||||
{
|
{
|
||||||
xFixed x_off_fixed = IntToxFixed(x_off);
|
pixman_line_fixed_edge_init (e, n, y, (pixman_line_fixed_t *)line, x_off, y_off);
|
||||||
xFixed y_off_fixed = IntToxFixed(y_off);
|
|
||||||
xPointFixed *top, *bot;
|
|
||||||
|
|
||||||
if (line->p1.y <= line->p2.y)
|
|
||||||
{
|
|
||||||
top = &line->p1;
|
|
||||||
bot = &line->p2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
top = &line->p2;
|
|
||||||
bot = &line->p1;
|
|
||||||
}
|
|
||||||
RenderEdgeInit (e, n, y,
|
|
||||||
top->x + x_off_fixed,
|
|
||||||
top->y + y_off_fixed,
|
|
||||||
bot->x + x_off_fixed,
|
|
||||||
bot->y + y_off_fixed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,20 +50,7 @@
|
||||||
* and can be quickly stepped across small or large gaps in the
|
* and can be quickly stepped across small or large gaps in the
|
||||||
* sample grid
|
* sample grid
|
||||||
*/
|
*/
|
||||||
|
typedef pixman_edge_t RenderEdge;
|
||||||
typedef struct {
|
|
||||||
xFixed x;
|
|
||||||
xFixed e;
|
|
||||||
xFixed stepx;
|
|
||||||
xFixed signdx;
|
|
||||||
xFixed dy;
|
|
||||||
xFixed dx;
|
|
||||||
|
|
||||||
xFixed stepx_small;
|
|
||||||
xFixed stepx_big;
|
|
||||||
xFixed dx_small;
|
|
||||||
xFixed dx_big;
|
|
||||||
} RenderEdge;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Step across a small sample grid gap
|
* Step across a small sample grid gap
|
||||||
|
|
Loading…
Reference in New Issue