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

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

Issue 134163010: Refactor read and write buffers. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: original write flags were fine Created 6 years, 10 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
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"
11 #include "SkFlattenableBuffers.h" 11 #include "SkReadBuffer.h"
12 #include "SkOrderedReadBuffer.h" 12 #include "SkWriteBuffer.h"
13 #include "SkOrderedWriteBuffer.h" 13 #include "SkReadBuffer.h"
14 #include "SkWriteBuffer.h"
14 #include "SkTypes.h" 15 #include "SkTypes.h"
15 16
16 #if SK_SUPPORT_GPU 17 #if SK_SUPPORT_GPU
17 #include "effects/GrSingleTextureEffect.h" 18 #include "effects/GrSingleTextureEffect.h"
18 #include "gl/GrGLEffect.h" 19 #include "gl/GrGLEffect.h"
19 #include "GrEffect.h" 20 #include "GrEffect.h"
20 #include "GrTBackendEffectFactory.h" 21 #include "GrTBackendEffectFactory.h"
21 22
22 class GrGLDiffuseLightingEffect; 23 class GrGLDiffuseLightingEffect;
23 class GrGLSpecularLightingEffect; 24 class GrGLSpecularLightingEffect;
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 m[5] = SkGetPackedA32(*row1++); 237 m[5] = SkGetPackedA32(*row1++);
237 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale); 238 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale);
238 *dptr++ = lightingType.light(bottomNormal(m, surfaceScale), surfaceT oLight, l->lightColor(surfaceToLight)); 239 *dptr++ = lightingType.light(bottomNormal(m, surfaceScale), surfaceT oLight, l->lightColor(surfaceToLight));
239 } 240 }
240 shiftMatrixLeft(m); 241 shiftMatrixLeft(m);
241 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale); 242 surfaceToLight = l->surfaceToLight(x, y, m[4], surfaceScale);
242 *dptr++ = lightingType.light(bottomRightNormal(m, surfaceScale), surface ToLight, l->lightColor(surfaceToLight)); 243 *dptr++ = lightingType.light(bottomRightNormal(m, surfaceScale), surface ToLight, l->lightColor(surfaceToLight));
243 } 244 }
244 } 245 }
245 246
246 SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) { 247 SkPoint3 readPoint3(SkReadBuffer& buffer) {
247 SkPoint3 point; 248 SkPoint3 point;
248 point.fX = buffer.readScalar(); 249 point.fX = buffer.readScalar();
249 point.fY = buffer.readScalar(); 250 point.fY = buffer.readScalar();
250 point.fZ = buffer.readScalar(); 251 point.fZ = buffer.readScalar();
251 buffer.validate(SkScalarIsFinite(point.fX) && 252 buffer.validate(SkScalarIsFinite(point.fX) &&
252 SkScalarIsFinite(point.fY) && 253 SkScalarIsFinite(point.fY) &&
253 SkScalarIsFinite(point.fZ)); 254 SkScalarIsFinite(point.fZ));
254 return point; 255 return point;
255 }; 256 };
256 257
257 void writePoint3(const SkPoint3& point, SkFlattenableWriteBuffer& buffer) { 258 void writePoint3(const SkPoint3& point, SkWriteBuffer& buffer) {
258 buffer.writeScalar(point.fX); 259 buffer.writeScalar(point.fX);
259 buffer.writeScalar(point.fY); 260 buffer.writeScalar(point.fY);
260 buffer.writeScalar(point.fZ); 261 buffer.writeScalar(point.fZ);
261 }; 262 };
262 263
263 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { 264 class SkDiffuseLightingImageFilter : public SkLightingImageFilter {
264 public: 265 public:
265 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, 266 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
266 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect); 267 SkScalar kd, SkImageFilter* input, const CropRe ct* cropRect);
267 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter) 268 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter)
268 SkScalar kd() const { return fKD; } 269 SkScalar kd() const { return fKD; }
269 270
270 protected: 271 protected:
271 explicit SkDiffuseLightingImageFilter(SkFlattenableReadBuffer& buffer); 272 explicit SkDiffuseLightingImageFilter(SkReadBuffer& buffer);
272 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; 273 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
273 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 274 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
274 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; 275 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
275 #if SK_SUPPORT_GPU 276 #if SK_SUPPORT_GPU
276 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*, const SkMatrix& m atrix, const SkIRect& bounds) const SK_OVERRIDE; 277 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*, const SkMatrix& m atrix, const SkIRect& bounds) const SK_OVERRIDE;
277 #endif 278 #endif
278 279
279 private: 280 private:
280 typedef SkLightingImageFilter INHERITED; 281 typedef SkLightingImageFilter INHERITED;
281 SkScalar fKD; 282 SkScalar fKD;
282 }; 283 };
283 284
284 class SkSpecularLightingImageFilter : public SkLightingImageFilter { 285 class SkSpecularLightingImageFilter : public SkLightingImageFilter {
285 public: 286 public:
286 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect); 287 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect);
287 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter) 288 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter)
288 289
289 SkScalar ks() const { return fKS; } 290 SkScalar ks() const { return fKS; }
290 SkScalar shininess() const { return fShininess; } 291 SkScalar shininess() const { return fShininess; }
291 292
292 protected: 293 protected:
293 explicit SkSpecularLightingImageFilter(SkFlattenableReadBuffer& buffer); 294 explicit SkSpecularLightingImageFilter(SkReadBuffer& buffer);
294 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; 295 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
295 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 296 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
296 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; 297 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
297 #if SK_SUPPORT_GPU 298 #if SK_SUPPORT_GPU
298 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*, const SkMatrix& m atrix, const SkIRect& bounds) const SK_OVERRIDE; 299 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*, const SkMatrix& m atrix, const SkIRect& bounds) const SK_OVERRIDE;
299 #endif 300 #endif
300 301
301 private: 302 private:
302 typedef SkLightingImageFilter INHERITED; 303 typedef SkLightingImageFilter INHERITED;
303 SkScalar fKS; 304 SkScalar fKS;
304 SkScalar fShininess; 305 SkScalar fShininess;
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 const SkPoint3& color() const { return fColor; } 521 const SkPoint3& color() const { return fColor; }
521 virtual GrGLLight* createGLLight() const = 0; 522 virtual GrGLLight* createGLLight() const = 0;
522 virtual bool isEqual(const SkLight& other) const { 523 virtual bool isEqual(const SkLight& other) const {
523 return fColor == other.fColor; 524 return fColor == other.fColor;
524 } 525 }
525 // Called to know whether the generated GrGLLight will require access to the fragment position. 526 // Called to know whether the generated GrGLLight will require access to the fragment position.
526 virtual bool requiresFragmentPosition() const = 0; 527 virtual bool requiresFragmentPosition() const = 0;
527 virtual SkLight* transform(const SkMatrix& matrix) const = 0; 528 virtual SkLight* transform(const SkMatrix& matrix) const = 0;
528 529
529 // Defined below SkLight's subclasses. 530 // Defined below SkLight's subclasses.
530 void flattenLight(SkFlattenableWriteBuffer& buffer) const; 531 void flattenLight(SkWriteBuffer& buffer) const;
531 static SkLight* UnflattenLight(SkFlattenableReadBuffer& buffer); 532 static SkLight* UnflattenLight(SkReadBuffer& buffer);
532 533
533 protected: 534 protected:
534 SkLight(SkColor color) 535 SkLight(SkColor color)
535 : fColor(SkIntToScalar(SkColorGetR(color)), 536 : fColor(SkIntToScalar(SkColorGetR(color)),
536 SkIntToScalar(SkColorGetG(color)), 537 SkIntToScalar(SkColorGetG(color)),
537 SkIntToScalar(SkColorGetB(color))) {} 538 SkIntToScalar(SkColorGetB(color))) {}
538 SkLight(const SkPoint3& color) 539 SkLight(const SkPoint3& color)
539 : fColor(color) {} 540 : fColor(color) {}
540 SkLight(SkFlattenableReadBuffer& buffer) { 541 SkLight(SkReadBuffer& buffer) {
541 fColor = readPoint3(buffer); 542 fColor = readPoint3(buffer);
542 } 543 }
543 544
544 virtual void onFlattenLight(SkFlattenableWriteBuffer& buffer) const = 0; 545 virtual void onFlattenLight(SkWriteBuffer& buffer) const = 0;
545 546
546 547
547 private: 548 private:
548 typedef SkRefCnt INHERITED; 549 typedef SkRefCnt INHERITED;
549 SkPoint3 fColor; 550 SkPoint3 fColor;
550 }; 551 };
551 552
552 /////////////////////////////////////////////////////////////////////////////// 553 ///////////////////////////////////////////////////////////////////////////////
553 554
554 class SkDistantLight : public SkLight { 555 class SkDistantLight : public SkLight {
(...skipping 21 matching lines...) Expand all
576 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE { 577 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE {
577 if (other.type() != kDistant_LightType) { 578 if (other.type() != kDistant_LightType) {
578 return false; 579 return false;
579 } 580 }
580 581
581 const SkDistantLight& o = static_cast<const SkDistantLight&>(other); 582 const SkDistantLight& o = static_cast<const SkDistantLight&>(other);
582 return INHERITED::isEqual(other) && 583 return INHERITED::isEqual(other) &&
583 fDirection == o.fDirection; 584 fDirection == o.fDirection;
584 } 585 }
585 586
586 SkDistantLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 587 SkDistantLight(SkReadBuffer& buffer) : INHERITED(buffer) {
587 fDirection = readPoint3(buffer); 588 fDirection = readPoint3(buffer);
588 } 589 }
589 590
590 protected: 591 protected:
591 SkDistantLight(const SkPoint3& direction, const SkPoint3& color) 592 SkDistantLight(const SkPoint3& direction, const SkPoint3& color)
592 : INHERITED(color), fDirection(direction) { 593 : INHERITED(color), fDirection(direction) {
593 } 594 }
594 virtual SkLight* transform(const SkMatrix& matrix) const { 595 virtual SkLight* transform(const SkMatrix& matrix) const {
595 return new SkDistantLight(direction(), color()); 596 return new SkDistantLight(direction(), color());
596 } 597 }
597 virtual void onFlattenLight(SkFlattenableWriteBuffer& buffer) const SK_OVERR IDE { 598 virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
598 writePoint3(fDirection, buffer); 599 writePoint3(fDirection, buffer);
599 } 600 }
600 601
601 private: 602 private:
602 typedef SkLight INHERITED; 603 typedef SkLight INHERITED;
603 SkPoint3 fDirection; 604 SkPoint3 fDirection;
604 }; 605 };
605 606
606 /////////////////////////////////////////////////////////////////////////////// 607 ///////////////////////////////////////////////////////////////////////////////
607 608
(...skipping 29 matching lines...) Expand all
637 return INHERITED::isEqual(other) && 638 return INHERITED::isEqual(other) &&
638 fLocation == o.fLocation; 639 fLocation == o.fLocation;
639 } 640 }
640 virtual SkLight* transform(const SkMatrix& matrix) const { 641 virtual SkLight* transform(const SkMatrix& matrix) const {
641 SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY); 642 SkPoint location2 = SkPoint::Make(fLocation.fX, fLocation.fY);
642 matrix.mapPoints(&location2, 1); 643 matrix.mapPoints(&location2, 1);
643 SkPoint3 location(location2.fX, location2.fY, fLocation.fZ); 644 SkPoint3 location(location2.fX, location2.fY, fLocation.fZ);
644 return new SkPointLight(location, color()); 645 return new SkPointLight(location, color());
645 } 646 }
646 647
647 SkPointLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 648 SkPointLight(SkReadBuffer& buffer) : INHERITED(buffer) {
648 fLocation = readPoint3(buffer); 649 fLocation = readPoint3(buffer);
649 } 650 }
650 651
651 protected: 652 protected:
652 SkPointLight(const SkPoint3& location, const SkPoint3& color) 653 SkPointLight(const SkPoint3& location, const SkPoint3& color)
653 : INHERITED(color), fLocation(location) {} 654 : INHERITED(color), fLocation(location) {}
654 virtual void onFlattenLight(SkFlattenableWriteBuffer& buffer) const SK_OVERR IDE { 655 virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
655 writePoint3(fLocation, buffer); 656 writePoint3(fLocation, buffer);
656 } 657 }
657 658
658 private: 659 private:
659 typedef SkLight INHERITED; 660 typedef SkLight INHERITED;
660 SkPoint3 fLocation; 661 SkPoint3 fLocation;
661 }; 662 };
662 663
663 /////////////////////////////////////////////////////////////////////////////// 664 ///////////////////////////////////////////////////////////////////////////////
664 665
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 virtual bool requiresFragmentPosition() const SK_OVERRIDE { return true; } 719 virtual bool requiresFragmentPosition() const SK_OVERRIDE { return true; }
719 virtual LightType type() const { return kSpot_LightType; } 720 virtual LightType type() const { return kSpot_LightType; }
720 const SkPoint3& location() const { return fLocation; } 721 const SkPoint3& location() const { return fLocation; }
721 const SkPoint3& target() const { return fTarget; } 722 const SkPoint3& target() const { return fTarget; }
722 SkScalar specularExponent() const { return fSpecularExponent; } 723 SkScalar specularExponent() const { return fSpecularExponent; }
723 SkScalar cosInnerConeAngle() const { return fCosInnerConeAngle; } 724 SkScalar cosInnerConeAngle() const { return fCosInnerConeAngle; }
724 SkScalar cosOuterConeAngle() const { return fCosOuterConeAngle; } 725 SkScalar cosOuterConeAngle() const { return fCosOuterConeAngle; }
725 SkScalar coneScale() const { return fConeScale; } 726 SkScalar coneScale() const { return fConeScale; }
726 const SkPoint3& s() const { return fS; } 727 const SkPoint3& s() const { return fS; }
727 728
728 SkSpotLight(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 729 SkSpotLight(SkReadBuffer& buffer) : INHERITED(buffer) {
729 fLocation = readPoint3(buffer); 730 fLocation = readPoint3(buffer);
730 fTarget = readPoint3(buffer); 731 fTarget = readPoint3(buffer);
731 fSpecularExponent = buffer.readScalar(); 732 fSpecularExponent = buffer.readScalar();
732 fCosOuterConeAngle = buffer.readScalar(); 733 fCosOuterConeAngle = buffer.readScalar();
733 fCosInnerConeAngle = buffer.readScalar(); 734 fCosInnerConeAngle = buffer.readScalar();
734 fConeScale = buffer.readScalar(); 735 fConeScale = buffer.readScalar();
735 fS = readPoint3(buffer); 736 fS = readPoint3(buffer);
736 buffer.validate(SkScalarIsFinite(fSpecularExponent) && 737 buffer.validate(SkScalarIsFinite(fSpecularExponent) &&
737 SkScalarIsFinite(fCosOuterConeAngle) && 738 SkScalarIsFinite(fCosOuterConeAngle) &&
738 SkScalarIsFinite(fCosInnerConeAngle) && 739 SkScalarIsFinite(fCosInnerConeAngle) &&
739 SkScalarIsFinite(fConeScale)); 740 SkScalarIsFinite(fConeScale));
740 } 741 }
741 protected: 742 protected:
742 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co neScale, const SkPoint3& s, const SkPoint3& color) 743 SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specu larExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar co neScale, const SkPoint3& s, const SkPoint3& color)
743 : INHERITED(color), 744 : INHERITED(color),
744 fLocation(location), 745 fLocation(location),
745 fTarget(target), 746 fTarget(target),
746 fSpecularExponent(specularExponent), 747 fSpecularExponent(specularExponent),
747 fCosOuterConeAngle(cosOuterConeAngle), 748 fCosOuterConeAngle(cosOuterConeAngle),
748 fCosInnerConeAngle(cosInnerConeAngle), 749 fCosInnerConeAngle(cosInnerConeAngle),
749 fConeScale(coneScale), 750 fConeScale(coneScale),
750 fS(s) 751 fS(s)
751 { 752 {
752 } 753 }
753 virtual void onFlattenLight(SkFlattenableWriteBuffer& buffer) const SK_OVERR IDE { 754 virtual void onFlattenLight(SkWriteBuffer& buffer) const SK_OVERRIDE {
754 writePoint3(fLocation, buffer); 755 writePoint3(fLocation, buffer);
755 writePoint3(fTarget, buffer); 756 writePoint3(fTarget, buffer);
756 buffer.writeScalar(fSpecularExponent); 757 buffer.writeScalar(fSpecularExponent);
757 buffer.writeScalar(fCosOuterConeAngle); 758 buffer.writeScalar(fCosOuterConeAngle);
758 buffer.writeScalar(fCosInnerConeAngle); 759 buffer.writeScalar(fCosInnerConeAngle);
759 buffer.writeScalar(fConeScale); 760 buffer.writeScalar(fConeScale);
760 writePoint3(fS, buffer); 761 writePoint3(fS, buffer);
761 } 762 }
762 763
763 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE { 764 virtual bool isEqual(const SkLight& other) const SK_OVERRIDE {
(...skipping 23 matching lines...) Expand all
787 SkPoint3 fS; 788 SkPoint3 fS;
788 }; 789 };
789 790
790 // According to the spec, the specular term should be in the range [1, 128] : 791 // According to the spec, the specular term should be in the range [1, 128] :
791 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingSpecularExponentAttri bute 792 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingSpecularExponentAttri bute
792 const SkScalar SkSpotLight::kSpecularExponentMin = 1.0f; 793 const SkScalar SkSpotLight::kSpecularExponentMin = 1.0f;
793 const SkScalar SkSpotLight::kSpecularExponentMax = 128.0f; 794 const SkScalar SkSpotLight::kSpecularExponentMax = 128.0f;
794 795
795 /////////////////////////////////////////////////////////////////////////////// 796 ///////////////////////////////////////////////////////////////////////////////
796 797
797 void SkLight::flattenLight(SkFlattenableWriteBuffer& buffer) const { 798 void SkLight::flattenLight(SkWriteBuffer& buffer) const {
798 // Write type first, then baseclass, then subclass. 799 // Write type first, then baseclass, then subclass.
799 buffer.writeInt(this->type()); 800 buffer.writeInt(this->type());
800 writePoint3(fColor, buffer); 801 writePoint3(fColor, buffer);
801 this->onFlattenLight(buffer); 802 this->onFlattenLight(buffer);
802 } 803 }
803 804
804 /*static*/ SkLight* SkLight::UnflattenLight(SkFlattenableReadBuffer& buffer) { 805 /*static*/ SkLight* SkLight::UnflattenLight(SkReadBuffer& buffer) {
805 // Read type first. 806 // Read type first.
806 const SkLight::LightType type = (SkLight::LightType)buffer.readInt(); 807 const SkLight::LightType type = (SkLight::LightType)buffer.readInt();
807 switch (type) { 808 switch (type) {
808 // Each of these constructors must first call SkLight's, so we'll read t he baseclass 809 // Each of these constructors must first call SkLight's, so we'll read t he baseclass
809 // then subclass, same order as flattenLight. 810 // then subclass, same order as flattenLight.
810 case SkLight::kDistant_LightType: return SkNEW_ARGS(SkDistantLight, (buf fer)); 811 case SkLight::kDistant_LightType: return SkNEW_ARGS(SkDistantLight, (buf fer));
811 case SkLight::kPoint_LightType: return SkNEW_ARGS(SkPointLight, (buffe r)); 812 case SkLight::kPoint_LightType: return SkNEW_ARGS(SkPointLight, (buffe r));
812 case SkLight::kSpot_LightType: return SkNEW_ARGS(SkSpotLight, (buffer )); 813 case SkLight::kSpot_LightType: return SkNEW_ARGS(SkSpotLight, (buffer ));
813 default: 814 default:
814 SkDEBUGFAIL("Unknown LightType."); 815 SkDEBUGFAIL("Unknown LightType.");
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR ect) { 879 SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropR ect) {
879 return SkNEW_ARGS(SkSpecularLightingImageFilter, 880 return SkNEW_ARGS(SkSpecularLightingImageFilter,
880 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl e, lightColor)), 881 (SkNEW_ARGS(SkSpotLight, (location, target, specularExponent, cutoffAngl e, lightColor)),
881 surfaceScale, ks, shininess, input, cropRect)); 882 surfaceScale, ks, shininess, input, cropRect));
882 } 883 }
883 884
884 SkLightingImageFilter::~SkLightingImageFilter() { 885 SkLightingImageFilter::~SkLightingImageFilter() {
885 SkSafeUnref(fLight); 886 SkSafeUnref(fLight);
886 } 887 }
887 888
888 SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) 889 SkLightingImageFilter::SkLightingImageFilter(SkReadBuffer& buffer)
889 : INHERITED(1, buffer) { 890 : INHERITED(1, buffer) {
890 fLight = SkLight::UnflattenLight(buffer); 891 fLight = SkLight::UnflattenLight(buffer);
891 fSurfaceScale = buffer.readScalar(); 892 fSurfaceScale = buffer.readScalar();
892 buffer.validate(SkScalarIsFinite(fSurfaceScale)); 893 buffer.validate(SkScalarIsFinite(fSurfaceScale));
893 } 894 }
894 895
895 void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { 896 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
896 this->INHERITED::flatten(buffer); 897 this->INHERITED::flatten(buffer);
897 fLight->flattenLight(buffer); 898 fLight->flattenLight(buffer);
898 buffer.writeScalar(fSurfaceScale); 899 buffer.writeScalar(fSurfaceScale);
899 } 900 }
900 901
901 /////////////////////////////////////////////////////////////////////////////// 902 ///////////////////////////////////////////////////////////////////////////////
902 903
903 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect = NULL) 904 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkLight* light, SkSca lar surfaceScale, SkScalar kd, SkImageFilter* input, const CropRect* cropRect = NULL)
904 : SkLightingImageFilter(light, surfaceScale, input, cropRect), 905 : SkLightingImageFilter(light, surfaceScale, input, cropRect),
905 // According to the spec, kd can be any non-negative number : 906 // According to the spec, kd can be any non-negative number :
906 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement 907 // http://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement
907 fKD(kd < 0 ? 0 : kd) 908 fKD(kd < 0 ? 0 : kd)
908 { 909 {
909 } 910 }
910 911
911 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff er& buffer) 912 SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkReadBuffer& buffer)
912 : INHERITED(buffer) 913 : INHERITED(buffer)
913 { 914 {
914 fKD = buffer.readScalar(); 915 fKD = buffer.readScalar();
915 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0)); 916 buffer.validate(SkScalarIsFinite(fKD) && (fKD >= 0));
916 } 917 }
917 918
918 void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) con st { 919 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
919 this->INHERITED::flatten(buffer); 920 this->INHERITED::flatten(buffer);
920 buffer.writeScalar(fKD); 921 buffer.writeScalar(fKD);
921 } 922 }
922 923
923 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy, 924 bool SkDiffuseLightingImageFilter::onFilterImage(Proxy* proxy,
924 const SkBitmap& source, 925 const SkBitmap& source,
925 const SkMatrix& ctm, 926 const SkMatrix& ctm,
926 SkBitmap* dst, 927 SkBitmap* dst,
927 SkIPoint* offset) { 928 SkIPoint* offset) {
928 SkImageFilter* input = getInput(0); 929 SkImageFilter* input = getInput(0);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 992
992 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect) 993 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input, const CropRect* cropRect)
993 : SkLightingImageFilter(light, surfaceScale, input, cropRect), 994 : SkLightingImageFilter(light, surfaceScale, input, cropRect),
994 // According to the spec, ks can be any non-negative number : 995 // According to the spec, ks can be any non-negative number :
995 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement 996 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement
996 fKS(ks < 0 ? 0 : ks), 997 fKS(ks < 0 ? 0 : ks),
997 fShininess(shininess) 998 fShininess(shininess)
998 { 999 {
999 } 1000 }
1000 1001
1001 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu ffer& buffer) 1002 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkReadBuffer& buffe r)
1002 : INHERITED(buffer) 1003 : INHERITED(buffer)
1003 { 1004 {
1004 fKS = buffer.readScalar(); 1005 fKS = buffer.readScalar();
1005 fShininess = buffer.readScalar(); 1006 fShininess = buffer.readScalar();
1006 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) && 1007 buffer.validate(SkScalarIsFinite(fKS) && (fKS >= 0) &&
1007 SkScalarIsFinite(fShininess)); 1008 SkScalarIsFinite(fShininess));
1008 } 1009 }
1009 1010
1010 void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) co nst { 1011 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const {
1011 this->INHERITED::flatten(buffer); 1012 this->INHERITED::flatten(buffer);
1012 buffer.writeScalar(fKS); 1013 buffer.writeScalar(fKS);
1013 buffer.writeScalar(fShininess); 1014 buffer.writeScalar(fShininess);
1014 } 1015 }
1015 1016
1016 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy, 1017 bool SkSpecularLightingImageFilter::onFilterImage(Proxy* proxy,
1017 const SkBitmap& source, 1018 const SkBitmap& source,
1018 const SkMatrix& ctm, 1019 const SkMatrix& ctm,
1019 SkBitmap* dst, 1020 SkBitmap* dst,
1020 SkIPoint* offset) { 1021 SkIPoint* offset) {
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
1607 1608
1608 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 1609 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
1609 } 1610 }
1610 1611
1611 #endif 1612 #endif
1612 1613
1613 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1614 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1614 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1615 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1615 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1616 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1616 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1617 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698