diff options
Diffstat (limited to 'source/fitz/draw-mesh.c')
-rw-r--r-- | source/fitz/draw-mesh.c | 58 |
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, <ri[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) { |