| Index: src/gpu/effects/GrBezierEffect.cpp
|
| diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp
|
| index 26049b398baa2f9e2d604e843d875b11b68c7b97..f38a136992a14103f850b28e7b63b9fbf8168cb4 100644
|
| --- a/src/gpu/effects/GrBezierEffect.cpp
|
| +++ b/src/gpu/effects/GrBezierEffect.cpp
|
| @@ -37,16 +37,20 @@ GrGLConicEffect::GrGLConicEffect(const GrBackendProcessorFactory& factory,
|
| }
|
|
|
| void GrGLConicEffect::emitCode(const EmitArgs& args) {
|
| + GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| + const GrConicEffect& gp = args.fGP.cast<GrConicEffect>();
|
| +
|
| GrGLVertToFrag v(kVec4f_GrSLType);
|
| args.fPB->addVarying("ConicCoeffs", &v);
|
| + vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName);
|
|
|
| - const GrShaderVar& inConicCoeffs = args.fGP.cast<GrConicEffect>().inConicCoeffs();
|
| - GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| - vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inConicCoeffs.c_str());
|
| + // setup coord outputs
|
| + vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), gp.inPosition()->fName);
|
| + vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), gp.inPosition()->fName);
|
|
|
| // setup position varying
|
| vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(), vsBuilder->uViewM(),
|
| - vsBuilder->inPosition());
|
| + gp.inPosition()->fName);
|
|
|
| GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
|
| fsBuilder->codeAppend("float edgeAlpha;");
|
| @@ -105,8 +109,7 @@ void GrGLConicEffect::emitCode(const EmitArgs& args) {
|
| SkFAIL("Shouldn't get here");
|
| }
|
|
|
| - fsBuilder->codeAppendf("%s = %s;", args.fOutput,
|
| - (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("edgeAlpha")).c_str());
|
| + fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
|
| }
|
|
|
| void GrGLConicEffect::GenKey(const GrProcessor& processor, const GrGLCaps&,
|
| @@ -125,10 +128,10 @@ const GrBackendGeometryProcessorFactory& GrConicEffect::getFactory() const {
|
| }
|
|
|
| GrConicEffect::GrConicEffect(GrPrimitiveEdgeType edgeType)
|
| - : fEdgeType(edgeType)
|
| - , fInConicCoeffs(this->addVertexAttrib(GrShaderVar("inConicCoeffs",
|
| - kVec4f_GrSLType,
|
| - GrShaderVar::kAttribute_TypeModifier))) {
|
| + : fEdgeType(edgeType) {
|
| + fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVertexAttribType));
|
| + fInConicCoeffs = &this->addVertexAttrib(GrAttribute("inConicCoeffs",
|
| + kVec4f_GrVertexAttribType));
|
| }
|
|
|
| bool GrConicEffect::onIsEqual(const GrGeometryProcessor& other) const {
|
| @@ -181,16 +184,20 @@ GrGLQuadEffect::GrGLQuadEffect(const GrBackendProcessorFactory& factory,
|
| }
|
|
|
| void GrGLQuadEffect::emitCode(const EmitArgs& args) {
|
| + GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| + const GrQuadEffect& gp = args.fGP.cast<GrQuadEffect>();
|
| +
|
| GrGLVertToFrag v(kVec4f_GrSLType);
|
| args.fPB->addVarying("HairQuadEdge", &v);
|
| + vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName);
|
|
|
| - GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| - const GrShaderVar& inHairQuadEdge = args.fGP.cast<GrQuadEffect>().inHairQuadEdge();
|
| - vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inHairQuadEdge.c_str());
|
| + // setup coord outputs
|
| + vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), gp.inPosition()->fName);
|
| + vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), gp.inPosition()->fName);
|
|
|
| // setup position varying
|
| vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(), vsBuilder->uViewM(),
|
| - vsBuilder->inPosition());
|
| + gp.inPosition()->fName);
|
|
|
| GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
|
| fsBuilder->codeAppendf("float edgeAlpha;");
|
| @@ -235,8 +242,7 @@ void GrGLQuadEffect::emitCode(const EmitArgs& args) {
|
| SkFAIL("Shouldn't get here");
|
| }
|
|
|
| - fsBuilder->codeAppendf("%s = %s;", args.fOutput,
|
| - (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("edgeAlpha")).c_str());
|
| + fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
|
| }
|
|
|
| void GrGLQuadEffect::GenKey(const GrProcessor& processor, const GrGLCaps&,
|
| @@ -255,10 +261,10 @@ const GrBackendGeometryProcessorFactory& GrQuadEffect::getFactory() const {
|
| }
|
|
|
| GrQuadEffect::GrQuadEffect(GrPrimitiveEdgeType edgeType)
|
| - : fEdgeType(edgeType)
|
| - , fInHairQuadEdge(this->addVertexAttrib(GrShaderVar("inCubicCoeffs",
|
| - kVec4f_GrSLType,
|
| - GrShaderVar::kAttribute_TypeModifier))) {
|
| + : fEdgeType(edgeType) {
|
| + fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVertexAttribType));
|
| + fInHairQuadEdge = &this->addVertexAttrib(GrAttribute("inHairQuadEdge",
|
| + kVec4f_GrVertexAttribType));
|
| }
|
|
|
| bool GrQuadEffect::onIsEqual(const GrGeometryProcessor& other) const {
|
| @@ -311,16 +317,20 @@ GrGLCubicEffect::GrGLCubicEffect(const GrBackendProcessorFactory& factory,
|
| }
|
|
|
| void GrGLCubicEffect::emitCode(const EmitArgs& args) {
|
| + GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| + const GrCubicEffect& gp = args.fGP.cast<GrCubicEffect>();
|
| +
|
| GrGLVertToFrag v(kVec4f_GrSLType);
|
| - args.fPB->addVarying("CubicCoeffs", &v, GrGLShaderVar::kHigh_Precision);
|
| + args.fPB->addVarying("CubicCoeffs", &v);
|
| + vsBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inCubicCoeffs()->fName);
|
|
|
| - GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| - const GrShaderVar& inCubicCoeffs = args.fGP.cast<GrCubicEffect>().inCubicCoeffs();
|
| - vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inCubicCoeffs.c_str());
|
| + // setup coord outputs
|
| + vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), gp.inPosition()->fName);
|
| + vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), gp.inPosition()->fName);
|
|
|
| // setup position varying
|
| vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(), vsBuilder->uViewM(),
|
| - vsBuilder->inPosition());
|
| + gp.inPosition()->fName);
|
|
|
| GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
|
|
|
| @@ -405,8 +415,8 @@ void GrGLCubicEffect::emitCode(const EmitArgs& args) {
|
| SkFAIL("Shouldn't get here");
|
| }
|
|
|
| - fsBuilder->codeAppendf("%s = %s;", args.fOutput,
|
| - (GrGLSLExpr4(args.fInput) * GrGLSLExpr1(edgeAlpha.c_str())).c_str());
|
| +
|
| + fsBuilder->codeAppendf("%s = vec4(%s);", args.fOutputCoverage, edgeAlpha.c_str());
|
| }
|
|
|
| void GrGLCubicEffect::GenKey(const GrProcessor& processor, const GrGLCaps&,
|
| @@ -425,10 +435,10 @@ const GrBackendGeometryProcessorFactory& GrCubicEffect::getFactory() const {
|
| }
|
|
|
| GrCubicEffect::GrCubicEffect(GrPrimitiveEdgeType edgeType)
|
| - : fEdgeType(edgeType)
|
| - , fInCubicCoeffs(this->addVertexAttrib(GrShaderVar("inCubicCoeffs",
|
| - kVec4f_GrSLType,
|
| - GrShaderVar::kAttribute_TypeModifier))) {
|
| + : fEdgeType(edgeType) {
|
| + fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVertexAttribType));
|
| + fInCubicCoeffs = &this->addVertexAttrib(GrAttribute("inCubicCoeffs",
|
| + kVec4f_GrVertexAttribType));
|
| }
|
|
|
| bool GrCubicEffect::onIsEqual(const GrGeometryProcessor& other) const {
|
|
|