- From: Michael Day <mikeday@yeslogic.com>
- Date: Wed, 01 Sep 2010 14:12:01 +1000
- To: www-svg@w3.org
Hi,
The specification for the feTurbulence filter primitive consists of a
chunk of code that claims to be C, but contains invalid C++ idioms such
as constructor-style type casts:
sx = double(s_curve(rx0));
sy = double(s_curve(ry0));
In C these would be correctly written like this:
sx = (double) s_curve(rx0);
sy = (double) s_curve(ry0);
In fact, the type casts are entirely unnecessary, as the s_curve macro
expands to this expression:
sx = ( rx0 * rx0 * (3. - 2. * rx0) );
sy = ( ry0 * ry0 * (3. - 2. * ry0) );
and all of the values and variables on both sides are already doubles.
The code also contains a number of anachronisms, like the "register"
keyword, and untyped variables and arrays expected to implicitly be
typed as ints, which is not valid in ISO C++.
As a result the code as written is not valid C or C++, and will not
compile in either language without modification.
More annoyingly, the spec does not state how the turbulence function is
actually used. Because it depends on a persistent random seed value, the
order of evaluation is significant, and different results will be
obtained if the image is traversed in a different order. The spec says:
"The following order is used for applying the pseudo random numbers. An
initial seed value is computed based on attribute ‘seed’. Then the
implementation computes the lattice points for R, then continues getting
additional pseudo random numbers relative to the last generated pseudo
random number and computes the lattice points for G, and so on for B and A."
Does this imply this order:
for (y = 0; y < height; ++y)
for (x = 0; x < height; ++x)
for (c = 0; c < 4; ++c)
turbulence(c, ...);
Or this order:
for (c = 0; c < 4; ++c)
for (y = 0; y < height; ++y)
for (x = 0; x < height; ++x)
turbulence(c, ...);
Or something else entirely?
There is also no specification of the meaning of the nColorChannel
argument to the turbulence function. Presumably this is 0/1/2/3 for
R/G/B/A, but it would be nice if this was explicitly stated.
Best regards,
Michael
--
Print XML with Prince!
http://www.princexml.com
Received on Wednesday, 1 September 2010 04:12:41 UTC