summaryrefslogtreecommitdiff
path: root/render/scanconv.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2004-10-13 10:50:39 +0200
committerTor Andersson <tor@ghostscript.com>2004-10-13 10:50:39 +0200
commit5e5ff796c9d1b4c4e4360e6823ec338845d26937 (patch)
treee1e8969c076339a3dcf73e92316ee89736531cf4 /render/scanconv.c
parent990c5d830eeb4ee2677eecf30fdd6f623bb37c61 (diff)
downloadmupdf-5e5ff796c9d1b4c4e4360e6823ec338845d26937.tar.xz
basic rendering
Diffstat (limited to 'render/scanconv.c')
-rw-r--r--render/scanconv.c49
1 files changed, 7 insertions, 42 deletions
diff --git a/render/scanconv.c b/render/scanconv.c
index b2d32363..662c5c62 100644
--- a/render/scanconv.c
+++ b/render/scanconv.c
@@ -65,44 +65,19 @@ evenodd(fz_ael *ael, short *list, int xofs, int hs)
}
}
-/* XXX */
-
-unsigned char pixmap[1000 * 1000];
-
-void
-fz_emitdeltas(short *list, int y, int x, int n)
-{
- short a = 0;
- short d = 0;
- while (n--) {
- d = *list++;
- a += d;
- pixmap[y * 1000 + x] = 0xff - a;
- x ++;
- }
-}
-
-void
-savestuff(void)
-{
- FILE *f = fopen("out.pgm", "w");
- fprintf(f, "P5\n1000 1000\n255\n");
- fwrite(pixmap, 1, 1000 * 1000, f);
- fclose(f);
-}
-
-/* XXX */
-
+/*
void
-fz_emitdeltas0(short *list, int y, int xofs, int n)
+fz_emitdeltas(short *list, int y, int xofs, int n)
{
int d = 0;
while (n--)
d += *list++;
}
+*/
fz_error *
-fz_scanconvert(fz_gel *gel, fz_ael *ael, int eofill)
+fz_scanconvert(fz_gel *gel, fz_ael *ael, int eofill,
+ void (*blitfunc)(int,int,int,short*,void*), void *blitdata)
{
fz_error *error;
short *deltas;
@@ -121,11 +96,6 @@ fz_scanconvert(fz_gel *gel, fz_ael *ael, int eofill)
if (gel->len == 0)
return nil;
-memset(pixmap, 0xff, sizeof pixmap);
-
-printf("bbox [%d %d %d %d] samp %d/%d edges %d\n",
- xmin, ymin, xmax, ymax, hs, vs, gel->len);
-
deltas = fz_malloc(sizeof(short) * (xmax - xmin));
if (!deltas)
return fz_outofmem;
@@ -140,7 +110,7 @@ printf("bbox [%d %d %d %d] samp %d/%d edges %d\n",
{
yc = fz_idiv(y, vs);
if (yc != yd) {
- fz_emitdeltas(deltas, yd, xmin, xmax - xmin);
+ blitfunc(yd, xmin, xmax - xmin, deltas, blitdata);
memset(deltas, 0, sizeof(short) * (xmax - xmin));
}
yd = yc;
@@ -151,9 +121,6 @@ printf("bbox [%d %d %d %d] samp %d/%d edges %d\n",
return error;
}
-// { int i; for (i = 0; i < ael->len; i++)
-// pixmap[yd * 1000 + (ael->edges[i]->x / hs)] = 0; }
-
if (eofill)
evenodd(ael, deltas, xofs, hs);
else
@@ -167,9 +134,7 @@ printf("bbox [%d %d %d %d] samp %d/%d edges %d\n",
y = gel->edges[e].y;
}
- fz_emitdeltas(deltas, yd, xmin, xmax - xmin);
-
- savestuff();
+ blitfunc(yd, xmin, xmax - xmin, deltas, blitdata);
return nil;
}