summaryrefslogtreecommitdiff
path: root/source/fitz/draw-mesh.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/draw-mesh.c')
-rw-r--r--source/fitz/draw-mesh.c58
1 files changed, 28 insertions, 30 deletions
diff --git a/source/fitz/draw-mesh.c b/source/fitz/draw-mesh.c
index c0ad45d2..26d496d2 100644
--- a/source/fitz/draw-mesh.c
+++ b/source/fitz/draw-mesh.c
@@ -93,7 +93,7 @@ static inline void step_edge(edge_data *edge, int n)
}
static void
-fz_paint_triangle(fz_pixmap *pix, float v[3][MAXN], int n, const fz_irect *bbox)
+fz_paint_triangle(fz_pixmap *pix, float *v[3], int n, const fz_irect *bbox)
{
edge_data e0, e1;
int top, mid, bot;
@@ -161,44 +161,41 @@ struct paint_tri_data
fz_shade *shade;
fz_pixmap *dest;
const fz_irect *bbox;
+ fz_color_converter cc;
};
static void
+prepare_vertex(void *arg, fz_vertex *v)
+{
+ struct paint_tri_data *ptd = (struct paint_tri_data *)arg;
+ float local[MAXN];
+ fz_shade *shade = ptd->shade;
+ fz_pixmap *dest = ptd->dest;
+ int i;
+
+ if (shade->use_function)
+ v->c[0] *= 255;
+ else
+ {
+ ptd->cc.convert(&ptd->cc, &local[0], v->c);
+ for (i = 0; i < dest->colorspace->n; i++)
+ v->c[i] = local[i] * 255;
+ }
+}
+
+static void
do_paint_tri(void *arg, fz_vertex *av, fz_vertex *bv, fz_vertex *cv)
{
struct paint_tri_data *ptd = (struct paint_tri_data *)arg;
- int i, k;
- fz_vertex *vertices[3];
- fz_vertex *v;
- float *ltri;
- fz_context *ctx;
- fz_shade *shade;
+ float *vertices[3];
fz_pixmap *dest;
- float local[3][MAXN];
- vertices[0] = av;
- vertices[1] = bv;
- vertices[2] = cv;
+ vertices[0] = (float *)av;
+ vertices[1] = (float *)bv;
+ vertices[2] = (float *)cv;
dest = ptd->dest;
- ctx = ptd->ctx;
- shade = ptd->shade;
- for (k = 0; k < 3; k++)
- {
- v = vertices[k];
- ltri = &local[k][0];
- ltri[0] = v->p.x;
- ltri[1] = v->p.y;
- if (shade->use_function)
- ltri[2] = v->c[0] * 255;
- else
- {
- fz_convert_color(ctx, dest->colorspace, &ltri[2], shade->colorspace, v->c);
- for (i = 0; i < dest->colorspace->n; i++)
- ltri[i + 2] *= 255;
- }
- }
- fz_paint_triangle(dest, local, 2 + dest->colorspace->n, ptd->bbox);
+ fz_paint_triangle(dest, vertices, 2 + dest->colorspace->n, ptd->bbox);
}
void
@@ -244,7 +241,8 @@ fz_paint_shade(fz_context *ctx, fz_shade *shade, const fz_matrix *ctm, fz_pixmap
ptd.shade = shade;
ptd.bbox = bbox;
- fz_process_mesh(ctx, shade, &local_ctm, &do_paint_tri, &ptd);
+ fz_lookup_color_converter(&ptd.cc, ctx, temp->colorspace, shade->colorspace);
+ fz_process_mesh(ctx, shade, &local_ctm, &prepare_vertex, &do_paint_tri, &ptd);
if (shade->use_function)
{