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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 typedef GrGradientEffect INHERITED; | 132 typedef GrGradientEffect INHERITED; |
133 }; | 133 }; |
134 | 134 |
135 class GLEdge2PtConicalEffect : public GrGLGradientEffect { | 135 class GLEdge2PtConicalEffect : public GrGLGradientEffect { |
136 public: | 136 public: |
137 GLEdge2PtConicalEffect(const GrBackendEffectFactory& factory, const GrDrawEf
fect&); | 137 GLEdge2PtConicalEffect(const GrBackendEffectFactory& factory, const GrDrawEf
fect&); |
138 virtual ~GLEdge2PtConicalEffect() { } | 138 virtual ~GLEdge2PtConicalEffect() { } |
139 | 139 |
140 virtual void emitCode(GrGLShaderBuilder*, | 140 virtual void emitCode(GrGLShaderBuilder*, |
141 const GrDrawEffect&, | 141 const GrDrawEffect&, |
142 EffectKey, | 142 const GrEffectKey&, |
143 const char* outputColor, | 143 const char* outputColor, |
144 const char* inputColor, | 144 const char* inputColor, |
145 const TransformedCoordsArray&, | 145 const TransformedCoordsArray&, |
146 const TextureSamplerArray&) SK_OVERRIDE; | 146 const TextureSamplerArray&) SK_OVERRIDE; |
147 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 147 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
148 | 148 |
149 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); | 149 static void GenKey(const GrDrawEffect&, const GrGLCaps& caps, GrEffectKeyBui
lder* b); |
150 | 150 |
151 protected: | 151 protected: |
152 UniformHandle fParamUni; | 152 UniformHandle fParamUni; |
153 | 153 |
154 const char* fVSVaryingName; | 154 const char* fVSVaryingName; |
155 const char* fFSVaryingName; | 155 const char* fFSVaryingName; |
156 | 156 |
157 // @{ | 157 // @{ |
158 /// Values last uploaded as uniforms | 158 /// Values last uploaded as uniforms |
159 | 159 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& fac
tory, | 212 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& fac
tory, |
213 const GrDrawEffect& drawEffect) | 213 const GrDrawEffect& drawEffect) |
214 : INHERITED(factory) | 214 : INHERITED(factory) |
215 , fVSVaryingName(NULL) | 215 , fVSVaryingName(NULL) |
216 , fFSVaryingName(NULL) | 216 , fFSVaryingName(NULL) |
217 , fCachedRadius(-SK_ScalarMax) | 217 , fCachedRadius(-SK_ScalarMax) |
218 , fCachedDiffRadius(-SK_ScalarMax) {} | 218 , fCachedDiffRadius(-SK_ScalarMax) {} |
219 | 219 |
220 void GLEdge2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, | 220 void GLEdge2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, |
221 const GrDrawEffect&, | 221 const GrDrawEffect&, |
222 EffectKey key, | 222 const GrEffectKey& key, |
223 const char* outputColor, | 223 const char* outputColor, |
224 const char* inputColor, | 224 const char* inputColor, |
225 const TransformedCoordsArray& coords, | 225 const TransformedCoordsArray& coords, |
226 const TextureSamplerArray& samplers) { | 226 const TextureSamplerArray& samplers) { |
227 this->emitUniforms(builder, key); | 227 uint32_t baseKey = key.get32(0); |
| 228 this->emitUniforms(builder, baseKey); |
228 fParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibility
, | 229 fParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibility
, |
229 kFloat_GrSLType, "Conical2FSParams", 3)
; | 230 kFloat_GrSLType, "Conical2FSParams", 3)
; |
230 | 231 |
231 SkString cName("c"); | 232 SkString cName("c"); |
232 SkString tName("t"); | 233 SkString tName("t"); |
233 SkString p0; // start radius | 234 SkString p0; // start radius |
234 SkString p1; // start radius squared | 235 SkString p1; // start radius squared |
235 SkString p2; // difference in radii (r1 - r0) | 236 SkString p2; // difference in radii (r1 - r0) |
236 | 237 |
237 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); | 238 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
(...skipping 23 matching lines...) Expand all Loading... |
261 cName.c_str(), coords2D, coords2D, p1.c_str()); | 262 cName.c_str(), coords2D, coords2D, p1.c_str()); |
262 | 263 |
263 // linear case: t = -c/b | 264 // linear case: t = -c/b |
264 builder->fsCodeAppendf("\tfloat %s = -(%s / %s);\n", tName.c_str(), | 265 builder->fsCodeAppendf("\tfloat %s = -(%s / %s);\n", tName.c_str(), |
265 cName.c_str(), bVar.c_str()); | 266 cName.c_str(), bVar.c_str()); |
266 | 267 |
267 // if r(t) > 0, then t will be the x coordinate | 268 // if r(t) > 0, then t will be the x coordinate |
268 builder->fsCodeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(), | 269 builder->fsCodeAppendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(), |
269 p2.c_str(), p0.c_str()); | 270 p2.c_str(), p0.c_str()); |
270 builder->fsCodeAppend("\t"); | 271 builder->fsCodeAppend("\t"); |
271 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor, sample
rs); | 272 this->emitColor(builder, tName.c_str(), baseKey, outputColor, inputColor, sa
mplers); |
272 builder->fsCodeAppend("\t}\n"); | 273 builder->fsCodeAppend("\t}\n"); |
273 } | 274 } |
274 | 275 |
275 void GLEdge2PtConicalEffect::setData(const GrGLUniformManager& uman, | 276 void GLEdge2PtConicalEffect::setData(const GrGLUniformManager& uman, |
276 const GrDrawEffect& drawEffect) { | 277 const GrDrawEffect& drawEffect) { |
277 INHERITED::setData(uman, drawEffect); | 278 INHERITED::setData(uman, drawEffect); |
278 const Edge2PtConicalEffect& data = drawEffect.castEffect<Edge2PtConicalEffec
t>(); | 279 const Edge2PtConicalEffect& data = drawEffect.castEffect<Edge2PtConicalEffec
t>(); |
279 SkScalar radius0 = data.radius(); | 280 SkScalar radius0 = data.radius(); |
280 SkScalar diffRadius = data.diffRadius(); | 281 SkScalar diffRadius = data.diffRadius(); |
281 | 282 |
282 if (fCachedRadius != radius0 || | 283 if (fCachedRadius != radius0 || |
283 fCachedDiffRadius != diffRadius) { | 284 fCachedDiffRadius != diffRadius) { |
284 | 285 |
285 float values[3] = { | 286 float values[3] = { |
286 SkScalarToFloat(radius0), | 287 SkScalarToFloat(radius0), |
287 SkScalarToFloat(SkScalarMul(radius0, radius0)), | 288 SkScalarToFloat(SkScalarMul(radius0, radius0)), |
288 SkScalarToFloat(diffRadius) | 289 SkScalarToFloat(diffRadius) |
289 }; | 290 }; |
290 | 291 |
291 uman.set1fv(fParamUni, 3, values); | 292 uman.set1fv(fParamUni, 3, values); |
292 fCachedRadius = radius0; | 293 fCachedRadius = radius0; |
293 fCachedDiffRadius = diffRadius; | 294 fCachedDiffRadius = diffRadius; |
294 } | 295 } |
295 } | 296 } |
296 | 297 |
297 GrGLEffect::EffectKey GLEdge2PtConicalEffect::GenKey(const GrDrawEffect& drawEff
ect, | 298 void GLEdge2PtConicalEffect::GenKey(const GrDrawEffect& drawEffect, |
298 const GrGLCaps&) { | 299 const GrGLCaps&, GrEffectKeyBuilder* b) { |
299 return GenBaseGradientKey(drawEffect); | 300 b->add32(GenBaseGradientKey(drawEffect)); |
300 } | 301 } |
301 | 302 |
302 ////////////////////////////////////////////////////////////////////////////// | 303 ////////////////////////////////////////////////////////////////////////////// |
303 // Focal Conical Gradients | 304 // Focal Conical Gradients |
304 ////////////////////////////////////////////////////////////////////////////// | 305 ////////////////////////////////////////////////////////////////////////////// |
305 | 306 |
306 static ConicalType set_matrix_focal_conical(const SkTwoPointConicalGradient& sha
der, | 307 static ConicalType set_matrix_focal_conical(const SkTwoPointConicalGradient& sha
der, |
307 SkMatrix* invLMatrix, SkScalar* foca
lX) { | 308 SkMatrix* invLMatrix, SkScalar* foca
lX) { |
308 // Inverse of the current local matrix is passed in then, | 309 // Inverse of the current local matrix is passed in then, |
309 // translate, scale, and rotate such that endCircle is unit circle on x-axis
, | 310 // translate, scale, and rotate such that endCircle is unit circle on x-axis
, |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 typedef GrGradientEffect INHERITED; | 408 typedef GrGradientEffect INHERITED; |
408 }; | 409 }; |
409 | 410 |
410 class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect { | 411 class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect { |
411 public: | 412 public: |
412 GLFocalOutside2PtConicalEffect(const GrBackendEffectFactory& factory, const
GrDrawEffect&); | 413 GLFocalOutside2PtConicalEffect(const GrBackendEffectFactory& factory, const
GrDrawEffect&); |
413 virtual ~GLFocalOutside2PtConicalEffect() { } | 414 virtual ~GLFocalOutside2PtConicalEffect() { } |
414 | 415 |
415 virtual void emitCode(GrGLShaderBuilder*, | 416 virtual void emitCode(GrGLShaderBuilder*, |
416 const GrDrawEffect&, | 417 const GrDrawEffect&, |
417 EffectKey, | 418 const GrEffectKey&, |
418 const char* outputColor, | 419 const char* outputColor, |
419 const char* inputColor, | 420 const char* inputColor, |
420 const TransformedCoordsArray&, | 421 const TransformedCoordsArray&, |
421 const TextureSamplerArray&) SK_OVERRIDE; | 422 const TextureSamplerArray&) SK_OVERRIDE; |
422 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 423 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
423 | 424 |
424 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); | 425 static void GenKey(const GrDrawEffect&, const GrGLCaps& caps, GrEffectKeyBui
lder* b); |
425 | 426 |
426 protected: | 427 protected: |
427 UniformHandle fParamUni; | 428 UniformHandle fParamUni; |
428 | 429 |
429 const char* fVSVaryingName; | 430 const char* fVSVaryingName; |
430 const char* fFSVaryingName; | 431 const char* fFSVaryingName; |
431 | 432 |
432 bool fIsFlipped; | 433 bool fIsFlipped; |
433 | 434 |
434 // @{ | 435 // @{ |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 : INHERITED(factory) | 488 : INHERITED(factory) |
488 , fVSVaryingName(NULL) | 489 , fVSVaryingName(NULL) |
489 , fFSVaryingName(NULL) | 490 , fFSVaryingName(NULL) |
490 , fCachedFocal(SK_ScalarMax) { | 491 , fCachedFocal(SK_ScalarMax) { |
491 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid
e2PtConicalEffect>(); | 492 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid
e2PtConicalEffect>(); |
492 fIsFlipped = data.isFlipped(); | 493 fIsFlipped = data.isFlipped(); |
493 } | 494 } |
494 | 495 |
495 void GLFocalOutside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, | 496 void GLFocalOutside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, |
496 const GrDrawEffect&, | 497 const GrDrawEffect&, |
497 EffectKey key, | 498 const GrEffectKey& key, |
498 const char* outputColor, | 499 const char* outputColor, |
499 const char* inputColor, | 500 const char* inputColor, |
500 const TransformedCoordsArray& coor
ds, | 501 const TransformedCoordsArray& coor
ds, |
501 const TextureSamplerArray& sampler
s) { | 502 const TextureSamplerArray& sampler
s) { |
502 this->emitUniforms(builder, key); | 503 uint32_t baseKey = key.get32(0); |
| 504 this->emitUniforms(builder, baseKey); |
503 fParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibility
, | 505 fParamUni = builder->addUniformArray(GrGLShaderBuilder::kFragment_Visibility
, |
504 kFloat_GrSLType, "Conical2FSParams", 2)
; | 506 kFloat_GrSLType, "Conical2FSParams", 2)
; |
505 SkString tName("t"); | 507 SkString tName("t"); |
506 SkString p0; // focalX | 508 SkString p0; // focalX |
507 SkString p1; // 1 - focalX * focalX | 509 SkString p1; // 1 - focalX * focalX |
508 | 510 |
509 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); | 511 builder->getUniformVariable(fParamUni).appendArrayAccess(0, &p0); |
510 builder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); | 512 builder->getUniformVariable(fParamUni).appendArrayAccess(1, &p1); |
511 | 513 |
512 // if we have a vec3 from being in perspective, convert it to a vec2 first | 514 // if we have a vec3 from being in perspective, convert it to a vec2 first |
(...skipping 15 matching lines...) Expand all Loading... |
528 if (!fIsFlipped) { | 530 if (!fIsFlipped) { |
529 builder->fsCodeAppendf("\tfloat %s = %s.x * %s + sqrt(d);\n", tName.c_s
tr(), | 531 builder->fsCodeAppendf("\tfloat %s = %s.x * %s + sqrt(d);\n", tName.c_s
tr(), |
530 coords2D, p0.c_str()); | 532 coords2D, p0.c_str()); |
531 } else { | 533 } else { |
532 builder->fsCodeAppendf("\tfloat %s = %s.x * %s - sqrt(d);\n", tName.c_s
tr(), | 534 builder->fsCodeAppendf("\tfloat %s = %s.x * %s - sqrt(d);\n", tName.c_s
tr(), |
533 coords2D, p0.c_str()); | 535 coords2D, p0.c_str()); |
534 } | 536 } |
535 | 537 |
536 builder->fsCodeAppendf("\tif (%s >= 0.0 && d >= 0.0) {\n", tName.c_str()); | 538 builder->fsCodeAppendf("\tif (%s >= 0.0 && d >= 0.0) {\n", tName.c_str()); |
537 builder->fsCodeAppend("\t\t"); | 539 builder->fsCodeAppend("\t\t"); |
538 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor, sample
rs); | 540 this->emitColor(builder, tName.c_str(), baseKey, outputColor, inputColor, sa
mplers); |
539 builder->fsCodeAppend("\t}\n"); | 541 builder->fsCodeAppend("\t}\n"); |
540 } | 542 } |
541 | 543 |
542 void GLFocalOutside2PtConicalEffect::setData(const GrGLUniformManager& uman, | 544 void GLFocalOutside2PtConicalEffect::setData(const GrGLUniformManager& uman, |
543 const GrDrawEffect& drawEffect) { | 545 const GrDrawEffect& drawEffect) { |
544 INHERITED::setData(uman, drawEffect); | 546 INHERITED::setData(uman, drawEffect); |
545 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid
e2PtConicalEffect>(); | 547 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid
e2PtConicalEffect>(); |
546 SkASSERT(data.isFlipped() == fIsFlipped); | 548 SkASSERT(data.isFlipped() == fIsFlipped); |
547 SkScalar focal = data.focal(); | 549 SkScalar focal = data.focal(); |
548 | 550 |
549 if (fCachedFocal != focal) { | 551 if (fCachedFocal != focal) { |
550 SkScalar oneMinus2F = 1.f - SkScalarMul(focal, focal); | 552 SkScalar oneMinus2F = 1.f - SkScalarMul(focal, focal); |
551 | 553 |
552 float values[2] = { | 554 float values[2] = { |
553 SkScalarToFloat(focal), | 555 SkScalarToFloat(focal), |
554 SkScalarToFloat(oneMinus2F), | 556 SkScalarToFloat(oneMinus2F), |
555 }; | 557 }; |
556 | 558 |
557 uman.set1fv(fParamUni, 2, values); | 559 uman.set1fv(fParamUni, 2, values); |
558 fCachedFocal = focal; | 560 fCachedFocal = focal; |
559 } | 561 } |
560 } | 562 } |
561 | 563 |
562 GrGLEffect::EffectKey GLFocalOutside2PtConicalEffect::GenKey(const GrDrawEffect&
drawEffect, | 564 void GLFocalOutside2PtConicalEffect::GenKey(const GrDrawEffect& drawEffect, |
563 const GrGLCaps&) { | 565 const GrGLCaps&, GrEffectKeyBuilder*
b) { |
564 enum { | 566 uint32_t* key = b->add32n(2); |
565 kIsFlipped = 1 << kBaseKeyBitCnt, | 567 key[0] = GenBaseGradientKey(drawEffect); |
566 }; | 568 key[1] = drawEffect.castEffect<FocalOutside2PtConicalEffect>().isFlipped(); |
567 | |
568 EffectKey key = GenBaseGradientKey(drawEffect); | |
569 | |
570 if (drawEffect.castEffect<FocalOutside2PtConicalEffect>().isFlipped()) { | |
571 key |= kIsFlipped; | |
572 } | |
573 return key; | |
574 } | 569 } |
575 | 570 |
576 ////////////////////////////////////////////////////////////////////////////// | 571 ////////////////////////////////////////////////////////////////////////////// |
577 | 572 |
578 class GLFocalInside2PtConicalEffect; | 573 class GLFocalInside2PtConicalEffect; |
579 | 574 |
580 class FocalInside2PtConicalEffect : public GrGradientEffect { | 575 class FocalInside2PtConicalEffect : public GrGradientEffect { |
581 public: | 576 public: |
582 | 577 |
583 static GrEffect* Create(GrContext* ctx, | 578 static GrEffect* Create(GrContext* ctx, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 typedef GrGradientEffect INHERITED; | 613 typedef GrGradientEffect INHERITED; |
619 }; | 614 }; |
620 | 615 |
621 class GLFocalInside2PtConicalEffect : public GrGLGradientEffect { | 616 class GLFocalInside2PtConicalEffect : public GrGLGradientEffect { |
622 public: | 617 public: |
623 GLFocalInside2PtConicalEffect(const GrBackendEffectFactory& factory, const G
rDrawEffect&); | 618 GLFocalInside2PtConicalEffect(const GrBackendEffectFactory& factory, const G
rDrawEffect&); |
624 virtual ~GLFocalInside2PtConicalEffect() {} | 619 virtual ~GLFocalInside2PtConicalEffect() {} |
625 | 620 |
626 virtual void emitCode(GrGLShaderBuilder*, | 621 virtual void emitCode(GrGLShaderBuilder*, |
627 const GrDrawEffect&, | 622 const GrDrawEffect&, |
628 EffectKey, | 623 const GrEffectKey&, |
629 const char* outputColor, | 624 const char* outputColor, |
630 const char* inputColor, | 625 const char* inputColor, |
631 const TransformedCoordsArray&, | 626 const TransformedCoordsArray&, |
632 const TextureSamplerArray&) SK_OVERRIDE; | 627 const TextureSamplerArray&) SK_OVERRIDE; |
633 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 628 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
634 | 629 |
635 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); | 630 static void GenKey(const GrDrawEffect&, const GrGLCaps& caps, GrEffectKeyBui
lder* b); |
636 | 631 |
637 protected: | 632 protected: |
638 UniformHandle fFocalUni; | 633 UniformHandle fFocalUni; |
639 | 634 |
640 const char* fVSVaryingName; | 635 const char* fVSVaryingName; |
641 const char* fFSVaryingName; | 636 const char* fFSVaryingName; |
642 | 637 |
643 // @{ | 638 // @{ |
644 /// Values last uploaded as uniforms | 639 /// Values last uploaded as uniforms |
645 | 640 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 | 690 |
696 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffe
ctFactory& factory, | 691 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffe
ctFactory& factory, |
697 const GrDrawEffect&
drawEffect) | 692 const GrDrawEffect&
drawEffect) |
698 : INHERITED(factory) | 693 : INHERITED(factory) |
699 , fVSVaryingName(NULL) | 694 , fVSVaryingName(NULL) |
700 , fFSVaryingName(NULL) | 695 , fFSVaryingName(NULL) |
701 , fCachedFocal(SK_ScalarMax) {} | 696 , fCachedFocal(SK_ScalarMax) {} |
702 | 697 |
703 void GLFocalInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, | 698 void GLFocalInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, |
704 const GrDrawEffect&, | 699 const GrDrawEffect&, |
705 EffectKey key, | 700 const GrEffectKey& key, |
706 const char* outputColor, | 701 const char* outputColor, |
707 const char* inputColor, | 702 const char* inputColor, |
708 const TransformedCoordsArray& coord
s, | 703 const TransformedCoordsArray& coord
s, |
709 const TextureSamplerArray& samplers
) { | 704 const TextureSamplerArray& samplers
) { |
710 this->emitUniforms(builder, key); | 705 uint32_t baseKey = key.get32(0); |
| 706 this->emitUniforms(builder, baseKey); |
711 fFocalUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, | 707 fFocalUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, |
712 kFloat_GrSLType, "Conical2FSParams"); | 708 kFloat_GrSLType, "Conical2FSParams"); |
713 SkString tName("t"); | 709 SkString tName("t"); |
714 | 710 |
715 // 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 |
716 // transformed coordinates | 712 // transformed coordinates |
717 GrGLShaderVar focal = builder->getUniformVariable(fFocalUni); | 713 GrGLShaderVar focal = builder->getUniformVariable(fFocalUni); |
718 | 714 |
719 // 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 |
720 SkString coords2DString = builder->ensureFSCoords2D(coords, 0); | 716 SkString coords2DString = builder->ensureFSCoords2D(coords, 0); |
721 const char* coords2D = coords2DString.c_str(); | 717 const char* coords2D = coords2DString.c_str(); |
722 | 718 |
723 // t = p.x * focalX + length(p) | 719 // t = p.x * focalX + length(p) |
724 builder->fsCodeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_st
r(), | 720 builder->fsCodeAppendf("\tfloat %s = %s.x * %s + length(%s);\n", tName.c_st
r(), |
725 coords2D, focal.c_str(), coords2D); | 721 coords2D, focal.c_str(), coords2D); |
726 | 722 |
727 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor, sample
rs); | 723 this->emitColor(builder, tName.c_str(), baseKey, outputColor, inputColor, sa
mplers); |
728 } | 724 } |
729 | 725 |
730 void GLFocalInside2PtConicalEffect::setData(const GrGLUniformManager& uman, | 726 void GLFocalInside2PtConicalEffect::setData(const GrGLUniformManager& uman, |
731 const GrDrawEffect& drawEffect) { | 727 const GrDrawEffect& drawEffect) { |
732 INHERITED::setData(uman, drawEffect); | 728 INHERITED::setData(uman, drawEffect); |
733 const FocalInside2PtConicalEffect& data = drawEffect.castEffect<FocalInside2
PtConicalEffect>(); | 729 const FocalInside2PtConicalEffect& data = drawEffect.castEffect<FocalInside2
PtConicalEffect>(); |
734 SkScalar focal = data.focal(); | 730 SkScalar focal = data.focal(); |
735 | 731 |
736 if (fCachedFocal != focal) { | 732 if (fCachedFocal != focal) { |
737 uman.set1f(fFocalUni, SkScalarToFloat(focal)); | 733 uman.set1f(fFocalUni, SkScalarToFloat(focal)); |
738 fCachedFocal = focal; | 734 fCachedFocal = focal; |
739 } | 735 } |
740 } | 736 } |
741 | 737 |
742 GrGLEffect::EffectKey GLFocalInside2PtConicalEffect::GenKey(const GrDrawEffect&
drawEffect, | 738 void GLFocalInside2PtConicalEffect::GenKey(const GrDrawEffect& drawEffect, |
743 const GrGLCaps&) { | 739 const GrGLCaps&, GrEffectKeyBuilder*
b) { |
744 return GenBaseGradientKey(drawEffect); | 740 b->add32(GenBaseGradientKey(drawEffect)); |
745 } | 741 } |
746 | 742 |
747 ////////////////////////////////////////////////////////////////////////////// | 743 ////////////////////////////////////////////////////////////////////////////// |
748 // Circle Conical Gradients | 744 // Circle Conical Gradients |
749 ////////////////////////////////////////////////////////////////////////////// | 745 ////////////////////////////////////////////////////////////////////////////// |
750 | 746 |
751 struct CircleConicalInfo { | 747 struct CircleConicalInfo { |
752 SkPoint fCenterEnd; | 748 SkPoint fCenterEnd; |
753 SkScalar fA; | 749 SkScalar fA; |
754 SkScalar fB; | 750 SkScalar fB; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 typedef GrGradientEffect INHERITED; | 854 typedef GrGradientEffect INHERITED; |
859 }; | 855 }; |
860 | 856 |
861 class GLCircleInside2PtConicalEffect : public GrGLGradientEffect { | 857 class GLCircleInside2PtConicalEffect : public GrGLGradientEffect { |
862 public: | 858 public: |
863 GLCircleInside2PtConicalEffect(const GrBackendEffectFactory& factory, const
GrDrawEffect&); | 859 GLCircleInside2PtConicalEffect(const GrBackendEffectFactory& factory, const
GrDrawEffect&); |
864 virtual ~GLCircleInside2PtConicalEffect() {} | 860 virtual ~GLCircleInside2PtConicalEffect() {} |
865 | 861 |
866 virtual void emitCode(GrGLShaderBuilder*, | 862 virtual void emitCode(GrGLShaderBuilder*, |
867 const GrDrawEffect&, | 863 const GrDrawEffect&, |
868 EffectKey, | 864 const GrEffectKey&, |
869 const char* outputColor, | 865 const char* outputColor, |
870 const char* inputColor, | 866 const char* inputColor, |
871 const TransformedCoordsArray&, | 867 const TransformedCoordsArray&, |
872 const TextureSamplerArray&) SK_OVERRIDE; | 868 const TextureSamplerArray&) SK_OVERRIDE; |
873 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 869 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
874 | 870 |
875 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); | 871 static void GenKey(const GrDrawEffect&, const GrGLCaps& caps, GrEffectKeyBui
lder* b); |
876 | 872 |
877 protected: | 873 protected: |
878 UniformHandle fCenterUni; | 874 UniformHandle fCenterUni; |
879 UniformHandle fParamUni; | 875 UniformHandle fParamUni; |
880 | 876 |
881 const char* fVSVaryingName; | 877 const char* fVSVaryingName; |
882 const char* fFSVaryingName; | 878 const char* fFSVaryingName; |
883 | 879 |
884 // @{ | 880 // @{ |
885 /// Values last uploaded as uniforms | 881 /// Values last uploaded as uniforms |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 , fVSVaryingName(NULL) | 939 , fVSVaryingName(NULL) |
944 , fFSVaryingName(NULL) | 940 , fFSVaryingName(NULL) |
945 , fCachedCenterX(SK_ScalarMax) | 941 , fCachedCenterX(SK_ScalarMax) |
946 , fCachedCenterY(SK_ScalarMax) | 942 , fCachedCenterY(SK_ScalarMax) |
947 , fCachedA(SK_ScalarMax) | 943 , fCachedA(SK_ScalarMax) |
948 , fCachedB(SK_ScalarMax) | 944 , fCachedB(SK_ScalarMax) |
949 , fCachedC(SK_ScalarMax) {} | 945 , fCachedC(SK_ScalarMax) {} |
950 | 946 |
951 void GLCircleInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, | 947 void GLCircleInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, |
952 const GrDrawEffect&, | 948 const GrDrawEffect&, |
953 EffectKey key, | 949 const GrEffectKey& key, |
954 const char* outputColor, | 950 const char* outputColor, |
955 const char* inputColor, | 951 const char* inputColor, |
956 const TransformedCoordsArray& coor
ds, | 952 const TransformedCoordsArray& coor
ds, |
957 const TextureSamplerArray& sampler
s) { | 953 const TextureSamplerArray& sampler
s) { |
958 this->emitUniforms(builder, key); | 954 uint32_t baseKey = key.get32(0); |
| 955 this->emitUniforms(builder, baseKey); |
959 fCenterUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, | 956 fCenterUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, |
960 kVec2f_GrSLType, "Conical2FSCenter"); | 957 kVec2f_GrSLType, "Conical2FSCenter"); |
961 fParamUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, | 958 fParamUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, |
962 kVec3f_GrSLType, "Conical2FSParams"); | 959 kVec3f_GrSLType, "Conical2FSParams"); |
963 SkString tName("t"); | 960 SkString tName("t"); |
964 | 961 |
965 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); | 962 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); |
966 // params.x = A | 963 // params.x = A |
967 // params.y = B | 964 // params.y = B |
968 // params.z = C | 965 // params.z = C |
969 GrGLShaderVar params = builder->getUniformVariable(fParamUni); | 966 GrGLShaderVar params = builder->getUniformVariable(fParamUni); |
970 | 967 |
971 // if we have a vec3 from being in perspective, convert it to a vec2 first | 968 // if we have a vec3 from being in perspective, convert it to a vec2 first |
972 SkString coords2DString = builder->ensureFSCoords2D(coords, 0); | 969 SkString coords2DString = builder->ensureFSCoords2D(coords, 0); |
973 const char* coords2D = coords2DString.c_str(); | 970 const char* coords2D = coords2DString.c_str(); |
974 | 971 |
975 // p = coords2D | 972 // p = coords2D |
976 // e = center end | 973 // e = center end |
977 // r = radius end | 974 // r = radius end |
978 // A = dot(e, e) - r^2 + 2 * r - 1 | 975 // A = dot(e, e) - r^2 + 2 * r - 1 |
979 // B = (r -1) / A | 976 // B = (r -1) / A |
980 // C = 1 / A | 977 // C = 1 / A |
981 // d = dot(e, p) + B | 978 // d = dot(e, p) + B |
982 // t = d +/- sqrt(d^2 - A * dot(p, p) + C) | 979 // t = d +/- sqrt(d^2 - A * dot(p, p) + C) |
983 builder->fsCodeAppendf("\tfloat pDotp = dot(%s, %s);\n", coords2D, coords2D
); | 980 builder->fsCodeAppendf("\tfloat pDotp = dot(%s, %s);\n", coords2D, coords2D
); |
984 builder->fsCodeAppendf("\tfloat d = dot(%s, %s) + %s.y;\n", coords2D, cente
r.c_str(), params.c_str()); | 981 builder->fsCodeAppendf("\tfloat d = dot(%s, %s) + %s.y;\n", coords2D, cente
r.c_str(), params.c_str()); |
985 builder->fsCodeAppendf("\tfloat %s = d + sqrt(d * d - %s.x * pDotp + %s.z);\
n", | 982 builder->fsCodeAppendf("\tfloat %s = d + sqrt(d * d - %s.x * pDotp + %s.z);\
n", |
986 tName.c_str(), params.c_str(), params.c_str()); | 983 tName.c_str(), params.c_str(), params.c_str()); |
987 | 984 |
988 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor, sample
rs); | 985 this->emitColor(builder, tName.c_str(), baseKey, outputColor, inputColor, sa
mplers); |
989 } | 986 } |
990 | 987 |
991 void GLCircleInside2PtConicalEffect::setData(const GrGLUniformManager& uman, | 988 void GLCircleInside2PtConicalEffect::setData(const GrGLUniformManager& uman, |
992 const GrDrawEffect& drawEffect) { | 989 const GrDrawEffect& drawEffect) { |
993 INHERITED::setData(uman, drawEffect); | 990 INHERITED::setData(uman, drawEffect); |
994 const CircleInside2PtConicalEffect& data = drawEffect.castEffect<CircleInsid
e2PtConicalEffect>(); | 991 const CircleInside2PtConicalEffect& data = drawEffect.castEffect<CircleInsid
e2PtConicalEffect>(); |
995 SkScalar centerX = data.centerX(); | 992 SkScalar centerX = data.centerX(); |
996 SkScalar centerY = data.centerY(); | 993 SkScalar centerY = data.centerY(); |
997 SkScalar A = data.A(); | 994 SkScalar A = data.A(); |
998 SkScalar B = data.B(); | 995 SkScalar B = data.B(); |
999 SkScalar C = data.C(); | 996 SkScalar C = data.C(); |
1000 | 997 |
1001 if (fCachedCenterX != centerX || fCachedCenterY != centerY || | 998 if (fCachedCenterX != centerX || fCachedCenterY != centerY || |
1002 fCachedA != A || fCachedB != B || fCachedC != C) { | 999 fCachedA != A || fCachedB != B || fCachedC != C) { |
1003 | 1000 |
1004 uman.set2f(fCenterUni, SkScalarToFloat(centerX), SkScalarToFloat(centerY
)); | 1001 uman.set2f(fCenterUni, SkScalarToFloat(centerX), SkScalarToFloat(centerY
)); |
1005 uman.set3f(fParamUni, SkScalarToFloat(A), SkScalarToFloat(B), SkScalarTo
Float(C)); | 1002 uman.set3f(fParamUni, SkScalarToFloat(A), SkScalarToFloat(B), SkScalarTo
Float(C)); |
1006 | 1003 |
1007 fCachedCenterX = centerX; | 1004 fCachedCenterX = centerX; |
1008 fCachedCenterY = centerY; | 1005 fCachedCenterY = centerY; |
1009 fCachedA = A; | 1006 fCachedA = A; |
1010 fCachedB = B; | 1007 fCachedB = B; |
1011 fCachedC = C; | 1008 fCachedC = C; |
1012 } | 1009 } |
1013 } | 1010 } |
1014 | 1011 |
1015 GrGLEffect::EffectKey GLCircleInside2PtConicalEffect::GenKey(const GrDrawEffect&
drawEffect, | 1012 void GLCircleInside2PtConicalEffect::GenKey(const GrDrawEffect& drawEffect, |
1016 const GrGLCaps&) { | 1013 const GrGLCaps&, GrEffectKeyBuilder*
b) { |
1017 EffectKey key = GenBaseGradientKey(drawEffect); | 1014 b->add32(GenBaseGradientKey(drawEffect)); |
1018 return key; | |
1019 } | 1015 } |
1020 | 1016 |
1021 ////////////////////////////////////////////////////////////////////////////// | 1017 ////////////////////////////////////////////////////////////////////////////// |
1022 | 1018 |
1023 class GLCircleOutside2PtConicalEffect; | 1019 class GLCircleOutside2PtConicalEffect; |
1024 | 1020 |
1025 class CircleOutside2PtConicalEffect : public GrGradientEffect { | 1021 class CircleOutside2PtConicalEffect : public GrGradientEffect { |
1026 public: | 1022 public: |
1027 | 1023 |
1028 static GrEffect* Create(GrContext* ctx, | 1024 static GrEffect* Create(GrContext* ctx, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1084 typedef GrGradientEffect INHERITED; | 1080 typedef GrGradientEffect INHERITED; |
1085 }; | 1081 }; |
1086 | 1082 |
1087 class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect { | 1083 class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect { |
1088 public: | 1084 public: |
1089 GLCircleOutside2PtConicalEffect(const GrBackendEffectFactory& factory, const
GrDrawEffect&); | 1085 GLCircleOutside2PtConicalEffect(const GrBackendEffectFactory& factory, const
GrDrawEffect&); |
1090 virtual ~GLCircleOutside2PtConicalEffect() {} | 1086 virtual ~GLCircleOutside2PtConicalEffect() {} |
1091 | 1087 |
1092 virtual void emitCode(GrGLShaderBuilder*, | 1088 virtual void emitCode(GrGLShaderBuilder*, |
1093 const GrDrawEffect&, | 1089 const GrDrawEffect&, |
1094 EffectKey, | 1090 const GrEffectKey&, |
1095 const char* outputColor, | 1091 const char* outputColor, |
1096 const char* inputColor, | 1092 const char* inputColor, |
1097 const TransformedCoordsArray&, | 1093 const TransformedCoordsArray&, |
1098 const TextureSamplerArray&) SK_OVERRIDE; | 1094 const TextureSamplerArray&) SK_OVERRIDE; |
1099 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 1095 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
1100 | 1096 |
1101 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps& caps); | 1097 static void GenKey(const GrDrawEffect&, const GrGLCaps& caps, GrEffectKeyBui
lder* b); |
1102 | 1098 |
1103 protected: | 1099 protected: |
1104 UniformHandle fCenterUni; | 1100 UniformHandle fCenterUni; |
1105 UniformHandle fParamUni; | 1101 UniformHandle fParamUni; |
1106 | 1102 |
1107 const char* fVSVaryingName; | 1103 const char* fVSVaryingName; |
1108 const char* fFSVaryingName; | 1104 const char* fFSVaryingName; |
1109 | 1105 |
1110 bool fIsFlipped; | 1106 bool fIsFlipped; |
1111 | 1107 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1177 , fCachedA(SK_ScalarMax) | 1173 , fCachedA(SK_ScalarMax) |
1178 , fCachedB(SK_ScalarMax) | 1174 , fCachedB(SK_ScalarMax) |
1179 , fCachedC(SK_ScalarMax) | 1175 , fCachedC(SK_ScalarMax) |
1180 , fCachedTLimit(SK_ScalarMax) { | 1176 , fCachedTLimit(SK_ScalarMax) { |
1181 const CircleOutside2PtConicalEffect& data = drawEffect.castEffect<CircleOuts
ide2PtConicalEffect>(); | 1177 const CircleOutside2PtConicalEffect& data = drawEffect.castEffect<CircleOuts
ide2PtConicalEffect>(); |
1182 fIsFlipped = data.isFlipped(); | 1178 fIsFlipped = data.isFlipped(); |
1183 } | 1179 } |
1184 | 1180 |
1185 void GLCircleOutside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, | 1181 void GLCircleOutside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, |
1186 const GrDrawEffect&, | 1182 const GrDrawEffect&, |
1187 EffectKey key, | 1183 const GrEffectKey& key, |
1188 const char* outputColor, | 1184 const char* outputColor, |
1189 const char* inputColor, | 1185 const char* inputColor, |
1190 const TransformedCoordsArray& coo
rds, | 1186 const TransformedCoordsArray& coo
rds, |
1191 const TextureSamplerArray& sample
rs) { | 1187 const TextureSamplerArray& sample
rs) { |
1192 this->emitUniforms(builder, key); | 1188 uint32_t baseKey = key.get32(0); |
| 1189 this->emitUniforms(builder, baseKey); |
1193 fCenterUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, | 1190 fCenterUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, |
1194 kVec2f_GrSLType, "Conical2FSCenter"); | 1191 kVec2f_GrSLType, "Conical2FSCenter"); |
1195 fParamUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, | 1192 fParamUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, |
1196 kVec4f_GrSLType, "Conical2FSParams"); | 1193 kVec4f_GrSLType, "Conical2FSParams"); |
1197 SkString tName("t"); | 1194 SkString tName("t"); |
1198 | 1195 |
1199 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); | 1196 GrGLShaderVar center = builder->getUniformVariable(fCenterUni); |
1200 // params.x = A | 1197 // params.x = A |
1201 // params.y = B | 1198 // params.y = B |
1202 // params.z = C | 1199 // params.z = C |
(...skipping 23 matching lines...) Expand all Loading... |
1226 // Must check to see if we flipped the circle order (to make sure start radi
us < end radius) | 1223 // Must check to see if we flipped the circle order (to make sure start radi
us < end radius) |
1227 // If so we must also flip sign on sqrt | 1224 // If so we must also flip sign on sqrt |
1228 if (!fIsFlipped) { | 1225 if (!fIsFlipped) { |
1229 builder->fsCodeAppendf("\tfloat %s = d + sqrt(deter);\n", tName.c_str())
; | 1226 builder->fsCodeAppendf("\tfloat %s = d + sqrt(deter);\n", tName.c_str())
; |
1230 } else { | 1227 } else { |
1231 builder->fsCodeAppendf("\tfloat %s = d - sqrt(deter);\n", tName.c_str())
; | 1228 builder->fsCodeAppendf("\tfloat %s = d - sqrt(deter);\n", tName.c_str())
; |
1232 } | 1229 } |
1233 | 1230 |
1234 builder->fsCodeAppendf("\tif (%s >= %s.w && deter >= 0.0) {\n", tName.c_str(
), params.c_str()); | 1231 builder->fsCodeAppendf("\tif (%s >= %s.w && deter >= 0.0) {\n", tName.c_str(
), params.c_str()); |
1235 builder->fsCodeAppend("\t\t"); | 1232 builder->fsCodeAppend("\t\t"); |
1236 this->emitColor(builder, tName.c_str(), key, outputColor, inputColor, sample
rs); | 1233 this->emitColor(builder, tName.c_str(), baseKey, outputColor, inputColor, sa
mplers); |
1237 builder->fsCodeAppend("\t}\n"); | 1234 builder->fsCodeAppend("\t}\n"); |
1238 } | 1235 } |
1239 | 1236 |
1240 void GLCircleOutside2PtConicalEffect::setData(const GrGLUniformManager& uman, | 1237 void GLCircleOutside2PtConicalEffect::setData(const GrGLUniformManager& uman, |
1241 const GrDrawEffect& drawEffect) { | 1238 const GrDrawEffect& drawEffect) { |
1242 INHERITED::setData(uman, drawEffect); | 1239 INHERITED::setData(uman, drawEffect); |
1243 const CircleOutside2PtConicalEffect& data = drawEffect.castEffect<CircleOuts
ide2PtConicalEffect>(); | 1240 const CircleOutside2PtConicalEffect& data = drawEffect.castEffect<CircleOuts
ide2PtConicalEffect>(); |
1244 SkASSERT(data.isFlipped() == fIsFlipped); | 1241 SkASSERT(data.isFlipped() == fIsFlipped); |
1245 SkScalar centerX = data.centerX(); | 1242 SkScalar centerX = data.centerX(); |
1246 SkScalar centerY = data.centerY(); | 1243 SkScalar centerY = data.centerY(); |
(...skipping 11 matching lines...) Expand all Loading... |
1258 | 1255 |
1259 fCachedCenterX = centerX; | 1256 fCachedCenterX = centerX; |
1260 fCachedCenterY = centerY; | 1257 fCachedCenterY = centerY; |
1261 fCachedA = A; | 1258 fCachedA = A; |
1262 fCachedB = B; | 1259 fCachedB = B; |
1263 fCachedC = C; | 1260 fCachedC = C; |
1264 fCachedTLimit = tLimit; | 1261 fCachedTLimit = tLimit; |
1265 } | 1262 } |
1266 } | 1263 } |
1267 | 1264 |
1268 GrGLEffect::EffectKey GLCircleOutside2PtConicalEffect::GenKey(const GrDrawEffect
& drawEffect, | 1265 void GLCircleOutside2PtConicalEffect::GenKey(const GrDrawEffect& drawEffect, |
1269 const GrGLCaps&) { | 1266 const GrGLCaps&, GrEffectKeyBuilder
* b) { |
1270 enum { | 1267 uint32_t* key = b->add32n(2); |
1271 kIsFlipped = 1 << kBaseKeyBitCnt, | 1268 key[0] = GenBaseGradientKey(drawEffect); |
1272 }; | 1269 key[1] = drawEffect.castEffect<CircleOutside2PtConicalEffect>().isFlipped(); |
1273 | |
1274 EffectKey key = GenBaseGradientKey(drawEffect); | |
1275 | |
1276 if (drawEffect.castEffect<CircleOutside2PtConicalEffect>().isFlipped()) { | |
1277 key |= kIsFlipped; | |
1278 } | |
1279 return key; | |
1280 } | 1270 } |
1281 | 1271 |
1282 ////////////////////////////////////////////////////////////////////////////// | 1272 ////////////////////////////////////////////////////////////////////////////// |
1283 | 1273 |
1284 GrEffect* Gr2PtConicalGradientEffect::Create(GrContext* ctx, | 1274 GrEffect* Gr2PtConicalGradientEffect::Create(GrContext* ctx, |
1285 const SkTwoPointConicalGradient& sh
ader, | 1275 const SkTwoPointConicalGradient& sh
ader, |
1286 SkShader::TileMode tm, | 1276 SkShader::TileMode tm, |
1287 const SkMatrix* localMatrix) { | 1277 const SkMatrix* localMatrix) { |
1288 SkMatrix matrix; | 1278 SkMatrix matrix; |
1289 if (!shader.getLocalMatrix().invert(&matrix)) { | 1279 if (!shader.getLocalMatrix().invert(&matrix)) { |
(...skipping 27 matching lines...) Expand all Loading... |
1317 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); | 1307 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); |
1318 } else if (type == kEdge_ConicalType) { | 1308 } else if (type == kEdge_ConicalType) { |
1319 set_matrix_edge_conical(shader, &matrix); | 1309 set_matrix_edge_conical(shader, &matrix); |
1320 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1310 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); |
1321 } else { | 1311 } else { |
1322 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); | 1312 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); |
1323 } | 1313 } |
1324 } | 1314 } |
1325 | 1315 |
1326 #endif | 1316 #endif |
OLD | NEW |