Re: gl: fix gradient color generation where two stops have same offset
Chris Wilson <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <1343322895_3601@CP5-2952> |
On Thu, 26 Jul 2012 17:02:16 +0000, "Henry (Yu) Song - SISA" <[email protected]> wrote: > Hi, Chris > > Based on your comments, I am re-working the patch. The first patch is about fixing gradient color generation when multiple stops have a same offset but different color. This patch brings test case linear-gradient-large closer to reference image > > Thanks > > Henry > > From 29f4412c0a2454c36828b4dce826d9f29e6b0739 Mon Sep 17 00:00:00 2001 > From: Henry Song <[email protected]> > Date: Wed, 25 Jul 2012 15:34:52 -0700 > Subject: [PATCH] gl: fix gradient color generation for GL in cases where > there are stops that have same offset but different color. > > bring test case: linear-gradient-large closer to reference image > --- > src/cairo-gl-gradient.c | 51 ++++++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 48 insertions(+), 3 deletions(-) > > diff --git a/src/cairo-gl-gradient.c b/src/cairo-gl-gradient.c > index ffb5468..a66f26d 100644 > --- a/src/cairo-gl-gradient.c > +++ b/src/cairo-gl-gradient.c > @@ -44,6 +44,7 @@ > #include "cairo-gl-gradient-private.h" > #include "cairo-gl-private.h" > > +#define OFFSET_TOLERANCE 0.00001 > > static int > _cairo_gl_gradient_sample_width (unsigned int n_stops, > @@ -57,9 +58,10 @@ _cairo_gl_gradient_sample_width (unsigned int n_stops, > double dx = stops[n].offset - stops[n-1].offset; > double delta, max; > int ramp; > - > + > + /* in case two stops offsets are same, and colors for different. */ > if (dx == 0) > - continue; > + dx = 0.01; I had forgotten about that issue. The solution I choose was to use a maximum texture size ramp in such (frequent) cases. If we do that do we still need to fudge the offsets? As the transistion will be as sharp as the sampler allows, and the only other solution would be to do the gradient interpolation within the shader. -Chris -- Chris Wilson, Intel Open Source Technology Centre -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo