Perform perlin noise matrix computations once per frame, not per pixel.
Before (Retina MBP): running bench [640 480] perlinnoise 8888: cmsecs = 1853.18 After: running bench [640 480] perlinnoise 8888: cmsecs = 1667.06 Review URL: https://codereview.chromium.org/225583006 git-svn-id: http://skia.googlecode.com/svn/trunk@14060 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
2af1a2dbc4
commit
a8d95f899b
@ -410,20 +410,8 @@ SkScalar SkPerlinNoiseShader::calculateTurbulenceValueForPoint(int channel,
|
||||
}
|
||||
|
||||
SkPMColor SkPerlinNoiseShader::shade(const SkPoint& point, StitchData& stitchData) const {
|
||||
SkMatrix matrix = fMatrix;
|
||||
matrix.postConcat(getLocalMatrix());
|
||||
SkMatrix invMatrix;
|
||||
if (!matrix.invert(&invMatrix)) {
|
||||
invMatrix.reset();
|
||||
} else {
|
||||
invMatrix.postConcat(invMatrix); // Square the matrix
|
||||
}
|
||||
// This (1,1) translation is due to WebKit's 1 based coordinates for the noise
|
||||
// (as opposed to 0 based, usually). The same adjustment is in the setData() function.
|
||||
matrix.postTranslate(SK_Scalar1, SK_Scalar1);
|
||||
SkPoint newPoint;
|
||||
matrix.mapPoints(&newPoint, &point, 1);
|
||||
invMatrix.mapPoints(&newPoint, &newPoint, 1);
|
||||
fMatrix.mapPoints(&newPoint, &point, 1);
|
||||
newPoint.fX = SkScalarRoundToScalar(newPoint.fX);
|
||||
newPoint.fY = SkScalarRoundToScalar(newPoint.fY);
|
||||
|
||||
@ -437,7 +425,18 @@ SkPMColor SkPerlinNoiseShader::shade(const SkPoint& point, StitchData& stitchDat
|
||||
|
||||
bool SkPerlinNoiseShader::setContext(const SkBitmap& device, const SkPaint& paint,
|
||||
const SkMatrix& matrix) {
|
||||
fMatrix = matrix;
|
||||
SkMatrix newMatrix = matrix;
|
||||
newMatrix.postConcat(getLocalMatrix());
|
||||
SkMatrix invMatrix;
|
||||
if (!newMatrix.invert(&invMatrix)) {
|
||||
invMatrix.reset();
|
||||
}
|
||||
// This (1,1) translation is due to WebKit's 1 based coordinates for the noise
|
||||
// (as opposed to 0 based, usually). The same adjustment is in the setData() function.
|
||||
newMatrix.postTranslate(SK_Scalar1, SK_Scalar1);
|
||||
newMatrix.postConcat(invMatrix);
|
||||
newMatrix.postConcat(invMatrix);
|
||||
fMatrix = newMatrix;
|
||||
return INHERITED::setContext(device, paint, matrix);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user