[cairo] Radial shader transformation
Thomas Hunger
info at teh-web.de
Mon Mar 1 13:32:27 PST 2004
> I may be wrong, perhaps the current transform applies to the current
> shader?
Hm. I thought quite a bit about that and came the the result that the current
transform should apply to the current shader.
I.e. if you do create horizontal, linear gradient via shader_linear (0,y,1,y)
and then call rotate(PI/2) the gradient would rotate together with the shape.
Did I understand you rightly that in your proposal the gradient would not
rotate, since it would use the transform frozen at its creation time?
> Certainly in my experience the fastest way to do an elliptical shader is to
> do a 2x3 matrix transform of the actual coordinate to map it to a 1-radius
> circle around 0,0 and then figure out the color from there. So specifying
> it this way with an arbitrary transform will not limit the implementation
> at all.
>
> Of course if this is true, there is no requirement to provide a radius, or
> even an x,y center point, to the radial shader. It can actually draw a
> 1-radius circle around 0,0 and the user must use transformations to put it
> in the correct place.
While it would be nice to have a shorter linear_shader_create function, this
would mean that before every stroke and fill the shader hast to be
transformed to the right place. That means every shading is bound to exactly
one stroke or fill operation.
A "general" shader that transforms with the current transform could be reused
for many strokes and fills. That would also work nicely with svg, although
svg allows an additional transform to shaders similar to the
set_surface_matrix for surfaces which could be introduced into the same model
without much hassle.
If we introduce a set_shader_matrix analougeous to the set_surface_matrix then
the rx and ry would not be needed any more, but xc, yc, fx, and fy would
still have to stay.
The rx and ry could still be used for convenience internally, since they need
to be calculated for the software shader anyway.
Tom
Btw. a nice link for the radial software shader if anyone is interested:
http://www.math.purdue.edu/~clomont/Math/Papers/2002/FinalPaper.pdf
More information about the cairo
mailing list