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; |