Index: src/effects/SkPerlinNoiseShader.cpp |
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp |
index 1d26920c501db288e86babd562c02f34616630c5..428d88a00e2d3fbe380dacd48bd57859263c7929 100644 |
--- a/src/effects/SkPerlinNoiseShader.cpp |
+++ b/src/effects/SkPerlinNoiseShader.cpp |
@@ -506,15 +506,15 @@ public: |
static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); |
- virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
+ virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE; |
protected: |
SkPerlinNoiseShader::Type fType; |
bool fStitchTiles; |
int fNumOctaves; |
- GrGLUniformManager::UniformHandle fBaseFrequencyUni; |
- GrGLUniformManager::UniformHandle fAlphaUni; |
- GrGLUniformManager::UniformHandle fInvMatrixUni; |
+ GrGLUniform* fBaseFrequencyUni; |
+ GrGLUniform* fAlphaUni; |
+ GrGLUniform* fInvMatrixUni; |
GrGLEffectMatrix fEffectMatrix; |
private: |
@@ -535,10 +535,10 @@ public: |
const char* inputColor, |
const TextureSamplerArray&) SK_OVERRIDE; |
- virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
+ virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE; |
private: |
- GrGLUniformManager::UniformHandle fStitchDataUni; |
+ GrGLUniform* fStitchDataUni; |
typedef GrGLNoise INHERITED; |
}; |
@@ -559,10 +559,10 @@ public: |
const char* inputColor, |
const TextureSamplerArray&) SK_OVERRIDE; |
- virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
+ virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE; |
private: |
- GrGLUniformManager::UniformHandle fSeedUni; |
+ GrGLUniform* fSeedUni; |
typedef GrGLNoise INHERITED; |
}; |
@@ -752,18 +752,21 @@ void GrGLSimplexNoise::emitCode(GrGLShaderBuilder* builder, |
const char* vCoords; |
fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &vCoords); |
- fSeedUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kFloat_GrSLType, "seed"); |
- const char* seedUni = builder->getUniformCStr(fSeedUni); |
- fInvMatrixUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kMat33f_GrSLType, "invMatrix"); |
- const char* invMatrixUni = builder->getUniformCStr(fInvMatrixUni); |
- fBaseFrequencyUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kVec2f_GrSLType, "baseFrequency"); |
- const char* baseFrequencyUni = builder->getUniformCStr(fBaseFrequencyUni); |
- fAlphaUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kFloat_GrSLType, "alpha"); |
- const char* alphaUni = builder->getUniformCStr(fAlphaUni); |
+ GrGLShaderBuilder::Uniform* seedUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kFloat_GrSLType, "seed"); |
+ fSeedUni = seedUni->glUniform(); |
+ |
+ GrGLShaderBuilder::Uniform* invMatrixUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kMat33f_GrSLType, "invMatrix"); |
+ fInvMatrixUni = invMatrixUni->glUniform(); |
+ |
+ GrGLShaderBuilder::Uniform* baseFrequencyUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec2f_GrSLType, "baseFrequency"); |
+ fBaseFrequencyUni = baseFrequencyUni->glUniform(); |
+ |
+ GrGLShaderBuilder::Uniform* alphaUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kFloat_GrSLType, "alpha"); |
+ fAlphaUni = alphaUni->glUniform(); |
// Add vec3 modulo 289 function |
static const GrGLShaderVar gVec3Args[] = { |
@@ -904,15 +907,15 @@ void GrGLSimplexNoise::emitCode(GrGLShaderBuilder* builder, |
// There are rounding errors if the floor operation is not performed here |
builder->fsCodeAppendf( |
"\t\tvec3 %s = vec3(floor((%s*vec3(%s, 1.0)).xy) * vec2(0.66) * %s, 0.0);\n", |
- noiseVecIni, invMatrixUni, vCoords, baseFrequencyUni); |
+ noiseVecIni, invMatrixUni->c_str(), vCoords, baseFrequencyUni->c_str()); |
// Perturb the texcoords with three components of noise |
builder->fsCodeAppendf("\t\t%s += 0.1 * vec3(%s(%s + vec3( 0.0, 0.0, %s))," |
"%s(%s + vec3( 43.0, 17.0, %s))," |
"%s(%s + vec3(-17.0, -43.0, %s)));\n", |
- noiseVecIni, noiseFuncName.c_str(), noiseVecIni, seedUni, |
- noiseFuncName.c_str(), noiseVecIni, seedUni, |
- noiseFuncName.c_str(), noiseVecIni, seedUni); |
+ noiseVecIni, noiseFuncName.c_str(), noiseVecIni, seedUni->c_str(), |
+ noiseFuncName.c_str(), noiseVecIni, seedUni->c_str(), |
+ noiseFuncName.c_str(), noiseVecIni, seedUni->c_str()); |
builder->fsCodeAppendf("\t\t%s = vec4(0.0);\n", outputColor); |
@@ -928,7 +931,7 @@ void GrGLSimplexNoise::emitCode(GrGLShaderBuilder* builder, |
builder->fsCodeAppendf( |
"\t\t\t\t%s[channel] += %s.x * %s(%s * %s.yyy - vec3(%s[%s], %s[%s], %s * %s.z));\n", |
outputColor, factors, noiseFuncName.c_str(), noiseVecIni, factors, xOffsets, channel, |
- yOffsets, channel, seedUni, factors); |
+ yOffsets, channel, seedUni->c_str(), factors); |
builder->fsCodeAppend("\t\t\t}\n"); // end of the for loop on channels |
@@ -947,7 +950,7 @@ void GrGLSimplexNoise::emitCode(GrGLShaderBuilder* builder, |
outputColor, outputColor, sum); |
} |
- builder->fsCodeAppendf("\t\t%s.a *= %s;\n", outputColor, alphaUni); |
+ builder->fsCodeAppendf("\t\t%s.a *= %s;\n", outputColor, alphaUni->c_str()); |
// Clamp values |
builder->fsCodeAppendf("\t\t%s = clamp(%s, 0.0, 1.0);\n", outputColor, outputColor); |
@@ -968,21 +971,24 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder, |
const char* vCoords; |
fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &vCoords); |
- fInvMatrixUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kMat33f_GrSLType, "invMatrix"); |
- const char* invMatrixUni = builder->getUniformCStr(fInvMatrixUni); |
- fBaseFrequencyUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kVec2f_GrSLType, "baseFrequency"); |
- const char* baseFrequencyUni = builder->getUniformCStr(fBaseFrequencyUni); |
- fAlphaUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kFloat_GrSLType, "alpha"); |
- const char* alphaUni = builder->getUniformCStr(fAlphaUni); |
- |
- const char* stitchDataUni = NULL; |
+ GrGLShaderBuilder::Uniform* invMatrixUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kMat33f_GrSLType, "invMatrix"); |
+ fInvMatrixUni = invMatrixUni->glUniform(); |
+ |
+ GrGLShaderBuilder::Uniform* baseFrequencyUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec2f_GrSLType, |
+ "baseFrequency"); |
+ fBaseFrequencyUni = baseFrequencyUni->glUniform(); |
+ |
+ GrGLShaderBuilder::Uniform* alphaUni = |
+ builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kFloat_GrSLType, "alpha"); |
+ fAlphaUni = alphaUni->glUniform(); |
+ |
+ GrGLShaderBuilder::Uniform* stitchDataUni = NULL; |
if (fStitchTiles) { |
- fStitchDataUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
- kVec2f_GrSLType, "stitchData"); |
- stitchDataUni = builder->getUniformCStr(fStitchDataUni); |
+ stitchDataUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
+ kVec2f_GrSLType, "stitchData"); |
+ fStitchDataUni = stitchDataUni->glUniform(); |
} |
// There are 4 lines, so the center of each line is 1/8, 3/8, 5/8 and 7/8 |
@@ -1148,14 +1154,14 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder, |
// There are rounding errors if the floor operation is not performed here |
builder->fsCodeAppendf("\n\t\tvec2 %s = floor((%s * vec3(%s, 1.0)).xy) * %s;", |
- noiseVec, invMatrixUni, vCoords, baseFrequencyUni); |
+ noiseVec, invMatrixUni->c_str(), vCoords, baseFrequencyUni->c_str()); |
// Clear the color accumulator |
builder->fsCodeAppendf("\n\t\t%s = vec4(0.0);", outputColor); |
if (fStitchTiles) { |
// Set up TurbulenceInitial stitch values. |
- builder->fsCodeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni); |
+ builder->fsCodeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni->c_str()); |
} |
builder->fsCodeAppendf("\n\t\tfloat %s = 1.0;", ratio); |
@@ -1203,7 +1209,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder, |
builder->fsCodeAppendf("\n\t\t%s = %s * vec4(0.5) + vec4(0.5);", outputColor, outputColor); |
} |
- builder->fsCodeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni); |
+ builder->fsCodeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni->c_str()); |
// Clamp values |
builder->fsCodeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outputColor); |
@@ -1252,12 +1258,12 @@ GrGLEffect::EffectKey GrGLNoise::GenKey(const GrDrawEffect& drawEffect, const Gr |
drawEffect.castEffect<GrPerlinNoiseEffect>().coordsType(), NULL); |
} |
-void GrGLNoise::setData(const GrGLUniformManager& uman, const GrDrawEffect& drawEffect) { |
+void GrGLNoise::setData(const GrGLContext& context, const GrDrawEffect& drawEffect) { |
const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseEffect>(); |
const SkVector& baseFrequency = turbulence.baseFrequency(); |
- uman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); |
- uman.set1f(fAlphaUni, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntToScalar(255))); |
+ fBaseFrequencyUni->set2f(context, baseFrequency.fX, baseFrequency.fY); |
+ fAlphaUni->set1f(context, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntToScalar(255))); |
SkMatrix m = turbulence.matrix(); |
SkMatrix invM; |
@@ -1266,30 +1272,30 @@ void GrGLNoise::setData(const GrGLUniformManager& uman, const GrDrawEffect& draw |
} else { |
invM.postConcat(invM); // Square the matrix |
} |
- uman.setSkMatrix(fInvMatrixUni, invM); |
+ fInvMatrixUni->setSkMatrix(context, invM); |
// 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 shadeSpan() functions. |
m.postTranslate(SK_Scalar1, SK_Scalar1); |
- fEffectMatrix.setData(uman, m, drawEffect, NULL); |
+ fEffectMatrix.setData(context, m, drawEffect, NULL); |
} |
-void GrGLPerlinNoise::setData(const GrGLUniformManager& uman, const GrDrawEffect& drawEffect) { |
- INHERITED::setData(uman, drawEffect); |
+void GrGLPerlinNoise::setData(const GrGLContext& context, const GrDrawEffect& drawEffect) { |
+ INHERITED::setData(context, drawEffect); |
const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseEffect>(); |
if (turbulence.stitchTiles()) { |
const SkPerlinNoiseShader::StitchData& stitchData = turbulence.stitchData(); |
- uman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), |
+ fStitchDataUni->set2f(context, SkIntToScalar(stitchData.fWidth), |
SkIntToScalar(stitchData.fHeight)); |
} |
} |
-void GrGLSimplexNoise::setData(const GrGLUniformManager& uman, const GrDrawEffect& drawEffect) { |
- INHERITED::setData(uman, drawEffect); |
+void GrGLSimplexNoise::setData(const GrGLContext& context, const GrDrawEffect& drawEffect) { |
+ INHERITED::setData(context, drawEffect); |
const GrSimplexNoiseEffect& turbulence = drawEffect.castEffect<GrSimplexNoiseEffect>(); |
- uman.set1f(fSeedUni, turbulence.seed()); |
+ fSeedUni->set1f(context, turbulence.seed()); |
} |
///////////////////////////////////////////////////////////////////// |