| Index: src/effects/gradients/SkTwoPointRadialGradient.cpp
|
| diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp
|
| index 989c1395563145122a0f13e88a5822011adcbd83..7a2ed9a307bbc09a2b65f3f5f67cb9e5974bd47a 100644
|
| --- a/src/effects/gradients/SkTwoPointRadialGradient.cpp
|
| +++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp
|
| @@ -374,10 +374,6 @@ void SkTwoPointRadialGradient::init() {
|
|
|
| #include "GrTBackendEffectFactory.h"
|
|
|
| -// For brevity
|
| -typedef GrGLUniformManager::UniformHandle UniformHandle;
|
| -static const UniformHandle kInvalidUniformHandle = GrGLUniformManager::kInvalidUniformHandle;
|
| -
|
| class GrGLRadial2Gradient : public GrGLGradientEffect {
|
|
|
| public:
|
| @@ -391,14 +387,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;
|
| @@ -516,8 +512,8 @@ GrEffectRef* GrRadial2Gradient::TestCreate(SkMWCRandom* random,
|
| GrGLRadial2Gradient::GrGLRadial2Gradient(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect)
|
| : INHERITED(factory)
|
| - , fVSParamUni(kInvalidUniformHandle)
|
| - , fFSParamUni(kInvalidUniformHandle)
|
| + , fVSParamUni(NULL)
|
| + , fFSParamUni(NULL)
|
| , fVSVaryingName(NULL)
|
| , fFSVaryingName(NULL)
|
| , fCachedCenter(SK_ScalarMax)
|
| @@ -535,7 +531,7 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| const char* inputColor,
|
| const TextureSamplerArray& samplers) {
|
|
|
| - this->emitYCoordUniform(builder);
|
| + GrGLShaderBuilder::Uniform* yCoordUni = this->emitYCoordUniform(builder);
|
| const char* fsCoords;
|
| const char* vsCoordsVarying;
|
| GrSLType coordsVaryingType;
|
| @@ -544,10 +540,15 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* 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, "Radial2VSParams", 6);
|
| - fFSParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Radial2FSParams", 6);
|
| + GrGLShaderBuilder::Uniform* vsParamUni =
|
| + builder->addUniformArray(GrGLShaderBuilder::kVertex_ShaderType,
|
| + kFloat_GrSLType, "Radial2VSParams", 6);
|
| + fVSParamUni = vsParamUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* fsParamUni =
|
| + builder->addUniformArray(GrGLShaderBuilder::kFragment_ShaderType,
|
| + kFloat_GrSLType, "Radial2FSParams", 6);
|
| + fFSParamUni = fsParamUni->glUniform();
|
|
|
| // For radial gradients without perspective we can pass the linear
|
| // part of the quadratic as a varying.
|
| @@ -559,8 +560,8 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| {
|
| SkString p2;
|
| SkString p3;
|
| - builder->getUniformVariable(fVSParamUni).appendArrayAccess(2, &p2);
|
| - builder->getUniformVariable(fVSParamUni).appendArrayAccess(3, &p3);
|
| + vsParamUni->appendArrayAccess(2, &p2);
|
| + vsParamUni->appendArrayAccess(3, &p3);
|
|
|
| // For radial gradients without perspective we can pass the linear
|
| // part of the quadratic as a varying.
|
| @@ -584,12 +585,12 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| SkString p3;
|
| SkString p4;
|
| SkString p5;
|
| - 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
|
| @@ -632,13 +633,13 @@ void GrGLRadial2Gradient::emitCode(GrGLShaderBuilder* builder,
|
| t.printf("-%s / %s", cName.c_str(), bVar.c_str());
|
| }
|
|
|
| - this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]);
|
| + this->emitColorLookup(builder, yCoordUni, t.c_str(), outputColor, inputColor, samplers[0]);
|
| }
|
| }
|
|
|
| -void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman,
|
| +void GrGLRadial2Gradient::setData(const GrGLContext& context,
|
| const GrDrawEffect& drawEffect) {
|
| - INHERITED::setData(uman, drawEffect);
|
| + INHERITED::setData(context, drawEffect);
|
| const GrRadial2Gradient& data = drawEffect.castEffect<GrRadial2Gradient>();
|
| GrAssert(data.isDegenerate() == fIsDegenerate);
|
| SkScalar centerX1 = data.center();
|
| @@ -663,8 +664,8 @@ void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman,
|
| data.isPosRoot() ? 1.f : -1.f
|
| };
|
|
|
| - 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;
|
| fCachedPosRoot = data.isPosRoot();
|
|
|