Пример #1
0
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);
}
Пример #2
0
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);
	}
}
Пример #3
0
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, &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);
}