static void fz_paint_quad(fz_pixmap *pix, fz_point p0, fz_point p1, fz_point p2, fz_point p3, float c0, float c1, float c2, float c3, int n, fz_bbox bbox) { float v[4][3]; v[0][0] = p0.x; v[0][1] = p0.y; v[0][2] = c0; v[1][0] = p1.x; v[1][1] = p1.y; v[1][2] = c1; v[2][0] = p2.x; v[2][1] = p2.y; v[2][2] = c2; v[3][0] = p3.x; v[3][1] = p3.y; v[3][2] = c3; fz_paint_triangle(pix, v[0], v[2], v[3], n, bbox); fz_paint_triangle(pix, v[0], v[3], v[1], n, bbox); }
static void fz_paint_mesh(fz_shade *shade, fz_matrix ctm, fz_pixmap *dest, fz_bbox bbox) { float tri[3][MAXN]; fz_point p; float *mesh; int ntris; int i, k; mesh = shade->mesh; if (shade->use_function) ntris = shade->mesh_len / 9; else ntris = shade->mesh_len / ((2 + shade->colorspace->n) * 3); while (ntris--) { for (k = 0; k < 3; k++) { p.x = *mesh++; p.y = *mesh++; p = fz_transform_point(ctm, p); tri[k][0] = p.x; tri[k][1] = p.y; if (shade->use_function) tri[k][2] = *mesh++ * 255; else { fz_convert_color(shade->colorspace, mesh, dest->colorspace, tri[k] + 2); for (i = 0; i < dest->colorspace->n; i++) tri[k][i + 2] *= 255; mesh += shade->colorspace->n; } } fz_paint_triangle(dest, tri[0], tri[1], tri[2], 2 + dest->colorspace->n, bbox); } }
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; fz_pixmap *dest; float local[3][MAXN]; vertices[0] = av; vertices[1] = bv; vertices[2] = 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); }