| 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 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 // If the focal point is touching the edge of the circle it will | 350 // If the focal point is touching the edge of the circle it will |
| 351 // cause a degenerate case that must be handled separately | 351 // cause a degenerate case that must be handled separately |
| 352 // kEdgeErrorTol = 5 * kErrorTol was picked after manual testing the | 352 // kEdgeErrorTol = 5 * kErrorTol was picked after manual testing the |
| 353 // stability trade off versus the linear approx used in the Edge Shader | 353 // stability trade off versus the linear approx used in the Edge Shader |
| 354 if (SkScalarAbs(1.f - (*focalX)) < kEdgeErrorTol) { | 354 if (SkScalarAbs(1.f - (*focalX)) < kEdgeErrorTol) { |
| 355 return kEdge_ConicalType; | 355 return kEdge_ConicalType; |
| 356 } | 356 } |
| 357 | 357 |
| 358 // Scale factor 1 / (1 - focalX * focalX) | 358 // Scale factor 1 / (1 - focalX * focalX) |
| 359 SkScalar oneMinusF2 = 1.f - SkScalarMul(*focalX, *focalX); | 359 SkScalar oneMinusF2 = 1.f - SkScalarMul(*focalX, *focalX); |
| 360 SkScalar s = SkScalarDiv(1.f, oneMinusF2); | 360 SkScalar s = SkScalarInvert(oneMinusF2); |
| 361 | 361 |
| 362 | 362 |
| 363 if (s >= 0.f) { | 363 if (s >= 0.f) { |
| 364 conicalType = kInside_ConicalType; | 364 conicalType = kInside_ConicalType; |
| 365 matrix.postScale(s, s * SkScalarSqrt(oneMinusF2)); | 365 matrix.postScale(s, s * SkScalarSqrt(oneMinusF2)); |
| 366 } else { | 366 } else { |
| 367 conicalType = kOutside_ConicalType; | 367 conicalType = kOutside_ConicalType; |
| 368 matrix.postScale(s, s); | 368 matrix.postScale(s, s); |
| 369 } | 369 } |
| 370 | 370 |
| (...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 } | 1108 } |
| 1109 | 1109 |
| 1110 CircleOutside2PtConicalEffect(GrContext* ctx, | 1110 CircleOutside2PtConicalEffect(GrContext* ctx, |
| 1111 const SkTwoPointConicalGradient& shader, | 1111 const SkTwoPointConicalGradient& shader, |
| 1112 const SkMatrix& matrix, | 1112 const SkMatrix& matrix, |
| 1113 SkShader::TileMode tm, | 1113 SkShader::TileMode tm, |
| 1114 const CircleConicalInfo& info) | 1114 const CircleConicalInfo& info) |
| 1115 : INHERITED(ctx, shader, matrix, tm), fInfo(info) { | 1115 : INHERITED(ctx, shader, matrix, tm), fInfo(info) { |
| 1116 this->initClassID<CircleOutside2PtConicalEffect>(); | 1116 this->initClassID<CircleOutside2PtConicalEffect>(); |
| 1117 if (shader.getStartRadius() != shader.getEndRadius()) { | 1117 if (shader.getStartRadius() != shader.getEndRadius()) { |
| 1118 fTLimit = SkScalarDiv(shader.getStartRadius(), | 1118 fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shade
r.getEndRadius()); |
| 1119 (shader.getStartRadius() - shader.getEndRadius
())); | |
| 1120 } else { | 1119 } else { |
| 1121 fTLimit = SK_ScalarMin; | 1120 fTLimit = SK_ScalarMin; |
| 1122 } | 1121 } |
| 1123 | 1122 |
| 1124 fIsFlipped = shader.isFlippedGrad(); | 1123 fIsFlipped = shader.isFlippedGrad(); |
| 1125 } | 1124 } |
| 1126 | 1125 |
| 1127 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 1126 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 1128 | 1127 |
| 1129 const CircleConicalInfo fInfo; | 1128 const CircleConicalInfo fInfo; |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1372 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); | 1371 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); |
| 1373 } else if (type == kEdge_ConicalType) { | 1372 } else if (type == kEdge_ConicalType) { |
| 1374 set_matrix_edge_conical(shader, &matrix); | 1373 set_matrix_edge_conical(shader, &matrix); |
| 1375 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1374 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); |
| 1376 } else { | 1375 } else { |
| 1377 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); | 1376 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); |
| 1378 } | 1377 } |
| 1379 } | 1378 } |
| 1380 | 1379 |
| 1381 #endif | 1380 #endif |
| OLD | NEW |