Index: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
index 31ceda4f2aed45777efb90dd994ff5499a6f81cb..ac32e72c536e59772dc578f7f317194ce6b6c454 100644 |
--- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
+++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
@@ -11,10 +11,12 @@ |
#include "SkTwoPointConicalGradient.h" |
#if SK_SUPPORT_GPU |
+#include "GrCoordTransform.h" |
+#include "GrInvariantOutput.h" |
#include "GrPaint.h" |
#include "glsl/GrGLSLFragmentShaderBuilder.h" |
-#include "glsl/GrGLSLProgramBuilder.h" |
#include "glsl/GrGLSLProgramDataManager.h" |
+#include "glsl/GrGLSLUniformHandler.h" |
// For brevity |
typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
@@ -223,10 +225,11 @@ GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&) |
void GLEdge2PtConicalEffect::emitCode(EmitArgs& args) { |
const Edge2PtConicalEffect& ge = args.fFp.cast<Edge2PtConicalEffect>(); |
- this->emitUniforms(args.fBuilder, ge); |
- fParamUni = args.fBuilder->addUniformArray(GrGLSLProgramBuilder::kFragment_Visibility, |
- kFloat_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSParams", 3); |
+ GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
+ this->emitUniforms(uniformHandler, ge); |
+ fParamUni = uniformHandler->addUniformArray(GrGLSLUniformHandler::kFragment_Visibility, |
+ kFloat_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSParams", 3); |
SkString cName("c"); |
SkString tName("t"); |
@@ -234,9 +237,9 @@ void GLEdge2PtConicalEffect::emitCode(EmitArgs& args) { |
SkString p1; // start radius squared |
SkString p2; // difference in radii (r1 - r0) |
- args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
- args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
- args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(2, &p2); |
+ uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
+ uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
+ uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(2, &p2); |
// We interpolate the linear component in coords[1]. |
SkASSERT(args.fCoords[0].getType() == args.fCoords[1].getType()); |
@@ -270,8 +273,8 @@ void GLEdge2PtConicalEffect::emitCode(EmitArgs& args) { |
fragBuilder->codeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(), |
p2.c_str(), p0.c_str()); |
fragBuilder->codeAppend("\t"); |
- this->emitColor(args.fBuilder, |
- fragBuilder, |
+ this->emitColor(fragBuilder, |
+ uniformHandler, |
args.fGLSLCaps, |
ge, |
tName.c_str(), |
@@ -505,16 +508,17 @@ GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor |
void GLFocalOutside2PtConicalEffect::emitCode(EmitArgs& args) { |
const FocalOutside2PtConicalEffect& ge = args.fFp.cast<FocalOutside2PtConicalEffect>(); |
- this->emitUniforms(args.fBuilder, ge); |
- fParamUni = args.fBuilder->addUniformArray(GrGLSLProgramBuilder::kFragment_Visibility, |
- kFloat_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSParams", 2); |
+ GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
+ this->emitUniforms(uniformHandler, ge); |
+ fParamUni = uniformHandler->addUniformArray(GrGLSLUniformHandler::kFragment_Visibility, |
+ kFloat_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSParams", 2); |
SkString tName("t"); |
SkString p0; // focalX |
SkString p1; // 1 - focalX * focalX |
- args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
- args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
+ uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
+ uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
// if we have a vec3 from being in perspective, convert it to a vec2 first |
GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
@@ -543,8 +547,8 @@ void GLFocalOutside2PtConicalEffect::emitCode(EmitArgs& args) { |
fragBuilder->codeAppendf("\tif (%s >= 0.0 && d >= 0.0) {\n", tName.c_str()); |
fragBuilder->codeAppend("\t\t"); |
- this->emitColor(args.fBuilder, |
- fragBuilder, |
+ this->emitColor(fragBuilder, |
+ uniformHandler, |
args.fGLSLCaps, |
ge, |
tName.c_str(), |
@@ -714,15 +718,16 @@ GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&) |
void GLFocalInside2PtConicalEffect::emitCode(EmitArgs& args) { |
const FocalInside2PtConicalEffect& ge = args.fFp.cast<FocalInside2PtConicalEffect>(); |
- this->emitUniforms(args.fBuilder, ge); |
- fFocalUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, |
- kFloat_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSParams"); |
+ GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
+ this->emitUniforms(uniformHandler, ge); |
+ fFocalUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility, |
+ kFloat_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSParams"); |
SkString tName("t"); |
// this is the distance along x-axis from the end center to focal point in |
// transformed coordinates |
- GrGLSLShaderVar focal = args.fBuilder->getUniformVariable(fFocalUni); |
+ GrGLSLShaderVar focal = uniformHandler->getUniformVariable(fFocalUni); |
// if we have a vec3 from being in perspective, convert it to a vec2 first |
GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
@@ -731,10 +736,10 @@ void GLFocalInside2PtConicalEffect::emitCode(EmitArgs& args) { |
// t = p.x * focalX + length(p) |
fragBuilder->codeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_str(), |
- coords2D, focal.c_str(), coords2D); |
+ coords2D, focal.c_str(), coords2D); |
- this->emitColor(args.fBuilder, |
- fragBuilder, |
+ this->emitColor(fragBuilder, |
+ uniformHandler, |
args.fGLSLCaps, |
ge, |
tName.c_str(), |
@@ -965,20 +970,21 @@ GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor |
void GLCircleInside2PtConicalEffect::emitCode(EmitArgs& args) { |
const CircleInside2PtConicalEffect& ge = args.fFp.cast<CircleInside2PtConicalEffect>(); |
- this->emitUniforms(args.fBuilder, ge); |
- fCenterUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, |
- kVec2f_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSCenter"); |
- fParamUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, |
- kVec3f_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSParams"); |
+ GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
+ this->emitUniforms(uniformHandler, ge); |
+ fCenterUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility, |
+ kVec2f_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSCenter"); |
+ fParamUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility, |
+ kVec3f_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSParams"); |
SkString tName("t"); |
- GrGLSLShaderVar center = args.fBuilder->getUniformVariable(fCenterUni); |
+ GrGLSLShaderVar center = uniformHandler->getUniformVariable(fCenterUni); |
// params.x = A |
// params.y = B |
// params.z = C |
- GrGLSLShaderVar params = args.fBuilder->getUniformVariable(fParamUni); |
+ GrGLSLShaderVar params = uniformHandler->getUniformVariable(fParamUni); |
// if we have a vec3 from being in perspective, convert it to a vec2 first |
GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
@@ -999,8 +1005,8 @@ void GLCircleInside2PtConicalEffect::emitCode(EmitArgs& args) { |
fragBuilder->codeAppendf("\tfloat %s = d + sqrt(d * d - %s.x * pDotp + %s.z);\n", |
tName.c_str(), params.c_str(), params.c_str()); |
- this->emitColor(args.fBuilder, |
- fragBuilder, |
+ this->emitColor(fragBuilder, |
+ uniformHandler, |
args.fGLSLCaps, |
ge, |
tName.c_str(), |
@@ -1201,20 +1207,21 @@ GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcess |
void GLCircleOutside2PtConicalEffect::emitCode(EmitArgs& args) { |
const CircleOutside2PtConicalEffect& ge = args.fFp.cast<CircleOutside2PtConicalEffect>(); |
- this->emitUniforms(args.fBuilder, ge); |
- fCenterUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, |
- kVec2f_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSCenter"); |
- fParamUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility, |
- kVec4f_GrSLType, kDefault_GrSLPrecision, |
- "Conical2FSParams"); |
+ GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
+ this->emitUniforms(uniformHandler, ge); |
+ fCenterUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility, |
+ kVec2f_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSCenter"); |
+ fParamUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility, |
+ kVec4f_GrSLType, kDefault_GrSLPrecision, |
+ "Conical2FSParams"); |
SkString tName("t"); |
- GrGLSLShaderVar center = args.fBuilder->getUniformVariable(fCenterUni); |
+ GrGLSLShaderVar center = uniformHandler->getUniformVariable(fCenterUni); |
// params.x = A |
// params.y = B |
// params.z = C |
- GrGLSLShaderVar params = args.fBuilder->getUniformVariable(fParamUni); |
+ GrGLSLShaderVar params = uniformHandler->getUniformVariable(fParamUni); |
// if we have a vec3 from being in perspective, convert it to a vec2 first |
GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
@@ -1248,10 +1255,11 @@ void GLCircleOutside2PtConicalEffect::emitCode(EmitArgs& args) { |
fragBuilder->codeAppendf("\tfloat %s = d - sqrt(deter);\n", tName.c_str()); |
} |
- fragBuilder->codeAppendf("\tif (%s >= %s.w && deter >= 0.0) {\n", tName.c_str(), params.c_str()); |
+ fragBuilder->codeAppendf("\tif (%s >= %s.w && deter >= 0.0) {\n", |
+ tName.c_str(), params.c_str()); |
fragBuilder->codeAppend("\t\t"); |
- this->emitColor(args.fBuilder, |
- fragBuilder, |
+ this->emitColor(fragBuilder, |
+ uniformHandler, |
args.fGLSLCaps, |
ge, |
tName.c_str(), |