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

Side by Side Diff: src/effects/SkLightingImageFilter.cpp

Issue 806653007: Fix up all the easy virtual ... SK_OVERRIDE cases. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 5 years, 11 months 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/SkDisplacementMapEffect.cpp ('k') | src/effects/SkLumaColorFilter.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 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkLightingImageFilter.h" 8 #include "SkLightingImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 const CropRect*, uint32_t uniqueID = 0); 283 const CropRect*, uint32_t uniqueID = 0);
284 284
285 SK_TO_STRING_OVERRIDE() 285 SK_TO_STRING_OVERRIDE()
286 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter) 286 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter)
287 SkScalar kd() const { return fKD; } 287 SkScalar kd() const { return fKD; }
288 288
289 protected: 289 protected:
290 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, 290 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
291 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect, 291 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect,
292 uint32_t uniqueID); 292 uint32_t uniqueID);
293 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; 293 void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
294 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 294 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
295 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; 295 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE;
296 #if SK_SUPPORT_GPU 296 #if SK_SUPPORT_GPU
297 virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const Sk Matrix&, 297 virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const Sk Matrix&,
298 const SkIRect& bounds) const SK_OVERRIDE; 298 const SkIRect& bounds) const SK_OVERRIDE;
299 #endif 299 #endif
300 300
301 private: 301 private:
302 friend class SkLightingImageFilter; 302 friend class SkLightingImageFilter;
303 typedef SkLightingImageFilter INHERITED; 303 typedef SkLightingImageFilter INHERITED;
304 SkScalar fKD; 304 SkScalar fKD;
305 }; 305 };
306 306
307 class SkSpecularLightingImageFilter : public SkLightingImageFilter { 307 class SkSpecularLightingImageFilter : public SkLightingImageFilter {
308 public: 308 public:
309 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale, 309 static SkImageFilter* Create(SkLight* light, SkScalar surfaceScale,
310 SkScalar ks, SkScalar shininess, SkImageFilter* , const CropRect*, 310 SkScalar ks, SkScalar shininess, SkImageFilter* , const CropRect*,
311 uint32_t uniqueID = 0); 311 uint32_t uniqueID = 0);
312 312
313 SK_TO_STRING_OVERRIDE() 313 SK_TO_STRING_OVERRIDE()
314 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter) 314 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter)
315 315
316 SkScalar ks() const { return fKS; } 316 SkScalar ks() const { return fKS; }
317 SkScalar shininess() const { return fShininess; } 317 SkScalar shininess() const { return fShininess; }
318 318
319 protected: 319 protected:
320 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, 320 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks,
321 SkScalar shininess, SkImageFilter* input, cons t CropRect*, 321 SkScalar shininess, SkImageFilter* input, cons t CropRect*,
322 uint32_t uniqueID); 322 uint32_t uniqueID);
323 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; 323 void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
324 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 324 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
325 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE; 325 SkBitmap* result, SkIPoint* offset) const SK_OVER RIDE;
326 #if SK_SUPPORT_GPU 326 #if SK_SUPPORT_GPU
327 virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const Sk Matrix&, 327 virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const Sk Matrix&,
328 const SkIRect& bounds) const SK_OVERRIDE; 328 const SkIRect& bounds) const SK_OVERRIDE;
329 #endif 329 #endif
330 330
331 private: 331 private:
332 SkScalar fKS; 332 SkScalar fKS;
333 SkScalar fShininess; 333 SkScalar fShininess;
334 friend class SkLightingImageFilter; 334 friend class SkLightingImageFilter;
335 typedef SkLightingImageFilter INHERITED; 335 typedef SkLightingImageFilter INHERITED;
336 }; 336 };
337 337
338 #if SK_SUPPORT_GPU 338 #if SK_SUPPORT_GPU
339 339
340 class GrLightingEffect : public GrSingleTextureEffect { 340 class GrLightingEffect : public GrSingleTextureEffect {
341 public: 341 public:
342 GrLightingEffect(GrTexture* texture, const SkLight* light, SkScalar surfaceS cale, const SkMatrix& matrix); 342 GrLightingEffect(GrTexture* texture, const SkLight* light, SkScalar surfaceS cale, const SkMatrix& matrix);
343 virtual ~GrLightingEffect(); 343 virtual ~GrLightingEffect();
344 344
345 const SkLight* light() const { return fLight; } 345 const SkLight* light() const { return fLight; }
346 SkScalar surfaceScale() const { return fSurfaceScale; } 346 SkScalar surfaceScale() const { return fSurfaceScale; }
347 const SkMatrix& filterMatrix() const { return fFilterMatrix; } 347 const SkMatrix& filterMatrix() const { return fFilterMatrix; }
348 348
349 protected: 349 protected:
350 virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE; 350 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
351 351
352 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE { 352 void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE {
353 // lighting shaders are complicated. We just throw up our hands. 353 // lighting shaders are complicated. We just throw up our hands.
354 inout->mulByUnknownFourComponents(); 354 inout->mulByUnknownFourComponents();
355 } 355 }
356 356
357 private: 357 private:
358 typedef GrSingleTextureEffect INHERITED; 358 typedef GrSingleTextureEffect INHERITED;
359 const SkLight* fLight; 359 const SkLight* fLight;
360 SkScalar fSurfaceScale; 360 SkScalar fSurfaceScale;
361 SkMatrix fFilterMatrix; 361 SkMatrix fFilterMatrix;
362 }; 362 };
363 363
364 class GrDiffuseLightingEffect : public GrLightingEffect { 364 class GrDiffuseLightingEffect : public GrLightingEffect {
365 public: 365 public:
366 static GrFragmentProcessor* Create(GrTexture* texture, 366 static GrFragmentProcessor* Create(GrTexture* texture,
367 const SkLight* light, 367 const SkLight* light,
368 SkScalar surfaceScale, 368 SkScalar surfaceScale,
369 const SkMatrix& matrix, 369 const SkMatrix& matrix,
370 SkScalar kd) { 370 SkScalar kd) {
371 return SkNEW_ARGS(GrDiffuseLightingEffect, (texture, 371 return SkNEW_ARGS(GrDiffuseLightingEffect, (texture,
372 light, 372 light,
373 surfaceScale, 373 surfaceScale,
374 matrix, 374 matrix,
375 kd)); 375 kd));
376 } 376 }
377 377
378 virtual const char* name() const SK_OVERRIDE { return "DiffuseLighting"; } 378 const char* name() const SK_OVERRIDE { return "DiffuseLighting"; }
379 379
380 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE; 380 void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVE RRIDE;
381 381
382 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE; 382 GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
383 383
384 SkScalar kd() const { return fKD; } 384 SkScalar kd() const { return fKD; }
385 385
386 private: 386 private:
387 virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE; 387 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
388 388
389 GrDiffuseLightingEffect(GrTexture* texture, 389 GrDiffuseLightingEffect(GrTexture* texture,
390 const SkLight* light, 390 const SkLight* light,
391 SkScalar surfaceScale, 391 SkScalar surfaceScale,
392 const SkMatrix& matrix, 392 const SkMatrix& matrix,
393 SkScalar kd); 393 SkScalar kd);
394 394
395 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 395 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
396 typedef GrLightingEffect INHERITED; 396 typedef GrLightingEffect INHERITED;
397 SkScalar fKD; 397 SkScalar fKD;
398 }; 398 };
399 399
400 class GrSpecularLightingEffect : public GrLightingEffect { 400 class GrSpecularLightingEffect : public GrLightingEffect {
401 public: 401 public:
402 static GrFragmentProcessor* Create(GrTexture* texture, 402 static GrFragmentProcessor* Create(GrTexture* texture,
403 const SkLight* light, 403 const SkLight* light,
404 SkScalar surfaceScale, 404 SkScalar surfaceScale,
405 const SkMatrix& matrix, 405 const SkMatrix& matrix,
406 SkScalar ks, 406 SkScalar ks,
407 SkScalar shininess) { 407 SkScalar shininess) {
408 return SkNEW_ARGS(GrSpecularLightingEffect, (texture, 408 return SkNEW_ARGS(GrSpecularLightingEffect, (texture,
409 light, 409 light,
410 surfaceScale, 410 surfaceScale,
411 matrix, 411 matrix,
412 ks, 412 ks,
413 shininess)); 413 shininess));
414 } 414 }
415 415
416 virtual const char* name() const SK_OVERRIDE { return "SpecularLighting"; } 416 const char* name() const SK_OVERRIDE { return "SpecularLighting"; }
417 417
418 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE; 418 void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const SK_OVE RRIDE;
419 419
420 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE; 420 GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
421 421
422 SkScalar ks() const { return fKS; } 422 SkScalar ks() const { return fKS; }
423 SkScalar shininess() const { return fShininess; } 423 SkScalar shininess() const { return fShininess; }
424 424
425 private: 425 private:
426 virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE; 426 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
427 427
428 GrSpecularLightingEffect(GrTexture* texture, 428 GrSpecularLightingEffect(GrTexture* texture,
429 const SkLight* light, 429 const SkLight* light,
430 SkScalar surfaceScale, 430 SkScalar surfaceScale,
431 const SkMatrix& matrix, 431 const SkMatrix& matrix,
432 SkScalar ks, 432 SkScalar ks,
433 SkScalar shininess); 433 SkScalar shininess);
434 434
435 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 435 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
436 typedef GrLightingEffect INHERITED; 436 typedef GrLightingEffect INHERITED;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 typedef SkRefCnt INHERITED; 479 typedef SkRefCnt INHERITED;
480 }; 480 };
481 481
482 /////////////////////////////////////////////////////////////////////////////// 482 ///////////////////////////////////////////////////////////////////////////////
483 483
484 class GrGLDistantLight : public GrGLLight { 484 class GrGLDistantLight : public GrGLLight {
485 public: 485 public:
486 virtual ~GrGLDistantLight() {} 486 virtual ~GrGLDistantLight() {}
487 virtual void setData(const GrGLProgramDataManager&, 487 virtual void setData(const GrGLProgramDataManager&,
488 const SkLight* light) const SK_OVERRIDE; 488 const SkLight* light) const SK_OVERRIDE;
489 virtual void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE; 489 void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
490 490
491 private: 491 private:
492 typedef GrGLLight INHERITED; 492 typedef GrGLLight INHERITED;
493 UniformHandle fDirectionUni; 493 UniformHandle fDirectionUni;
494 }; 494 };
495 495
496 /////////////////////////////////////////////////////////////////////////////// 496 ///////////////////////////////////////////////////////////////////////////////
497 497
498 class GrGLPointLight : public GrGLLight { 498 class GrGLPointLight : public GrGLLight {
499 public: 499 public:
500 virtual ~GrGLPointLight() {} 500 virtual ~GrGLPointLight() {}
501 virtual void setData(const GrGLProgramDataManager&, 501 virtual void setData(const GrGLProgramDataManager&,
502 const SkLight* light) const SK_OVERRIDE; 502 const SkLight* light) const SK_OVERRIDE;
503 virtual void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE; 503 void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
504 504
505 private: 505 private:
506 typedef GrGLLight INHERITED; 506 typedef GrGLLight INHERITED;
507 UniformHandle fLocationUni; 507 UniformHandle fLocationUni;
508 }; 508 };
509 509
510 /////////////////////////////////////////////////////////////////////////////// 510 ///////////////////////////////////////////////////////////////////////////////
511 511
512 class GrGLSpotLight : public GrGLLight { 512 class GrGLSpotLight : public GrGLLight {
513 public: 513 public:
514 virtual ~GrGLSpotLight() {} 514 virtual ~GrGLSpotLight() {}
515 virtual void setData(const GrGLProgramDataManager&, 515 virtual void setData(const GrGLProgramDataManager&,
516 const SkLight* light) const SK_OVERRIDE; 516 const SkLight* light) const SK_OVERRIDE;
517 virtual void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE; 517 void emitSurfaceToLight(GrGLFPBuilder*, const char* z) SK_OVERRIDE;
518 virtual void emitLightColor(GrGLFPBuilder*, const char *surfaceToLight) SK_O VERRIDE; 518 void emitLightColor(GrGLFPBuilder*, const char *surfaceToLight) SK_OVERRIDE;
519 519
520 private: 520 private:
521 typedef GrGLLight INHERITED; 521 typedef GrGLLight INHERITED;
522 522
523 SkString fLightColorFunc; 523 SkString fLightColorFunc;
524 UniformHandle fLocationUni; 524 UniformHandle fLocationUni;
525 UniformHandle fExponentUni; 525 UniformHandle fExponentUni;
526 UniformHandle fCosOuterConeAngleUni; 526 UniformHandle fCosOuterConeAngleUni;
527 UniformHandle fCosInnerConeAngleUni; 527 UniformHandle fCosInnerConeAngleUni;
528 UniformHandle fConeScaleUni; 528 UniformHandle fConeScaleUni;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 class SkDistantLight : public SkLight { 585 class SkDistantLight : public SkLight {
586 public: 586 public:
587 SkDistantLight(const SkPoint3& direction, SkColor color) 587 SkDistantLight(const SkPoint3& direction, SkColor color)
588 : INHERITED(color), fDirection(direction) { 588 : INHERITED(color), fDirection(direction) {
589 } 589 }
590 590
591 SkPoint3 surfaceToLight(int x, int y, int z, SkScalar surfaceScale) const { 591 SkPoint3 surfaceToLight(int x, int y, int z, SkScalar surfaceScale) const {
592 return fDirection; 592 return fDirection;
593 }; 593 };
594 SkPoint3 lightColor(const SkPoint3&) const { return color(); } 594 SkPoint3 lightColor(const SkPoint3&) const { return color(); }
595 virtual LightType type() const SK_OVERRIDE { return kDistant_LightType; } 595 LightType type() const SK_OVERRIDE { return kDistant_LightType; }
596 const SkPoint3& direction() const { return fDirection; } 596 const SkPoint3& direction() const { return fDirection; }
597 virtual GrGLLight* createGLLight() const SK_OVERRIDE { 597 GrGLLight* createGLLight() const SK_OVERRIDE {
598 #if SK_SUPPORT_GPU 598 #if SK_SUPPORT_GPU
599 return SkNEW(GrGLDistantLight); 599 return SkNEW(GrGLDistantLight);
600 #else 600 #else
601 SkDEBUGFAIL("Should not call in GPU-less build"); 601 SkDEBUGFAIL("Should not call in GPU-less build");
602 return NULL; 602 return NULL;
603 #endif 603 #endif
604 } 604 }
605 virtual bool requiresFragmentPosition() const SK_OVERRIDE { return false; } 605 bool requiresFragmentPosition() const SK_OVERRIDE { return false; }
606 606
607 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE { 607 bool isEqual(const SkLight& other) const SK_OVERRIDE {
608 if (other.type() != kDistant_LightType) { 608 if (other.type() != kDistant_LightType) {
609 return false; 609 return false;
610 } 610 }
611 611
612 const SkDistantLight& o = static_cast<const SkDistantLight&>(other); 612 const SkDistantLight& o = static_cast<const SkDistantLight&>(other);
613 return INHERITED::isEqual(other) && 613 return INHERITED::isEqual(other) &&
614 fDirection == o.fDirection; 614 fDirection == o.fDirection;
615 } 615 }
616 616
617 SkDistantLight(SkReadBuffer& buffer) : INHERITED(buffer) { 617 SkDistantLight(SkReadBuffer& buffer) : INHERITED(buffer) {
618 fDirection = readPoint3(buffer); 618 fDirection = readPoint3(buffer);
619 } 619 }
620 620
621 protected: 621 protected:
622 SkDistantLight(const SkPoint3& direction, const SkPoint3& color) 622 SkDistantLight(const SkPoint3& direction, const SkPoint3& color)
623 : INHERITED(color), fDirection(direction) { 623 : INHERITED(color), fDirection(direction) {
624 } 624 }
625 virtual SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE { 625 SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
626 return new SkDistantLight(direction(), color()); 626 return new SkDistantLight(direction(), color());
627 } 627 }
628 virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE { 628 void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
629 writePoint3(fDirection, buffer); 629 writePoint3(fDirection, buffer);
630 } 630 }
631 631
632 private: 632 private:
633 typedef SkLight INHERITED; 633 typedef SkLight INHERITED;
634 SkPoint3 fDirection; 634 SkPoint3 fDirection;
635 }; 635 };
636 636
637 /////////////////////////////////////////////////////////////////////////////// 637 ///////////////////////////////////////////////////////////////////////////////
638 638
639 class SkPointLight : public SkLight { 639 class SkPointLight : public SkLight {
640 public: 640 public:
641 SkPointLight(const SkPoint3& location, SkColor color) 641 SkPointLight(const SkPoint3& location, SkColor color)
642 : INHERITED(color), fLocation(location) {} 642 : INHERITED(color), fLocation(location) {}
643 643
644 SkPoint3 surfaceToLight(int x, int y, int z, SkScalar surfaceScale) const { 644 SkPoint3 surfaceToLight(int x, int y, int z, SkScalar surfaceScale) const {
645 SkPoint3 direction(fLocation.fX - SkIntToScalar(x), 645 SkPoint3 direction(fLocation.fX - SkIntToScalar(x),
646 fLocation.fY - SkIntToScalar(y), 646 fLocation.fY - SkIntToScalar(y),
647 fLocation.fZ - SkScalarMul(SkIntToScalar(z), surfaceS cale)); 647 fLocation.fZ - SkScalarMul(SkIntToScalar(z), surfaceS cale));
648 direction.normalize(); 648 direction.normalize();
649 return direction; 649 return direction;
650 }; 650 };
651 SkPoint3 lightColor(const SkPoint3&) const { return color(); } 651 SkPoint3 lightColor(const SkPoint3&) const { return color(); }
652 virtual LightType type() const SK_OVERRIDE { return kPoint_LightType; } 652 LightType type() const SK_OVERRIDE { return kPoint_LightType; }
653 const SkPoint3& location() const { return fLocation; } 653 const SkPoint3& location() const { return fLocation; }
654 virtual GrGLLight* createGLLight() const SK_OVERRIDE { 654 GrGLLight* createGLLight() const SK_OVERRIDE {
655 #if SK_SUPPORT_GPU 655 #if SK_SUPPORT_GPU
656 return SkNEW(GrGLPointLight); 656 return SkNEW(GrGLPointLight);
657 #else 657 #else
658 SkDEBUGFAIL("Should not call in GPU-less build"); 658 SkDEBUGFAIL("Should not call in GPU-less build");
659 return NULL; 659 return NULL;
660 #endif 660 #endif
661 } 661 }
662 virtual bool requiresFragmentPosition() const SK_OVERRIDE { return true; } 662 bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
663 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE { 663 bool isEqual(const SkLight& other) const SK_OVERRIDE {
664 if (other.type() != kPoint_LightType) { 664 if (other.type() != kPoint_LightType) {
665 return false; 665 return false;
666 } 666 }
667 const SkPointLight& o = static_cast<const SkPointLight&>(other); 667 const SkPointLight& o = static_cast<const SkPointLight&>(other);
668 return INHERITED::isEqual(other) && 668 return INHERITED::isEqual(other) &&
669 fLocation == o.fLocation; 669 fLocation == o.fLocation;
670 } 670 }
671 virtual SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE { 671 SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
672 SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY); 672 SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
673 matrix.mapPoints(&location2, 1); 673 matrix.mapPoints(&location2, 1);
674 // Use X scale and Y scale on Z and average the result 674 // Use X scale and Y scale on Z and average the result
675 SkPoint locationZ = SkPoint::Make(fLocation.fZ, fLocation.fZ); 675 SkPoint locationZ = SkPoint::Make(fLocation.fZ, fLocation.fZ);
676 matrix.mapVectors(&locationZ, 1); 676 matrix.mapVectors(&locationZ, 1);
677 SkPoint3 location(location2.fX, location2.fY, SkScalarAve(locationZ.fX, locationZ.fY)); 677 SkPoint3 location(location2.fX, location2.fY, SkScalarAve(locationZ.fX, locationZ.fY));
678 return new SkPointLight(location, color()); 678 return new SkPointLight(location, color());
679 } 679 }
680 680
681 SkPointLight(SkReadBuffer& buffer) : INHERITED(buffer) { 681 SkPointLight(SkReadBuffer& buffer) : INHERITED(buffer) {
682 fLocation = readPoint3(buffer); 682 fLocation = readPoint3(buffer);
683 } 683 }
684 684
685 protected: 685 protected:
686 SkPointLight(const SkPoint3& location, const SkPoint3& color) 686 SkPointLight(const SkPoint3& location, const SkPoint3& color)
687 : INHERITED(color), fLocation(location) {} 687 : INHERITED(color), fLocation(location) {}
688 virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE { 688 void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
689 writePoint3(fLocation, buffer); 689 writePoint3(fLocation, buffer);
690 } 690 }
691 691
692 private: 692 private:
693 typedef SkLight INHERITED; 693 typedef SkLight INHERITED;
694 SkPoint3 fLocation; 694 SkPoint3 fLocation;
695 }; 695 };
696 696
697 /////////////////////////////////////////////////////////////////////////////// 697 ///////////////////////////////////////////////////////////////////////////////
698 698
699 class SkSpotLight : public SkLight { 699 class SkSpotLight : public SkLight {
700 public: 700 public:
701 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu larExponent, SkScalar cutoffAngle, SkColor color) 701 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu larExponent, SkScalar cutoffAngle, SkColor color)
702 : INHERITED(color), 702 : INHERITED(color),
703 fLocation(location), 703 fLocation(location),
704 fTarget(target), 704 fTarget(target),
705 fSpecularExponent(SkScalarPin(specularExponent, kSpecularExponentMin, kSp ecularExponentMax)) 705 fSpecularExponent(SkScalarPin(specularExponent, kSpecularExponentMin, kSp ecularExponentMax))
706 { 706 {
707 fS = target - location; 707 fS = target - location;
708 fS.normalize(); 708 fS.normalize();
709 fCosOuterConeAngle = SkScalarCos(SkDegreesToRadians(cutoffAngle)); 709 fCosOuterConeAngle = SkScalarCos(SkDegreesToRadians(cutoffAngle));
710 const SkScalar antiAliasThreshold = 0.016f; 710 const SkScalar antiAliasThreshold = 0.016f;
711 fCosInnerConeAngle = fCosOuterConeAngle + antiAliasThreshold; 711 fCosInnerConeAngle = fCosOuterConeAngle + antiAliasThreshold;
712 fConeScale = SkScalarInvert(antiAliasThreshold); 712 fConeScale = SkScalarInvert(antiAliasThreshold);
713 } 713 }
714 714
715 virtual SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE { 715 SkLight* transform(const SkMatrix& matrix) const SK_OVERRIDE {
716 SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY); 716 SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
717 matrix.mapPoints(&location2, 1); 717 matrix.mapPoints(&location2, 1);
718 // Use X scale and Y scale on Z and average the result 718 // Use X scale and Y scale on Z and average the result
719 SkPoint locationZ = SkPoint::Make(fLocation.fZ, fLocation.fZ); 719 SkPoint locationZ = SkPoint::Make(fLocation.fZ, fLocation.fZ);
720 matrix.mapVectors(&locationZ, 1); 720 matrix.mapVectors(&locationZ, 1);
721 SkPoint3 location(location2.fX, location2.fY, SkScalarAve(locationZ.fX, locationZ.fY)); 721 SkPoint3 location(location2.fX, location2.fY, SkScalarAve(locationZ.fX, locationZ.fY));
722 SkPoint target2 = SkPoint::Make(fTarget.fX, fTarget.fY); 722 SkPoint target2 = SkPoint::Make(fTarget.fX, fTarget.fY);
723 matrix.mapPoints(&target2, 1); 723 matrix.mapPoints(&target2, 1);
724 SkPoint targetZ = SkPoint::Make(fTarget.fZ, fTarget.fZ); 724 SkPoint targetZ = SkPoint::Make(fTarget.fZ, fTarget.fZ);
725 matrix.mapVectors(&targetZ, 1); 725 matrix.mapVectors(&targetZ, 1);
(...skipping 15 matching lines...) Expand all
741 if (cosAngle < fCosOuterConeAngle) { 741 if (cosAngle < fCosOuterConeAngle) {
742 return SkPoint3(0, 0, 0); 742 return SkPoint3(0, 0, 0);
743 } 743 }
744 SkScalar scale = SkScalarPow(cosAngle, fSpecularExponent); 744 SkScalar scale = SkScalarPow(cosAngle, fSpecularExponent);
745 if (cosAngle < fCosInnerConeAngle) { 745 if (cosAngle < fCosInnerConeAngle) {
746 scale = SkScalarMul(scale, cosAngle - fCosOuterConeAngle); 746 scale = SkScalarMul(scale, cosAngle - fCosOuterConeAngle);
747 return color() * SkScalarMul(scale, fConeScale); 747 return color() * SkScalarMul(scale, fConeScale);
748 } 748 }
749 return color() * scale; 749 return color() * scale;
750 } 750 }
751 virtual GrGLLight* createGLLight() const SK_OVERRIDE { 751 GrGLLight* createGLLight() const SK_OVERRIDE {
752 #if SK_SUPPORT_GPU 752 #if SK_SUPPORT_GPU
753 return SkNEW(GrGLSpotLight); 753 return SkNEW(GrGLSpotLight);
754 #else 754 #else
755 SkDEBUGFAIL("Should not call in GPU-less build"); 755 SkDEBUGFAIL("Should not call in GPU-less build");
756 return NULL; 756 return NULL;
757 #endif 757 #endif
758 } 758 }
759 virtual bool requiresFragmentPosition() const SK_OVERRIDE { return true; } 759 bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
760 virtual LightType type() const SK_OVERRIDE { return kSpot_LightType; } 760 LightType type() const SK_OVERRIDE { return kSpot_LightType; }
761 const SkPoint3& location() const { return fLocation; } 761 const SkPoint3& location() const { return fLocation; }
762 const SkPoint3& target() const { return fTarget; } 762 const SkPoint3& target() const { return fTarget; }
763 SkScalar specularExponent() const { return fSpecularExponent; } 763 SkScalar specularExponent() const { return fSpecularExponent; }
764 SkScalar cosInnerConeAngle() const { return fCosInnerConeAngle; } 764 SkScalar cosInnerConeAngle() const { return fCosInnerConeAngle; }
765 SkScalar cosOuterConeAngle() const { return fCosOuterConeAngle; } 765 SkScalar cosOuterConeAngle() const { return fCosOuterConeAngle; }
766 SkScalar coneScale() const { return fConeScale; } 766 SkScalar coneScale() const { return fConeScale; }
767 const SkPoint3& s() const { return fS; } 767 const SkPoint3& s() const { return fS; }
768 768
769 SkSpotLight(SkReadBuffer& buffer) : INHERITED(buffer) { 769 SkSpotLight(SkReadBuffer& buffer) : INHERITED(buffer) {
770 fLocation = readPoint3(buffer); 770 fLocation = readPoint3(buffer);
(...skipping 13 matching lines...) Expand all
784 : INHERITED(color), 784 : INHERITED(color),
785 fLocation(location), 785 fLocation(location),
786 fTarget(target), 786 fTarget(target),
787 fSpecularExponent(specularExponent), 787 fSpecularExponent(specularExponent),
788 fCosOuterConeAngle(cosOuterConeAngle), 788 fCosOuterConeAngle(cosOuterConeAngle),
789 fCosInnerConeAngle(cosInnerConeAngle), 789 fCosInnerConeAngle(cosInnerConeAngle),
790 fConeScale(coneScale), 790 fConeScale(coneScale),
791 fS(s) 791 fS(s)
792 { 792 {
793 } 793 }
794 virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE { 794 void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
795 writePoint3(fLocation, buffer); 795 writePoint3(fLocation, buffer);
796 writePoint3(fTarget, buffer); 796 writePoint3(fTarget, buffer);
797 buffer.writeScalar(fSpecularExponent); 797 buffer.writeScalar(fSpecularExponent);
798 buffer.writeScalar(fCosOuterConeAngle); 798 buffer.writeScalar(fCosOuterConeAngle);
799 buffer.writeScalar(fCosInnerConeAngle); 799 buffer.writeScalar(fCosInnerConeAngle);
800 buffer.writeScalar(fConeScale); 800 buffer.writeScalar(fConeScale);
801 writePoint3(fS, buffer); 801 writePoint3(fS, buffer);
802 } 802 }
803 803
804 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE { 804 bool isEqual(const SkLight& other) const SK_OVERRIDE {
805 if (other.type() != kSpot_LightType) { 805 if (other.type() != kSpot_LightType) {
806 return false; 806 return false;
807 } 807 }
808 808
809 const SkSpotLight& o = static_cast<const SkSpotLight&>(other); 809 const SkSpotLight& o = static_cast<const SkSpotLight&>(other);
810 return INHERITED::isEqual(other) && 810 return INHERITED::isEqual(other) &&
811 fLocation == o.fLocation && 811 fLocation == o.fLocation &&
812 fTarget == o.fTarget && 812 fTarget == o.fTarget &&
813 fSpecularExponent == o.fSpecularExponent && 813 fSpecularExponent == o.fSpecularExponent &&
814 fCosOuterConeAngle == o.fCosOuterConeAngle; 814 fCosOuterConeAngle == o.fCosOuterConeAngle;
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 const char* outputColor, 1218 const char* outputColor,
1219 const char* inputColor, 1219 const char* inputColor,
1220 const TransformedCoordsArray&, 1220 const TransformedCoordsArray&,
1221 const TextureSamplerArray&) SK_OVERRIDE; 1221 const TextureSamplerArray&) SK_OVERRIDE;
1222 1222
1223 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe yBuilder* b); 1223 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe yBuilder* b);
1224 1224
1225 /** 1225 /**
1226 * Subclasses of GrGLLightingEffect must call INHERITED::setData(); 1226 * Subclasses of GrGLLightingEffect must call INHERITED::setData();
1227 */ 1227 */
1228 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 1228 void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
1229 1229
1230 protected: 1230 protected:
1231 virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) = 0; 1231 virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) = 0;
1232 1232
1233 private: 1233 private:
1234 typedef GrGLFragmentProcessor INHERITED; 1234 typedef GrGLFragmentProcessor INHERITED;
1235 1235
1236 UniformHandle fImageIncrementUni; 1236 UniformHandle fImageIncrementUni;
1237 UniformHandle fSurfaceScaleUni; 1237 UniformHandle fSurfaceScaleUni;
1238 GrGLLight* fLight; 1238 GrGLLight* fLight;
1239 }; 1239 };
1240 1240
1241 /////////////////////////////////////////////////////////////////////////////// 1241 ///////////////////////////////////////////////////////////////////////////////
1242 1242
1243 class GrGLDiffuseLightingEffect : public GrGLLightingEffect { 1243 class GrGLDiffuseLightingEffect : public GrGLLightingEffect {
1244 public: 1244 public:
1245 GrGLDiffuseLightingEffect(const GrProcessor&); 1245 GrGLDiffuseLightingEffect(const GrProcessor&);
1246 virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE; 1246 void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE;
1247 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 1247 void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
1248 1248
1249 private: 1249 private:
1250 typedef GrGLLightingEffect INHERITED; 1250 typedef GrGLLightingEffect INHERITED;
1251 1251
1252 UniformHandle fKDUni; 1252 UniformHandle fKDUni;
1253 }; 1253 };
1254 1254
1255 /////////////////////////////////////////////////////////////////////////////// 1255 ///////////////////////////////////////////////////////////////////////////////
1256 1256
1257 class GrGLSpecularLightingEffect : public GrGLLightingEffect { 1257 class GrGLSpecularLightingEffect : public GrGLLightingEffect {
1258 public: 1258 public:
1259 GrGLSpecularLightingEffect(const GrProcessor&); 1259 GrGLSpecularLightingEffect(const GrProcessor&);
1260 virtual void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE; 1260 void emitLightFunc(GrGLFPBuilder*, SkString* funcName) SK_OVERRIDE;
1261 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 1261 void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE;
1262 1262
1263 private: 1263 private:
1264 typedef GrGLLightingEffect INHERITED; 1264 typedef GrGLLightingEffect INHERITED;
1265 1265
1266 UniformHandle fKSUni; 1266 UniformHandle fKSUni;
1267 UniformHandle fShininessUni; 1267 UniformHandle fShininessUni;
1268 }; 1268 };
1269 1269
1270 /////////////////////////////////////////////////////////////////////////////// 1270 ///////////////////////////////////////////////////////////////////////////////
1271 1271
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
1716 1716
1717 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 1717 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
1718 } 1718 }
1719 1719
1720 #endif 1720 #endif
1721 1721
1722 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1722 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1723 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1723 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1724 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1724 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1725 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1725 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkDisplacementMapEffect.cpp ('k') | src/effects/SkLumaColorFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698