Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Unified Diff: src/effects/SkPerlinNoiseShader.cpp

Issue 169973002: Begin making SkPerlinNoiseShader const. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/effects/SkPerlinNoiseShader.cpp
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
index 48a25f9a5b921c59259b9356358464a01e03d98f..1c72583329a227f8ac9f006f9a3ac5a4a5c98778 100644
--- a/src/effects/SkPerlinNoiseShader.cpp
+++ b/src/effects/SkPerlinNoiseShader.cpp
@@ -81,12 +81,18 @@ struct SkPerlinNoiseShader::StitchData {
};
struct SkPerlinNoiseShader::PaintingData {
- PaintingData(const SkISize& tileSize)
- : fSeed(0)
- , fTileSize(tileSize)
+ PaintingData(const SkISize& tileSize, SkScalar seed,
Stephen White 2014/02/18 14:58:56 Not new to this patch, but I think the PaintingDat
scroggo 2014/02/18 16:42:57 I believe so.
scroggo 2014/03/04 22:26:34 Done. This is a much more pervasive change, and re
+ SkScalar baseFrequencyX, SkScalar baseFrequencyY)
+ : fTileSize(tileSize)
+ , fBaseFrequency(SkPoint::Make(baseFrequencyX, baseFrequencyY))
, fPermutationsBitmap(NULL)
, fNoiseBitmap(NULL)
- {}
+ {
+ this->init(seed);
+ if (!fTileSize.isEmpty()) {
+ this->stitch();
+ }
+ }
~PaintingData()
{
@@ -107,8 +113,6 @@ private:
SkBitmap* fPermutationsBitmap;
SkBitmap* fNoiseBitmap;
-public:
-
inline int random() {
static const int gRandAmplitude = 16807; // 7**5; primitive root of m
static const int gRandQ = 127773; // m / a
@@ -121,6 +125,7 @@ public:
return result;
}
+ // Only called once. Could be part of the constructor.
void init(SkScalar seed)
{
static const SkScalar gInvBlockSizef = SkScalarInvert(SkIntToScalar(kBlockSize));
@@ -198,6 +203,7 @@ public:
fNoiseBitmap = NULL;
}
+ // Only called once. Could be part of the constructor.
void stitch() {
SkScalar tileWidth = SkIntToScalar(fTileSize.width());
SkScalar tileHeight = SkIntToScalar(fTileSize.height());
@@ -238,6 +244,8 @@ public:
fStitchDataInit.fWrapY = kPerlinNoise + fStitchDataInit.fHeight;
}
+public:
+
SkBitmap* getPermutationsBitmap()
{
if (!fPermutationsBitmap) {
@@ -286,16 +294,17 @@ SkPerlinNoiseShader::SkPerlinNoiseShader(SkPerlinNoiseShader::Type type,
, fBaseFrequencyY(baseFrequencyY)
, fNumOctaves(numOctaves > 255 ? 255 : numOctaves/*[0,255] octaves allowed*/)
, fSeed(seed)
- , fStitchTiles((tileSize != NULL) && !tileSize->isEmpty())
- , fPaintingData(NULL)
+ , fTileSize(NULL == tileSize ? SkISize::Make(0, 0) : *tileSize)
+ , fStitchTiles(!fTileSize.isEmpty())
{
SkASSERT(numOctaves >= 0 && numOctaves < 256);
- setTileSize(fStitchTiles ? *tileSize : SkISize::Make(0,0));
fMatrix.reset();
+ fPaintingData = SkNEW_ARGS(PaintingData, (fTileSize, fSeed, fBaseFrequencyX, fBaseFrequencyY));
}
-SkPerlinNoiseShader::SkPerlinNoiseShader(SkReadBuffer& buffer) :
- INHERITED(buffer), fPaintingData(NULL) {
+SkPerlinNoiseShader::SkPerlinNoiseShader(SkReadBuffer& buffer)
+ : INHERITED(buffer)
+{
fType = (SkPerlinNoiseShader::Type) buffer.readInt();
fBaseFrequencyX = buffer.readScalar();
fBaseFrequencyY = buffer.readScalar();
@@ -304,10 +313,11 @@ SkPerlinNoiseShader::SkPerlinNoiseShader(SkReadBuffer& buffer) :
fStitchTiles = buffer.readBool();
fTileSize.fWidth = buffer.readInt();
fTileSize.fHeight = buffer.readInt();
- setTileSize(fTileSize);
fMatrix.reset();
+ fPaintingData = SkNEW_ARGS(PaintingData, (fTileSize, fSeed, fBaseFrequencyX, fBaseFrequencyY));
buffer.validate(perlin_noise_type_is_valid(fType) &&
- (fNumOctaves >= 0) && (fNumOctaves <= 255));
+ (fNumOctaves >= 0) && (fNumOctaves <= 255) &&
+ (fStitchTiles != fTileSize.isEmpty()));
}
SkPerlinNoiseShader::~SkPerlinNoiseShader() {
@@ -327,36 +337,6 @@ void SkPerlinNoiseShader::flatten(SkWriteBuffer& buffer) const {
buffer.writeInt(fTileSize.fHeight);
}
-void SkPerlinNoiseShader::initPaint(PaintingData& paintingData)
-{
- paintingData.init(fSeed);
-
- // Set frequencies to original values
- paintingData.fBaseFrequency.set(fBaseFrequencyX, fBaseFrequencyY);
- // Adjust frequecies based on size if stitching is enabled
- if (fStitchTiles) {
- paintingData.stitch();
- }
-}
-
-void SkPerlinNoiseShader::setTileSize(const SkISize& tileSize) {
- fTileSize = tileSize;
-
- if (NULL == fPaintingData) {
- fPaintingData = SkNEW_ARGS(PaintingData, (fTileSize));
- initPaint(*fPaintingData);
- } else {
- // Set Size
- fPaintingData->fTileSize = fTileSize;
- // Set frequencies to original values
- fPaintingData->fBaseFrequency.set(fBaseFrequencyX, fBaseFrequencyY);
- // Adjust frequecies based on size if stitching is enabled
- if (fStitchTiles) {
- fPaintingData->stitch();
- }
- }
-}
-
SkScalar SkPerlinNoiseShader::noise2D(int channel, const PaintingData& paintingData,
const StitchData& stitchData, const SkPoint& noiseVector)
{
« include/effects/SkPerlinNoiseShader.h ('K') | « include/effects/SkPerlinNoiseShader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698