OLD | NEW |
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 |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 SkString p2; // difference in radii (r1 - r0) | 238 SkString p2; // difference in radii (r1 - r0) |
239 | 239 |
240 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); | 240 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
241 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); | 241 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
242 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(2, &p2); | 242 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(2, &p2); |
243 | 243 |
244 // We interpolate the linear component in coords[1]. | 244 // We interpolate the linear component in coords[1]. |
245 SkASSERT(args.fCoords[0].getType() == args.fCoords[1].getType()); | 245 SkASSERT(args.fCoords[0].getType() == args.fCoords[1].getType()); |
246 const char* coords2D; | 246 const char* coords2D; |
247 SkString bVar; | 247 SkString bVar; |
248 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 248 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
249 if (kVec3f_GrSLType == args.fCoords[0].getType()) { | 249 if (kVec3f_GrSLType == args.fCoords[0].getType()) { |
250 fragBuilder->codeAppendf("\tvec3 interpolants = vec3(%s.xy / %s.z, %s.x
/ %s.z);\n", | 250 fragBuilder->codeAppendf("\tvec3 interpolants = vec3(%s.xy / %s.z, %s.x
/ %s.z);\n", |
251 args.fCoords[0].c_str(), args.fCoords[0].c_str(), | 251 args.fCoords[0].c_str(), args.fCoords[0].c_str(), |
252 args.fCoords[1].c_str(), args.fCoords[1].c_str())
; | 252 args.fCoords[1].c_str(), args.fCoords[1].c_str())
; |
253 coords2D = "interpolants.xy"; | 253 coords2D = "interpolants.xy"; |
254 bVar = "interpolants.z"; | 254 bVar = "interpolants.z"; |
255 } else { | 255 } else { |
256 coords2D = args.fCoords[0].c_str(); | 256 coords2D = args.fCoords[0].c_str(); |
257 bVar.printf("%s.x", args.fCoords[1].c_str()); | 257 bVar.printf("%s.x", args.fCoords[1].c_str()); |
258 } | 258 } |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 kFloat_GrSLType, kDefault_GrSLPr
ecision, | 514 kFloat_GrSLType, kDefault_GrSLPr
ecision, |
515 "Conical2FSParams", 2); | 515 "Conical2FSParams", 2); |
516 SkString tName("t"); | 516 SkString tName("t"); |
517 SkString p0; // focalX | 517 SkString p0; // focalX |
518 SkString p1; // 1 - focalX * focalX | 518 SkString p1; // 1 - focalX * focalX |
519 | 519 |
520 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); | 520 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
521 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); | 521 uniformHandler->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
522 | 522 |
523 // if we have a vec3 from being in perspective, convert it to a vec2 first | 523 // if we have a vec3 from being in perspective, convert it to a vec2 first |
524 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 524 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
525 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); | 525 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); |
526 const char* coords2D = coords2DString.c_str(); | 526 const char* coords2D = coords2DString.c_str(); |
527 | 527 |
528 // t = p.x * focal.x +/- sqrt(p.x^2 + (1 - focal.x^2) * p.y^2) | 528 // t = p.x * focal.x +/- sqrt(p.x^2 + (1 - focal.x^2) * p.y^2) |
529 | 529 |
530 // output will default to transparent black (we simply won't write anything | 530 // output will default to transparent black (we simply won't write anything |
531 // else to it if invalid, instead of discarding or returning prematurely) | 531 // else to it if invalid, instead of discarding or returning prematurely) |
532 fragBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColo
r); | 532 fragBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColo
r); |
533 | 533 |
534 fragBuilder->codeAppendf("\tfloat xs = %s.x * %s.x;\n", coords2D, coords2D); | 534 fragBuilder->codeAppendf("\tfloat xs = %s.x * %s.x;\n", coords2D, coords2D); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 fFocalUni = uniformHandler->addUniform(kFragment_GrShaderFlag, | 723 fFocalUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
724 kFloat_GrSLType, kDefault_GrSLPrecisi
on, | 724 kFloat_GrSLType, kDefault_GrSLPrecisi
on, |
725 "Conical2FSParams"); | 725 "Conical2FSParams"); |
726 SkString tName("t"); | 726 SkString tName("t"); |
727 | 727 |
728 // this is the distance along x-axis from the end center to focal point in | 728 // this is the distance along x-axis from the end center to focal point in |
729 // transformed coordinates | 729 // transformed coordinates |
730 GrGLSLShaderVar focal = uniformHandler->getUniformVariable(fFocalUni); | 730 GrGLSLShaderVar focal = uniformHandler->getUniformVariable(fFocalUni); |
731 | 731 |
732 // if we have a vec3 from being in perspective, convert it to a vec2 first | 732 // if we have a vec3 from being in perspective, convert it to a vec2 first |
733 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 733 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
734 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); | 734 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); |
735 const char* coords2D = coords2DString.c_str(); | 735 const char* coords2D = coords2DString.c_str(); |
736 | 736 |
737 // t = p.x * focalX + length(p) | 737 // t = p.x * focalX + length(p) |
738 fragBuilder->codeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_
str(), | 738 fragBuilder->codeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_
str(), |
739 coords2D, focal.c_str(), coords2D); | 739 coords2D, focal.c_str(), coords2D); |
740 | 740 |
741 this->emitColor(fragBuilder, | 741 this->emitColor(fragBuilder, |
742 uniformHandler, | 742 uniformHandler, |
743 args.fGLSLCaps, | 743 args.fGLSLCaps, |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
980 "Conical2FSParams"); | 980 "Conical2FSParams"); |
981 SkString tName("t"); | 981 SkString tName("t"); |
982 | 982 |
983 GrGLSLShaderVar center = uniformHandler->getUniformVariable(fCenterUni); | 983 GrGLSLShaderVar center = uniformHandler->getUniformVariable(fCenterUni); |
984 // params.x = A | 984 // params.x = A |
985 // params.y = B | 985 // params.y = B |
986 // params.z = C | 986 // params.z = C |
987 GrGLSLShaderVar params = uniformHandler->getUniformVariable(fParamUni); | 987 GrGLSLShaderVar params = uniformHandler->getUniformVariable(fParamUni); |
988 | 988 |
989 // if we have a vec3 from being in perspective, convert it to a vec2 first | 989 // if we have a vec3 from being in perspective, convert it to a vec2 first |
990 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 990 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
991 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); | 991 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); |
992 const char* coords2D = coords2DString.c_str(); | 992 const char* coords2D = coords2DString.c_str(); |
993 | 993 |
994 // p = coords2D | 994 // p = coords2D |
995 // e = center end | 995 // e = center end |
996 // r = radius end | 996 // r = radius end |
997 // A = dot(e, e) - r^2 + 2 * r - 1 | 997 // A = dot(e, e) - r^2 + 2 * r - 1 |
998 // B = (r -1) / A | 998 // B = (r -1) / A |
999 // C = 1 / A | 999 // C = 1 / A |
1000 // d = dot(e, p) + B | 1000 // d = dot(e, p) + B |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1217 "Conical2FSParams"); | 1217 "Conical2FSParams"); |
1218 SkString tName("t"); | 1218 SkString tName("t"); |
1219 | 1219 |
1220 GrGLSLShaderVar center = uniformHandler->getUniformVariable(fCenterUni); | 1220 GrGLSLShaderVar center = uniformHandler->getUniformVariable(fCenterUni); |
1221 // params.x = A | 1221 // params.x = A |
1222 // params.y = B | 1222 // params.y = B |
1223 // params.z = C | 1223 // params.z = C |
1224 GrGLSLShaderVar params = uniformHandler->getUniformVariable(fParamUni); | 1224 GrGLSLShaderVar params = uniformHandler->getUniformVariable(fParamUni); |
1225 | 1225 |
1226 // if we have a vec3 from being in perspective, convert it to a vec2 first | 1226 // if we have a vec3 from being in perspective, convert it to a vec2 first |
1227 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 1227 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
1228 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); | 1228 SkString coords2DString = fragBuilder->ensureFSCoords2D(args.fCoords, 0); |
1229 const char* coords2D = coords2DString.c_str(); | 1229 const char* coords2D = coords2DString.c_str(); |
1230 | 1230 |
1231 // output will default to transparent black (we simply won't write anything | 1231 // output will default to transparent black (we simply won't write anything |
1232 // else to it if invalid, instead of discarding or returning prematurely) | 1232 // else to it if invalid, instead of discarding or returning prematurely) |
1233 fragBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColo
r); | 1233 fragBuilder->codeAppendf("\t%s = vec4(0.0,0.0,0.0,0.0);\n", args.fOutputColo
r); |
1234 | 1234 |
1235 // p = coords2D | 1235 // p = coords2D |
1236 // e = center end | 1236 // e = center end |
1237 // r = radius end | 1237 // r = radius end |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); | 1342 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); |
1343 } else if (type == kEdge_ConicalType) { | 1343 } else if (type == kEdge_ConicalType) { |
1344 set_matrix_edge_conical(shader, &matrix); | 1344 set_matrix_edge_conical(shader, &matrix); |
1345 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1345 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); |
1346 } else { | 1346 } else { |
1347 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); | 1347 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); |
1348 } | 1348 } |
1349 } | 1349 } |
1350 | 1350 |
1351 #endif | 1351 #endif |
OLD | NEW |