| Index: src/effects/gradients/SkTwoPointConicalGradient.cpp
|
| diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp
|
| index 37b49f0d475a22c9eecfb2027649e32e8b475587..034c4dcfb566a62b8ddda022ea3fef78e5f8bf39 100644
|
| --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp
|
| +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp
|
| @@ -334,10 +334,6 @@ void SkTwoPointConicalGradient::flatten(
|
|
|
| #include "GrTBackendEffectFactory.h"
|
|
|
| -// For brevity
|
| -typedef GrGLUniformManager::UniformHandle UniformHandle;
|
| -static const UniformHandle kInvalidUniformHandle = GrGLUniformManager::kInvalidUniformHandle;
|
| -
|
| class GrGLConical2Gradient : public GrGLGradientEffect {
|
| public:
|
|
|
| @@ -350,14 +346,14 @@ public:
|
| const char* outputColor,
|
| 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;
|
|
|
| static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps);
|
|
|
| protected:
|
|
|
| - UniformHandle fVSParamUni;
|
| - UniformHandle fFSParamUni;
|
| + GrGLUniform* fVSParamUni;
|
| + GrGLUniform* fFSParamUni;
|
|
|
| const char* fVSVaryingName;
|
| const char* fFSVaryingName;
|
| @@ -475,8 +471,8 @@ GrEffectRef* GrConical2Gradient::TestCreate(SkMWCRandom* random,
|
| GrGLConical2Gradient::GrGLConical2Gradient(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect)
|
| : INHERITED(factory)
|
| - , fVSParamUni(kInvalidUniformHandle)
|
| - , fFSParamUni(kInvalidUniformHandle)
|
| + , fVSParamUni(NULL)
|
| + , fFSParamUni(NULL)
|
| , fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedCenter(SK_ScalarMax)
|
| @@ -498,14 +494,20 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| GrSLType coordsVaryingType;
|
| this->setupMatrix(builder, key, &fsCoords, &vsCoordsVarying, &coordsVaryingType);
|
|
|
| - this->emitYCoordUniform(builder);
|
| + GrGLShaderBuilder::Uniform* yCoordUni = this->emitYCoordUniform(builder);
|
| +
|
| // 2 copies of uniform array, 1 for each of vertex & fragment shader,
|
| // to work around Xoom bug. Doesn't seem to cause performance decrease
|
| // in test apps, but need to keep an eye on it.
|
| - fVSParamUni = builder->addUniformArray(GrGLShaderBuilder::kVertex_ShaderType,
|
| - kFloat_GrSLType, "Conical2VSParams", 6);
|
| - fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Conical2FSParams", 6);
|
| + GrGLShaderBuilder::Uniform* vsParamUni =
|
| + builder->addUniformArray(GrGLShaderBuilder::kVertex_ShaderType,
|
| + kFloat_GrSLType, "Conical2VSParams", 6);
|
| + fVSParamUni = vsParamUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* fsParamUni =
|
| + builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderType,
|
| + kFloat_GrSLType, "Conical2FSParams", 6);
|
| + fFSParamUni = fsParamUni->glUniform();
|
|
|
| // For radial gradients without perspective we can pass the linear
|
| // part of the quadratic as a varying.
|
| @@ -519,9 +521,9 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| SkString p2; // distance between centers
|
| SkString p3; // start radius
|
| SkString p5; // difference in radii (r1 - r0)
|
| - builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2);
|
| - builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3);
|
| - builder->getUniformVariable(fVSParamUni).appendArrayAccess(5, &p5);
|
| + vsParamUni->appendArrayAccess(2, &p2);
|
| + vsParamUni->appendArrayAccess(3, &p3);
|
| + vsParamUni->appendArrayAccess(5, &p5);
|
|
|
| // For radial gradients without perspective we can pass the linear
|
| // part of the quadratic as a varying.
|
| @@ -550,12 +552,12 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| SkString p4; // start radius squared
|
| SkString p5; // difference in radii (r1 - r0)
|
|
|
| - builder->getUniformVariable(fFSParamUni).appendArrayAccess(0, &p0);
|
| - builder->getUniformVariable(fFSParamUni).appendArrayAccess(1, &p1);
|
| - builder->getUniformVariable(fFSParamUni).appendArrayAccess(2, &p2);
|
| - builder->getUniformVariable(fFSParamUni).appendArrayAccess(3, &p3);
|
| - builder->getUniformVariable(fFSParamUni).appendArrayAccess(4, &p4);
|
| - builder->getUniformVariable(fFSParamUni).appendArrayAccess(5, &p5);
|
| + fsParamUni->appendArrayAccess(0, &p0);
|
| + fsParamUni->appendArrayAccess(1, &p1);
|
| + fsParamUni->appendArrayAccess(2, &p2);
|
| + fsParamUni->appendArrayAccess(3, &p3);
|
| + fsParamUni->appendArrayAccess(4, &p4);
|
| + fsParamUni->appendArrayAccess(5, &p5);
|
|
|
| // If we we're able to interpolate the linear component,
|
| // bVar is the varying; otherwise compute it
|
| @@ -618,7 +620,7 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| p5.c_str(), p3.c_str());
|
|
|
| builder->fsCodeAppend("\t\t");
|
| - this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
|
| + this->emitColorLookup(builder, yCoordUni, tName.c_str(), outputColor, inputColor, samplers[0]);
|
|
|
| // otherwise, if r(t) for the larger root was <= 0, try the other root
|
| builder->fsCodeAppend("\t\t} else {\n");
|
| @@ -630,7 +632,7 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| tName.c_str(), p5.c_str(), p3.c_str());
|
|
|
| builder->fsCodeAppend("\t\t\t");
|
| - this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
|
| + this->emitColorLookup(builder, yCoordUni, tName.c_str(), outputColor, inputColor, samplers[0]);
|
|
|
| // end if (r(t) > 0) for smaller root
|
| builder->fsCodeAppend("\t\t\t}\n");
|
| @@ -648,15 +650,15 @@ void GrGLConical2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| builder->fsCodeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(),
|
| p5.c_str(), p3.c_str());
|
| builder->fsCodeAppend("\t");
|
| - this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
|
| + this->emitColorLookup(builder, yCoordUni, tName.c_str(), outputColor, inputColor, samplers[0]);
|
| builder->fsCodeAppend("\t}\n");
|
| }
|
| }
|
| }
|
|
|
| -void GrGLConical2Gradient::setData(const GrGLUniformManager& uman,
|
| +void GrGLConical2Gradient::setData(const GrGLContext& context,
|
| const GrDrawEffect& drawEffect) {
|
| - INHERITED::setData(uman, drawEffect);
|
| + INHERITED::setData(context, drawEffect);
|
| const GrConical2Gradient& data = drawEffect.castEffect<GrConical2Gradient>();
|
| GrAssert(data.isDegenerate() == fIsDegenerate);
|
| SkScalar centerX1 = data.center();
|
| @@ -683,8 +685,8 @@ void GrGLConical2Gradient::setData(const GrGLUniformManager& uman,
|
| SkScalarToFloat(diffRadius)
|
| };
|
|
|
| - uman.set1fv(fVSParamUni, 0, 6, values);
|
| - uman.set1fv(fFSParamUni, 0, 6, values);
|
| + fVSParamUni->set1fv(context, 0, 6, values);
|
| + fFSParamUni->set1fv(context, 0, 6, values);
|
| fCachedCenter = centerX1;
|
| fCachedRadius = radius0;
|
| fCachedDiffRadius = diffRadius;
|
|
|