Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Side by Side Diff: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp

Issue 1438003003: Move all ShaderBuilder files to GLSL (Closed) Base URL: https://skia.googlesource.com/skia.git@glslProgBuild
Patch Set: nits Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/gradients/SkGradientShader.cpp ('k') | src/gpu/GrDefaultGeoProcFactory.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SkTwoPointConicalGradient_gpu.h" 9 #include "SkTwoPointConicalGradient_gpu.h"
10 10
11 #include "SkTwoPointConicalGradient.h" 11 #include "SkTwoPointConicalGradient.h"
12 12
13 #if SK_SUPPORT_GPU 13 #if SK_SUPPORT_GPU
14 #include "GrPaint.h" 14 #include "GrPaint.h"
15 #include "gl/builders/GrGLProgramBuilder.h" 15 #include "glsl/GrGLSLFragmentShaderBuilder.h"
16 #include "glsl/GrGLSLProgramBuilder.h"
16 #include "glsl/GrGLSLProgramDataManager.h" 17 #include "glsl/GrGLSLProgramDataManager.h"
17 // For brevity 18 // For brevity
18 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; 19 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle;
19 20
20 static const SkScalar kErrorTol = 0.00001f; 21 static const SkScalar kErrorTol = 0.00001f;
21 static const SkScalar kEdgeErrorTol = 5.f * kErrorTol; 22 static const SkScalar kEdgeErrorTol = 5.f * kErrorTol;
22 23
23 /** 24 /**
24 * We have three general cases for 2pt conical gradients. First we always assume that 25 * We have three general cases for 2pt conical gradients. First we always assume that
25 * the start radius <= end radius. Our first case (kInside_) is when the start c ircle 26 * the start radius <= end radius. Our first case (kInside_) is when the start c ircle
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 SkScalar fCachedDiffRadius; 163 SkScalar fCachedDiffRadius;
163 164
164 // @} 165 // @}
165 166
166 private: 167 private:
167 typedef GrGLGradientEffect INHERITED; 168 typedef GrGLGradientEffect INHERITED;
168 169
169 }; 170 };
170 171
171 void Edge2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 172 void Edge2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
172 GrProcessorKeyBuilder* b) const { 173 GrProcessorKeyBuilder* b) const {
173 GLEdge2PtConicalEffect::GenKey(*this, caps, b); 174 GLEdge2PtConicalEffect::GenKey(*this, caps, b);
174 } 175 }
175 176
176 GrGLFragmentProcessor* Edge2PtConicalEffect::onCreateGLInstance() const { 177 GrGLFragmentProcessor* Edge2PtConicalEffect::onCreateGLInstance() const {
177 return new GLEdge2PtConicalEffect(*this); 178 return new GLEdge2PtConicalEffect(*this);
178 } 179 }
179 180
180 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect); 181 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect);
181 182
182 /* 183 /*
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 217
217 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&) 218 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&)
218 : fVSVaryingName(nullptr) 219 : fVSVaryingName(nullptr)
219 , fFSVaryingName(nullptr) 220 , fFSVaryingName(nullptr)
220 , fCachedRadius(-SK_ScalarMax) 221 , fCachedRadius(-SK_ScalarMax)
221 , fCachedDiffRadius(-SK_ScalarMax) {} 222 , fCachedDiffRadius(-SK_ScalarMax) {}
222 223
223 void GLEdge2PtConicalEffect::emitCode(EmitArgs& args) { 224 void GLEdge2PtConicalEffect::emitCode(EmitArgs& args) {
224 const Edge2PtConicalEffect& ge = args.fFp.cast<Edge2PtConicalEffect>(); 225 const Edge2PtConicalEffect& ge = args.fFp.cast<Edge2PtConicalEffect>();
225 this->emitUniforms(args.fBuilder, ge); 226 this->emitUniforms(args.fBuilder, ge);
226 fParamUni = args.fBuilder->addUniformArray(GrGLProgramBuilder::kFragment_Vis ibility, 227 fParamUni = args.fBuilder->addUniformArray(GrGLSLProgramBuilder::kFragment_V isibility,
227 kFloat_GrSLType, kDefault_GrSLPrecision , 228 kFloat_GrSLType, kDefault_GrSLPrecision ,
228 "Conical2FSParams", 3); 229 "Conical2FSParams", 3);
229 230
230 SkString cName("c"); 231 SkString cName("c");
231 SkString tName("t"); 232 SkString tName("t");
232 SkString p0; // start radius 233 SkString p0; // start radius
233 SkString p1; // start radius squared 234 SkString p1; // start radius squared
234 SkString p2; // difference in radii (r1 - r0) 235 SkString p2; // difference in radii (r1 - r0)
235 236
236 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); 237 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0);
237 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); 238 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1);
238 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(2, &p2); 239 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(2, &p2);
239 240
240 // We interpolate the linear component in coords[1]. 241 // We interpolate the linear component in coords[1].
241 SkASSERT(args.fCoords[0].getType() == args.fCoords[1].getType()); 242 SkASSERT(args.fCoords[0].getType() == args.fCoords[1].getType());
242 const char* coords2D; 243 const char* coords2D;
243 SkString bVar; 244 SkString bVar;
244 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 245 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
245 if (kVec3f_GrSLType == args.fCoords[0].getType()) { 246 if (kVec3f_GrSLType == args.fCoords[0].getType()) {
246 fsBuilder->codeAppendf("\tvec3 interpolants = vec3(%s.xy / %s.z, %s.x / %s.z);\n", 247 fsBuilder->codeAppendf("\tvec3 interpolants = vec3(%s.xy / %s.z, %s.x / %s.z);\n",
247 args.fCoords[0].c_str(), args.fCoords[0].c_str(), 248 args.fCoords[0].c_str(), args.fCoords[0].c_str(),
248 args.fCoords[1].c_str(), args.fCoords[1].c_str()) ; 249 args.fCoords[1].c_str(), args.fCoords[1].c_str()) ;
249 coords2D = "interpolants.xy"; 250 coords2D = "interpolants.xy";
250 bVar = "interpolants.z"; 251 bVar = "interpolants.z";
251 } else { 252 } else {
252 coords2D = args.fCoords[0].c_str(); 253 coords2D = args.fCoords[0].c_str();
253 bVar.printf("%s.x", args.fCoords[1].c_str()); 254 bVar.printf("%s.x", args.fCoords[1].c_str());
254 } 255 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 SkScalar fCachedFocal; 440 SkScalar fCachedFocal;
440 441
441 // @} 442 // @}
442 443
443 private: 444 private:
444 typedef GrGLGradientEffect INHERITED; 445 typedef GrGLGradientEffect INHERITED;
445 446
446 }; 447 };
447 448
448 void FocalOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 449 void FocalOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
449 GrProcessorKeyBuilder* b) c onst { 450 GrProcessorKeyBuilder* b) const {
450 GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b); 451 GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b);
451 } 452 }
452 453
453 GrGLFragmentProcessor* FocalOutside2PtConicalEffect::onCreateGLInstance() const { 454 GrGLFragmentProcessor* FocalOutside2PtConicalEffect::onCreateGLInstance() const {
454 return new GLFocalOutside2PtConicalEffect(*this); 455 return new GLFocalOutside2PtConicalEffect(*this);
455 } 456 }
456 457
457 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect); 458 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect);
458 459
459 /* 460 /*
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 : fVSVaryingName(nullptr) 493 : fVSVaryingName(nullptr)
493 , fFSVaryingName(nullptr) 494 , fFSVaryingName(nullptr)
494 , fCachedFocal(SK_ScalarMax) { 495 , fCachedFocal(SK_ScalarMax) {
495 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon icalEffect>(); 496 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon icalEffect>();
496 fIsFlipped = data.isFlipped(); 497 fIsFlipped = data.isFlipped();
497 } 498 }
498 499
499 void GLFocalOutside2PtConicalEffect::emitCode(EmitArgs& args) { 500 void GLFocalOutside2PtConicalEffect::emitCode(EmitArgs& args) {
500 const FocalOutside2PtConicalEffect& ge = args.fFp.cast<FocalOutside2PtConica lEffect>(); 501 const FocalOutside2PtConicalEffect& ge = args.fFp.cast<FocalOutside2PtConica lEffect>();
501 this->emitUniforms(args.fBuilder, ge); 502 this->emitUniforms(args.fBuilder, ge);
502 fParamUni = args.fBuilder->addUniformArray(GrGLProgramBuilder::kFragment_Vis ibility, 503 fParamUni = args.fBuilder->addUniformArray(GrGLSLProgramBuilder::kFragment_V isibility,
503 kFloat_GrSLType, kDefault_GrSLPrecision , 504 kFloat_GrSLType, kDefault_GrSLPrecision ,
504 "Conical2FSParams", 2); 505 "Conical2FSParams", 2);
505 SkString tName("t"); 506 SkString tName("t");
506 SkString p0; // focalX 507 SkString p0; // focalX
507 SkString p1; // 1 - focalX * focalX 508 SkString p1; // 1 - focalX * focalX
508 509
509 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); 510 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0);
510 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); 511 args.fBuilder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1);
511 512
512 // if we have a vec3 from being in perspective, convert it to a vec2 first 513 // if we have a vec3 from being in perspective, convert it to a vec2 first
513 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 514 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
514 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 515 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
515 const char* coords2D = coords2DString.c_str(); 516 const char* coords2D = coords2DString.c_str();
516 517
517 // t = p.x * focal.x +/- sqrt(p.x^2 + (1 - focal.x^2) * p.y^2) 518 // t = p.x * focal.x +/- sqrt(p.x^2 + (1 - focal.x^2) * p.y^2)
518 519
519 // output will default to transparent black (we simply won't write anything 520 // output will default to transparent black (we simply won't write anything
520 // else to it if invalid, instead of discarding or returning prematurely) 521 // else to it if invalid, instead of discarding or returning prematurely)
521 fsBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColor) ; 522 fsBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColor) ;
522 523
523 fsBuilder->codeAppendf("\tfloat xs = %s.x * %s.x;\n", coords2D, coords2D); 524 fsBuilder->codeAppendf("\tfloat xs = %s.x * %s.x;\n", coords2D, coords2D);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 SkScalar fCachedFocal; 644 SkScalar fCachedFocal;
644 645
645 // @} 646 // @}
646 647
647 private: 648 private:
648 typedef GrGLGradientEffect INHERITED; 649 typedef GrGLGradientEffect INHERITED;
649 650
650 }; 651 };
651 652
652 void FocalInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 653 void FocalInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
653 GrProcessorKeyBuilder* b) const { 654 GrProcessorKeyBuilder* b) const {
654 GLFocalInside2PtConicalEffect::GenKey(*this, caps, b); 655 GLFocalInside2PtConicalEffect::GenKey(*this, caps, b);
655 } 656 }
656 657
657 GrGLFragmentProcessor* FocalInside2PtConicalEffect::onCreateGLInstance() const { 658 GrGLFragmentProcessor* FocalInside2PtConicalEffect::onCreateGLInstance() const {
658 return new GLFocalInside2PtConicalEffect(*this); 659 return new GLFocalInside2PtConicalEffect(*this);
659 } 660 }
660 661
661 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect); 662 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect);
662 663
663 /* 664 /*
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 } 696 }
696 697
697 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&) 698 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&)
698 : fVSVaryingName(nullptr) 699 : fVSVaryingName(nullptr)
699 , fFSVaryingName(nullptr) 700 , fFSVaryingName(nullptr)
700 , fCachedFocal(SK_ScalarMax) {} 701 , fCachedFocal(SK_ScalarMax) {}
701 702
702 void GLFocalInside2PtConicalEffect::emitCode(EmitArgs& args) { 703 void GLFocalInside2PtConicalEffect::emitCode(EmitArgs& args) {
703 const FocalInside2PtConicalEffect& ge = args.fFp.cast<FocalInside2PtConicalE ffect>(); 704 const FocalInside2PtConicalEffect& ge = args.fFp.cast<FocalInside2PtConicalE ffect>();
704 this->emitUniforms(args.fBuilder, ge); 705 this->emitUniforms(args.fBuilder, ge);
705 fFocalUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibili ty, 706 fFocalUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibi lity,
706 kFloat_GrSLType, kDefault_GrSLPrecision, 707 kFloat_GrSLType, kDefault_GrSLPrecisio n,
707 "Conical2FSParams"); 708 "Conical2FSParams");
708 SkString tName("t"); 709 SkString tName("t");
709 710
710 // this is the distance along x-axis from the end center to focal point in 711 // this is the distance along x-axis from the end center to focal point in
711 // transformed coordinates 712 // transformed coordinates
712 GrGLSLShaderVar focal = args.fBuilder->getUniformVariable(fFocalUni); 713 GrGLSLShaderVar focal = args.fBuilder->getUniformVariable(fFocalUni);
713 714
714 // if we have a vec3 from being in perspective, convert it to a vec2 first 715 // if we have a vec3 from being in perspective, convert it to a vec2 first
715 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 716 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
716 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 717 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
717 const char* coords2D = coords2DString.c_str(); 718 const char* coords2D = coords2DString.c_str();
718 719
719 // t = p.x * focalX + length(p) 720 // t = p.x * focalX + length(p)
720 fsBuilder->codeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_st r(), 721 fsBuilder->codeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_st r(),
721 coords2D, focal.c_str(), coords2D); 722 coords2D, focal.c_str(), coords2D);
722 723
723 this->emitColor(args.fBuilder, ge, tName.c_str(), args.fOutputColor, args.fI nputColor, 724 this->emitColor(args.fBuilder, ge, tName.c_str(), args.fOutputColor, args.fI nputColor,
724 args.fSamplers); 725 args.fSamplers);
725 } 726 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 SkScalar fCachedC; 886 SkScalar fCachedC;
886 887
887 // @} 888 // @}
888 889
889 private: 890 private:
890 typedef GrGLGradientEffect INHERITED; 891 typedef GrGLGradientEffect INHERITED;
891 892
892 }; 893 };
893 894
894 void CircleInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 895 void CircleInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
895 GrProcessorKeyBuilder* b) c onst { 896 GrProcessorKeyBuilder* b) const {
896 GLCircleInside2PtConicalEffect::GenKey(*this, caps, b); 897 GLCircleInside2PtConicalEffect::GenKey(*this, caps, b);
897 } 898 }
898 899
899 GrGLFragmentProcessor* CircleInside2PtConicalEffect::onCreateGLInstance() const { 900 GrGLFragmentProcessor* CircleInside2PtConicalEffect::onCreateGLInstance() const {
900 return new GLCircleInside2PtConicalEffect(*this); 901 return new GLCircleInside2PtConicalEffect(*this);
901 } 902 }
902 903
903 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect); 904 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect);
904 905
905 /* 906 /*
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 , fFSVaryingName(nullptr) 941 , fFSVaryingName(nullptr)
941 , fCachedCenterX(SK_ScalarMax) 942 , fCachedCenterX(SK_ScalarMax)
942 , fCachedCenterY(SK_ScalarMax) 943 , fCachedCenterY(SK_ScalarMax)
943 , fCachedA(SK_ScalarMax) 944 , fCachedA(SK_ScalarMax)
944 , fCachedB(SK_ScalarMax) 945 , fCachedB(SK_ScalarMax)
945 , fCachedC(SK_ScalarMax) {} 946 , fCachedC(SK_ScalarMax) {}
946 947
947 void GLCircleInside2PtConicalEffect::emitCode(EmitArgs& args) { 948 void GLCircleInside2PtConicalEffect::emitCode(EmitArgs& args) {
948 const CircleInside2PtConicalEffect& ge = args.fFp.cast<CircleInside2PtConica lEffect>(); 949 const CircleInside2PtConicalEffect& ge = args.fFp.cast<CircleInside2PtConica lEffect>();
949 this->emitUniforms(args.fBuilder, ge); 950 this->emitUniforms(args.fBuilder, ge);
950 fCenterUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibil ity, 951 fCenterUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visib ility,
951 kVec2f_GrSLType, kDefault_GrSLPrecision, 952 kVec2f_GrSLType, kDefault_GrSLPrecisi on,
952 "Conical2FSCenter"); 953 "Conical2FSCenter");
953 fParamUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibili ty, 954 fParamUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibi lity,
954 kVec3f_GrSLType, kDefault_GrSLPrecision, 955 kVec3f_GrSLType, kDefault_GrSLPrecisio n,
955 "Conical2FSParams"); 956 "Conical2FSParams");
956 SkString tName("t"); 957 SkString tName("t");
957 958
958 GrGLSLShaderVar center = args.fBuilder->getUniformVariable(fCenterUni); 959 GrGLSLShaderVar center = args.fBuilder->getUniformVariable(fCenterUni);
959 // params.x = A 960 // params.x = A
960 // params.y = B 961 // params.y = B
961 // params.z = C 962 // params.z = C
962 GrGLSLShaderVar params = args.fBuilder->getUniformVariable(fParamUni); 963 GrGLSLShaderVar params = args.fBuilder->getUniformVariable(fParamUni);
963 964
964 // if we have a vec3 from being in perspective, convert it to a vec2 first 965 // if we have a vec3 from being in perspective, convert it to a vec2 first
965 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 966 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
966 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 967 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
967 const char* coords2D = coords2DString.c_str(); 968 const char* coords2D = coords2DString.c_str();
968 969
969 // p = coords2D 970 // p = coords2D
970 // e = center end 971 // e = center end
971 // r = radius end 972 // r = radius end
972 // A = dot(e, e) - r^2 + 2 * r - 1 973 // A = dot(e, e) - r^2 + 2 * r - 1
973 // B = (r -1) / A 974 // B = (r -1) / A
974 // C = 1 / A 975 // C = 1 / A
975 // d = dot(e, p) + B 976 // d = dot(e, p) + B
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1110 SkScalar fCachedTLimit; 1111 SkScalar fCachedTLimit;
1111 1112
1112 // @} 1113 // @}
1113 1114
1114 private: 1115 private:
1115 typedef GrGLGradientEffect INHERITED; 1116 typedef GrGLGradientEffect INHERITED;
1116 1117
1117 }; 1118 };
1118 1119
1119 void CircleOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 1120 void CircleOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
1120 GrProcessorKeyBuilder* b) const { 1121 GrProcessorKeyBuilder* b ) const {
1121 GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b); 1122 GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b);
1122 } 1123 }
1123 1124
1124 GrGLFragmentProcessor* CircleOutside2PtConicalEffect::onCreateGLInstance() const { 1125 GrGLFragmentProcessor* CircleOutside2PtConicalEffect::onCreateGLInstance() const {
1125 return new GLCircleOutside2PtConicalEffect(*this); 1126 return new GLCircleOutside2PtConicalEffect(*this);
1126 } 1127 }
1127 1128
1128 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect); 1129 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect);
1129 1130
1130 /* 1131 /*
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 , fCachedB(SK_ScalarMax) 1171 , fCachedB(SK_ScalarMax)
1171 , fCachedC(SK_ScalarMax) 1172 , fCachedC(SK_ScalarMax)
1172 , fCachedTLimit(SK_ScalarMax) { 1173 , fCachedTLimit(SK_ScalarMax) {
1173 const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtC onicalEffect>(); 1174 const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtC onicalEffect>();
1174 fIsFlipped = data.isFlipped(); 1175 fIsFlipped = data.isFlipped();
1175 } 1176 }
1176 1177
1177 void GLCircleOutside2PtConicalEffect::emitCode(EmitArgs& args) { 1178 void GLCircleOutside2PtConicalEffect::emitCode(EmitArgs& args) {
1178 const CircleOutside2PtConicalEffect& ge = args.fFp.cast<CircleOutside2PtConi calEffect>(); 1179 const CircleOutside2PtConicalEffect& ge = args.fFp.cast<CircleOutside2PtConi calEffect>();
1179 this->emitUniforms(args.fBuilder, ge); 1180 this->emitUniforms(args.fBuilder, ge);
1180 fCenterUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibil ity, 1181 fCenterUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visib ility,
1181 kVec2f_GrSLType, kDefault_GrSLPrecision, 1182 kVec2f_GrSLType, kDefault_GrSLPrecisi on,
1182 "Conical2FSCenter"); 1183 "Conical2FSCenter");
1183 fParamUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibili ty, 1184 fParamUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibi lity,
1184 kVec4f_GrSLType, kDefault_GrSLPrecision, 1185 kVec4f_GrSLType, kDefault_GrSLPrecisio n,
1185 "Conical2FSParams"); 1186 "Conical2FSParams");
1186 SkString tName("t"); 1187 SkString tName("t");
1187 1188
1188 GrGLSLShaderVar center = args.fBuilder->getUniformVariable(fCenterUni); 1189 GrGLSLShaderVar center = args.fBuilder->getUniformVariable(fCenterUni);
1189 // params.x = A 1190 // params.x = A
1190 // params.y = B 1191 // params.y = B
1191 // params.z = C 1192 // params.z = C
1192 GrGLSLShaderVar params = args.fBuilder->getUniformVariable(fParamUni); 1193 GrGLSLShaderVar params = args.fBuilder->getUniformVariable(fParamUni);
1193 1194
1194 // if we have a vec3 from being in perspective, convert it to a vec2 first 1195 // if we have a vec3 from being in perspective, convert it to a vec2 first
1195 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); 1196 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ;
1196 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 1197 SkString coords2DString = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
1197 const char* coords2D = coords2DString.c_str(); 1198 const char* coords2D = coords2DString.c_str();
1198 1199
1199 // output will default to transparent black (we simply won't write anything 1200 // output will default to transparent black (we simply won't write anything
1200 // else to it if invalid, instead of discarding or returning prematurely) 1201 // else to it if invalid, instead of discarding or returning prematurely)
1201 fsBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColor) ; 1202 fsBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColor) ;
1202 1203
1203 // p = coords2D 1204 // p = coords2D
1204 // e = center end 1205 // e = center end
1205 // r = radius end 1206 // r = radius end
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o); 1304 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o);
1304 } else if (type == kEdge_ConicalType) { 1305 } else if (type == kEdge_ConicalType) {
1305 set_matrix_edge_conical(shader, &matrix); 1306 set_matrix_edge_conical(shader, &matrix);
1306 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); 1307 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm);
1307 } else { 1308 } else {
1308 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo); 1309 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo);
1309 } 1310 }
1310 } 1311 }
1311 1312
1312 #endif 1313 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkGradientShader.cpp ('k') | src/gpu/GrDefaultGeoProcFactory.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698