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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 SkColor colors[kMaxRandomGradientColors]; | 192 SkColor colors[kMaxRandomGradientColors]; |
193 SkScalar stopsArray[kMaxRandomGradientColors]; | 193 SkScalar stopsArray[kMaxRandomGradientColors]; |
194 SkScalar* stops = stopsArray; | 194 SkScalar* stops = stopsArray; |
195 SkShader::TileMode tm; | 195 SkShader::TileMode tm; |
196 int colorCount = RandomGradientParams(random, colors, &stops, &tm); | 196 int colorCount = RandomGradientParams(random, colors, &stops, &tm); |
197 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 197 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
198 center
2, radius2, | 198 center
2, radius2, |
199 colors
, stops, colorCount, | 199 colors
, stops, colorCount, |
200 tm)); | 200 tm)); |
201 SkPaint paint; | 201 SkPaint paint; |
202 return shader->asNewEffect(context, paint); | 202 return shader->asNewEffect(context, paint, NULL); |
203 } | 203 } |
204 | 204 |
205 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& fac
tory, | 205 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& fac
tory, |
206 const GrDrawEffect& drawEffect) | 206 const GrDrawEffect& drawEffect) |
207 : INHERITED(factory) | 207 : INHERITED(factory) |
208 , fVSVaryingName(NULL) | 208 , fVSVaryingName(NULL) |
209 , fFSVaryingName(NULL) | 209 , fFSVaryingName(NULL) |
210 , fCachedRadius(-SK_ScalarMax) | 210 , fCachedRadius(-SK_ScalarMax) |
211 , fCachedDiffRadius(-SK_ScalarMax) {} | 211 , fCachedDiffRadius(-SK_ScalarMax) {} |
212 | 212 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 SkColor colors[kMaxRandomGradientColors]; | 463 SkColor colors[kMaxRandomGradientColors]; |
464 SkScalar stopsArray[kMaxRandomGradientColors]; | 464 SkScalar stopsArray[kMaxRandomGradientColors]; |
465 SkScalar* stops = stopsArray; | 465 SkScalar* stops = stopsArray; |
466 SkShader::TileMode tm; | 466 SkShader::TileMode tm; |
467 int colorCount = RandomGradientParams(random, colors, &stops, &tm); | 467 int colorCount = RandomGradientParams(random, colors, &stops, &tm); |
468 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 468 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
469 center
2, radius2, | 469 center
2, radius2, |
470 colors
, stops, colorCount, | 470 colors
, stops, colorCount, |
471 tm)); | 471 tm)); |
472 SkPaint paint; | 472 SkPaint paint; |
473 return shader->asNewEffect(context, paint); | 473 return shader->asNewEffect(context, paint, NULL); |
474 } | 474 } |
475 | 475 |
476 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendEf
fectFactory& factory, | 476 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendEf
fectFactory& factory, |
477 const GrDrawEffec
t& drawEffect) | 477 const GrDrawEffec
t& drawEffect) |
478 : INHERITED(factory) | 478 : INHERITED(factory) |
479 , fVSVaryingName(NULL) | 479 , fVSVaryingName(NULL) |
480 , fFSVaryingName(NULL) | 480 , fFSVaryingName(NULL) |
481 , fCachedFocal(SK_ScalarMax) { | 481 , fCachedFocal(SK_ScalarMax) { |
482 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid
e2PtConicalEffect>(); | 482 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid
e2PtConicalEffect>(); |
483 fIsFlipped = data.isFlipped(); | 483 fIsFlipped = data.isFlipped(); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 SkColor colors[kMaxRandomGradientColors]; | 672 SkColor colors[kMaxRandomGradientColors]; |
673 SkScalar stopsArray[kMaxRandomGradientColors]; | 673 SkScalar stopsArray[kMaxRandomGradientColors]; |
674 SkScalar* stops = stopsArray; | 674 SkScalar* stops = stopsArray; |
675 SkShader::TileMode tm; | 675 SkShader::TileMode tm; |
676 int colorCount = RandomGradientParams(random, colors, &stops, &tm); | 676 int colorCount = RandomGradientParams(random, colors, &stops, &tm); |
677 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 677 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
678 center
2, radius2, | 678 center
2, radius2, |
679 colors
, stops, colorCount, | 679 colors
, stops, colorCount, |
680 tm)); | 680 tm)); |
681 SkPaint paint; | 681 SkPaint paint; |
682 return shader->asNewEffect(context, paint); | 682 return shader->asNewEffect(context, paint, NULL); |
683 } | 683 } |
684 | 684 |
685 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffe
ctFactory& factory, | 685 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffe
ctFactory& factory, |
686 const GrDrawEffect&
drawEffect) | 686 const GrDrawEffect&
drawEffect) |
687 : INHERITED(factory) | 687 : INHERITED(factory) |
688 , fVSVaryingName(NULL) | 688 , fVSVaryingName(NULL) |
689 , fFSVaryingName(NULL) | 689 , fFSVaryingName(NULL) |
690 , fCachedFocal(SK_ScalarMax) {} | 690 , fCachedFocal(SK_ScalarMax) {} |
691 | 691 |
692 void GLFocalInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, | 692 void GLFocalInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 SkColor colors[kMaxRandomGradientColors]; | 913 SkColor colors[kMaxRandomGradientColors]; |
914 SkScalar stopsArray[kMaxRandomGradientColors]; | 914 SkScalar stopsArray[kMaxRandomGradientColors]; |
915 SkScalar* stops = stopsArray; | 915 SkScalar* stops = stopsArray; |
916 SkShader::TileMode tm; | 916 SkShader::TileMode tm; |
917 int colorCount = RandomGradientParams(random, colors, &stops, &tm); | 917 int colorCount = RandomGradientParams(random, colors, &stops, &tm); |
918 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 918 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
919 center
2, radius2, | 919 center
2, radius2, |
920 colors
, stops, colorCount, | 920 colors
, stops, colorCount, |
921 tm)); | 921 tm)); |
922 SkPaint paint; | 922 SkPaint paint; |
923 return shader->asNewEffect(context, paint); | 923 return shader->asNewEffect(context, paint, NULL); |
924 } | 924 } |
925 | 925 |
926 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendEf
fectFactory& factory, | 926 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendEf
fectFactory& factory, |
927 const GrDrawEffec
t& drawEffect) | 927 const GrDrawEffec
t& drawEffect) |
928 : INHERITED(factory) | 928 : INHERITED(factory) |
929 , fVSVaryingName(NULL) | 929 , fVSVaryingName(NULL) |
930 , fFSVaryingName(NULL) | 930 , fFSVaryingName(NULL) |
931 , fCachedCenterX(SK_ScalarMax) | 931 , fCachedCenterX(SK_ScalarMax) |
932 , fCachedCenterY(SK_ScalarMax) | 932 , fCachedCenterY(SK_ScalarMax) |
933 , fCachedA(SK_ScalarMax) | 933 , fCachedA(SK_ScalarMax) |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 SkColor colors[kMaxRandomGradientColors]; | 1141 SkColor colors[kMaxRandomGradientColors]; |
1142 SkScalar stopsArray[kMaxRandomGradientColors]; | 1142 SkScalar stopsArray[kMaxRandomGradientColors]; |
1143 SkScalar* stops = stopsArray; | 1143 SkScalar* stops = stopsArray; |
1144 SkShader::TileMode tm; | 1144 SkShader::TileMode tm; |
1145 int colorCount = RandomGradientParams(random, colors, &stops, &tm); | 1145 int colorCount = RandomGradientParams(random, colors, &stops, &tm); |
1146 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 1146 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
1147 center
2, radius2, | 1147 center
2, radius2, |
1148 colors
, stops, colorCount, | 1148 colors
, stops, colorCount, |
1149 tm)); | 1149 tm)); |
1150 SkPaint paint; | 1150 SkPaint paint; |
1151 return shader->asNewEffect(context, paint); | 1151 return shader->asNewEffect(context, paint, NULL); |
1152 } | 1152 } |
1153 | 1153 |
1154 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackend
EffectFactory& factory, | 1154 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackend
EffectFactory& factory, |
1155 const GrDrawEff
ect& drawEffect) | 1155 const GrDrawEff
ect& drawEffect) |
1156 : INHERITED(factory) | 1156 : INHERITED(factory) |
1157 , fVSVaryingName(NULL) | 1157 , fVSVaryingName(NULL) |
1158 , fFSVaryingName(NULL) | 1158 , fFSVaryingName(NULL) |
1159 , fCachedCenterX(SK_ScalarMax) | 1159 , fCachedCenterX(SK_ScalarMax) |
1160 , fCachedCenterY(SK_ScalarMax) | 1160 , fCachedCenterY(SK_ScalarMax) |
1161 , fCachedA(SK_ScalarMax) | 1161 , fCachedA(SK_ScalarMax) |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 if (drawEffect.castEffect<CircleOutside2PtConicalEffect>().isFlipped()) { | 1260 if (drawEffect.castEffect<CircleOutside2PtConicalEffect>().isFlipped()) { |
1261 key |= kIsFlipped; | 1261 key |= kIsFlipped; |
1262 } | 1262 } |
1263 return key; | 1263 return key; |
1264 } | 1264 } |
1265 | 1265 |
1266 ////////////////////////////////////////////////////////////////////////////// | 1266 ////////////////////////////////////////////////////////////////////////////// |
1267 | 1267 |
1268 GrEffectRef* Gr2PtConicalGradientEffect::Create(GrContext* ctx, | 1268 GrEffectRef* Gr2PtConicalGradientEffect::Create(GrContext* ctx, |
1269 const SkTwoPointConicalGradient&
shader, | 1269 const SkTwoPointConicalGradient&
shader, |
1270 SkShader::TileMode tm) { | 1270 SkShader::TileMode tm, |
| 1271 const SkMatrix* localMatrix) { |
1271 SkMatrix matrix; | 1272 SkMatrix matrix; |
1272 if (!shader.getLocalMatrix().invert(&matrix)) { | 1273 if (!shader.getLocalMatrix().invert(&matrix)) { |
1273 return NULL; | 1274 return NULL; |
1274 } | 1275 } |
| 1276 if (localMatrix) { |
| 1277 SkMatrix inv; |
| 1278 if (!localMatrix->invert(&inv)) { |
| 1279 return NULL; |
| 1280 } |
| 1281 matrix.postConcat(inv); |
| 1282 } |
1275 | 1283 |
1276 if (shader.getStartRadius() < kErrorTol) { | 1284 if (shader.getStartRadius() < kErrorTol) { |
1277 SkScalar focalX; | 1285 SkScalar focalX; |
1278 ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); | 1286 ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); |
1279 if (type == kInside_ConicalType) { | 1287 if (type == kInside_ConicalType) { |
1280 return FocalInside2PtConicalEffect::Create(ctx, shader, matrix, tm,
focalX); | 1288 return FocalInside2PtConicalEffect::Create(ctx, shader, matrix, tm,
focalX); |
1281 } else if(type == kEdge_ConicalType) { | 1289 } else if(type == kEdge_ConicalType) { |
1282 set_matrix_edge_conical(shader, &matrix); | 1290 set_matrix_edge_conical(shader, &matrix); |
1283 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1291 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); |
1284 } else { | 1292 } else { |
1285 return FocalOutside2PtConicalEffect::Create(ctx, shader, matrix, tm,
focalX); | 1293 return FocalOutside2PtConicalEffect::Create(ctx, shader, matrix, tm,
focalX); |
1286 } | 1294 } |
1287 } | 1295 } |
1288 | 1296 |
1289 CircleConicalInfo info; | 1297 CircleConicalInfo info; |
1290 ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); | 1298 ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); |
1291 | 1299 |
1292 if (type == kInside_ConicalType) { | 1300 if (type == kInside_ConicalType) { |
1293 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); | 1301 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); |
1294 } else if (type == kEdge_ConicalType) { | 1302 } else if (type == kEdge_ConicalType) { |
1295 set_matrix_edge_conical(shader, &matrix); | 1303 set_matrix_edge_conical(shader, &matrix); |
1296 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1304 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); |
1297 } else { | 1305 } else { |
1298 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); | 1306 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); |
1299 } | 1307 } |
1300 } | 1308 } |
1301 | 1309 |
1302 #endif | 1310 #endif |
OLD | NEW |