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

Side by Side Diff: src/gpu/effects/GrDashingEffect.cpp

Issue 774133003: Revert of create and thread batch tracker object (Closed) Base URL: https://skia.googlesource.com/skia.git@2_vertex_attr
Patch Set: Created 6 years 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 2014 Google Inc. 2 * Copyright 2014 Google Inc.
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 "GrDashingEffect.h" 8 #include "GrDashingEffect.h"
9 9
10 #include "../GrAARectRenderer.h" 10 #include "../GrAARectRenderer.h"
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 497
498 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 498 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
499 499
500 typedef GrGeometryProcessor INHERITED; 500 typedef GrGeometryProcessor INHERITED;
501 }; 501 };
502 502
503 ////////////////////////////////////////////////////////////////////////////// 503 //////////////////////////////////////////////////////////////////////////////
504 504
505 class GLDashingCircleEffect : public GrGLGeometryProcessor { 505 class GLDashingCircleEffect : public GrGLGeometryProcessor {
506 public: 506 public:
507 GLDashingCircleEffect(const GrBackendProcessorFactory&, 507 GLDashingCircleEffect(const GrBackendProcessorFactory&, const GrProcessor&);
508 const GrGeometryProcessor&,
509 const GrBatchTracker&);
510 508
511 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 509 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
512 510
513 static inline void GenKey(const GrGeometryProcessor&, 511 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe yBuilder*);
514 const GrBatchTracker&,
515 const GrGLCaps&,
516 GrProcessorKeyBuilder*);
517 512
518 virtual void setData(const GrGLProgramDataManager&, 513 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
519 const GrGeometryProcessor&,
520 const GrBatchTracker&) SK_OVERRIDE;
521 514
522 private: 515 private:
523 GrGLProgramDataManager::UniformHandle fParamUniform; 516 GrGLProgramDataManager::UniformHandle fParamUniform;
524 SkScalar fPrevRadius; 517 SkScalar fPrevRadius;
525 SkScalar fPrevCenterX; 518 SkScalar fPrevCenterX;
526 SkScalar fPrevIntervalLength; 519 SkScalar fPrevIntervalLength;
527 typedef GrGLGeometryProcessor INHERITED; 520 typedef GrGLGeometryProcessor INHERITED;
528 }; 521 };
529 522
530 GLDashingCircleEffect::GLDashingCircleEffect(const GrBackendProcessorFactory& fa ctory, 523 GLDashingCircleEffect::GLDashingCircleEffect(const GrBackendProcessorFactory& fa ctory,
531 const GrGeometryProcessor&, 524 const GrProcessor&)
532 const GrBatchTracker&)
533 : INHERITED (factory) { 525 : INHERITED (factory) {
534 fPrevRadius = SK_ScalarMin; 526 fPrevRadius = SK_ScalarMin;
535 fPrevCenterX = SK_ScalarMin; 527 fPrevCenterX = SK_ScalarMin;
536 fPrevIntervalLength = SK_ScalarMax; 528 fPrevIntervalLength = SK_ScalarMax;
537 } 529 }
538 530
539 void GLDashingCircleEffect::emitCode(const EmitArgs& args) { 531 void GLDashingCircleEffect::emitCode(const EmitArgs& args) {
540 const DashingCircleEffect& dce = args.fGP.cast<DashingCircleEffect>(); 532 const DashingCircleEffect& dce = args.fGP.cast<DashingCircleEffect>();
541 const char *paramName; 533 const char *paramName;
542 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co ord, and 534 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co ord, and
(...skipping 28 matching lines...) Expand all
571 fsBuilder->codeAppendf("\t\tfloat diff = dist - %s.x;\n", paramName); 563 fsBuilder->codeAppendf("\t\tfloat diff = dist - %s.x;\n", paramName);
572 fsBuilder->codeAppend("\t\tdiff = 1.0 - diff;\n"); 564 fsBuilder->codeAppend("\t\tdiff = 1.0 - diff;\n");
573 fsBuilder->codeAppend("\t\tfloat alpha = clamp(diff, 0.0, 1.0);\n"); 565 fsBuilder->codeAppend("\t\tfloat alpha = clamp(diff, 0.0, 1.0);\n");
574 } else { 566 } else {
575 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n"); 567 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n");
576 fsBuilder->codeAppendf("\t\talpha *= dist < %s.x + 0.5 ? 1.0 : 0.0;\n", paramName); 568 fsBuilder->codeAppendf("\t\talpha *= dist < %s.x + 0.5 ? 1.0 : 0.0;\n", paramName);
577 } 569 }
578 fsBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage); 570 fsBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage);
579 } 571 }
580 572
581 void GLDashingCircleEffect::setData(const GrGLProgramDataManager& pdman, 573 void GLDashingCircleEffect::setData(const GrGLProgramDataManager& pdman
582 const GrGeometryProcessor& processor, 574 , const GrProcessor& processor) {
583 const GrBatchTracker&) {
584 const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>(); 575 const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>();
585 SkScalar radius = dce.getRadius(); 576 SkScalar radius = dce.getRadius();
586 SkScalar centerX = dce.getCenterX(); 577 SkScalar centerX = dce.getCenterX();
587 SkScalar intervalLength = dce.getIntervalLength(); 578 SkScalar intervalLength = dce.getIntervalLength();
588 if (radius != fPrevRadius || centerX != fPrevCenterX || intervalLength != fP revIntervalLength) { 579 if (radius != fPrevRadius || centerX != fPrevCenterX || intervalLength != fP revIntervalLength) {
589 pdman.set3f(fParamUniform, radius - 0.5f, centerX, intervalLength); 580 pdman.set3f(fParamUniform, radius - 0.5f, centerX, intervalLength);
590 fPrevRadius = radius; 581 fPrevRadius = radius;
591 fPrevCenterX = centerX; 582 fPrevCenterX = centerX;
592 fPrevIntervalLength = intervalLength; 583 fPrevIntervalLength = intervalLength;
593 } 584 }
594 } 585 }
595 586
596 void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& processor, 587 void GLDashingCircleEffect::GenKey(const GrProcessor& processor, const GrGLCaps& ,
597 const GrBatchTracker&,
598 const GrGLCaps&,
599 GrProcessorKeyBuilder* b) { 588 GrProcessorKeyBuilder* b) {
600 const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>(); 589 const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>();
601 b->add32(dce.getEdgeType()); 590 b->add32(dce.getEdgeType());
602 } 591 }
603 592
604 ////////////////////////////////////////////////////////////////////////////// 593 //////////////////////////////////////////////////////////////////////////////
605 594
606 GrGeometryProcessor* DashingCircleEffect::Create(GrPrimitiveEdgeType edgeType, c onst DashInfo& info, 595 GrGeometryProcessor* DashingCircleEffect::Create(GrPrimitiveEdgeType edgeType, c onst DashInfo& info,
607 SkScalar radius) { 596 SkScalar radius) {
608 if (info.fCount != 2 || info.fIntervals[0] != 0) { 597 if (info.fCount != 2 || info.fIntervals[0] != 0) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 705
717 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 706 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
718 707
719 typedef GrGeometryProcessor INHERITED; 708 typedef GrGeometryProcessor INHERITED;
720 }; 709 };
721 710
722 ////////////////////////////////////////////////////////////////////////////// 711 //////////////////////////////////////////////////////////////////////////////
723 712
724 class GLDashingLineEffect : public GrGLGeometryProcessor { 713 class GLDashingLineEffect : public GrGLGeometryProcessor {
725 public: 714 public:
726 GLDashingLineEffect(const GrBackendProcessorFactory&, 715 GLDashingLineEffect(const GrBackendProcessorFactory&, const GrProcessor&);
727 const GrGeometryProcessor&,
728 const GrBatchTracker&);
729 716
730 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 717 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
731 718
732 static inline void GenKey(const GrGeometryProcessor&, 719 static inline void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKe yBuilder*);
733 const GrBatchTracker&,
734 const GrGLCaps&,
735 GrProcessorKeyBuilder*);
736 720
737 virtual void setData(const GrGLProgramDataManager&, 721 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
738 const GrGeometryProcessor&,
739 const GrBatchTracker&) SK_OVERRIDE;
740 722
741 private: 723 private:
742 GrGLProgramDataManager::UniformHandle fRectUniform; 724 GrGLProgramDataManager::UniformHandle fRectUniform;
743 GrGLProgramDataManager::UniformHandle fIntervalUniform; 725 GrGLProgramDataManager::UniformHandle fIntervalUniform;
744 SkRect fPrevRect; 726 SkRect fPrevRect;
745 SkScalar fPrevIntervalLength; 727 SkScalar fPrevIntervalLength;
746 typedef GrGLGeometryProcessor INHERITED; 728 typedef GrGLGeometryProcessor INHERITED;
747 }; 729 };
748 730
749 GLDashingLineEffect::GLDashingLineEffect(const GrBackendProcessorFactory& factor y, 731 GLDashingLineEffect::GLDashingLineEffect(const GrBackendProcessorFactory& factor y,
750 const GrGeometryProcessor&, 732 const GrProcessor&)
751 const GrBatchTracker&)
752 : INHERITED (factory) { 733 : INHERITED (factory) {
753 fPrevRect.fLeft = SK_ScalarNaN; 734 fPrevRect.fLeft = SK_ScalarNaN;
754 fPrevIntervalLength = SK_ScalarMax; 735 fPrevIntervalLength = SK_ScalarMax;
755 } 736 }
756 737
757 void GLDashingLineEffect::emitCode(const EmitArgs& args) { 738 void GLDashingLineEffect::emitCode(const EmitArgs& args) {
758 const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>(); 739 const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>();
759 const char *rectName; 740 const char *rectName;
760 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot tom - 0.5), 741 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot tom - 0.5),
761 // respectively. 742 // respectively.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 } else { 785 } else {
805 // Assuming the bounding geometry is tight so no need to check y values 786 // Assuming the bounding geometry is tight so no need to check y values
806 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n"); 787 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n");
807 fsBuilder->codeAppendf("\t\talpha *= (fragPosShifted.x - %s.x) > -0.5 ? 1.0 : 0.0;\n", rectName); 788 fsBuilder->codeAppendf("\t\talpha *= (fragPosShifted.x - %s.x) > -0.5 ? 1.0 : 0.0;\n", rectName);
808 fsBuilder->codeAppendf("\t\talpha *= (%s.z - fragPosShifted.x) >= -0.5 ? 1.0 : 0.0;\n", rectName); 789 fsBuilder->codeAppendf("\t\talpha *= (%s.z - fragPosShifted.x) >= -0.5 ? 1.0 : 0.0;\n", rectName);
809 } 790 }
810 fsBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage); 791 fsBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage);
811 } 792 }
812 793
813 void GLDashingLineEffect::setData(const GrGLProgramDataManager& pdman, 794 void GLDashingLineEffect::setData(const GrGLProgramDataManager& pdman,
814 const GrGeometryProcessor& processor, 795 const GrProcessor& processor) {
815 const GrBatchTracker&) {
816 const DashingLineEffect& de = processor.cast<DashingLineEffect>(); 796 const DashingLineEffect& de = processor.cast<DashingLineEffect>();
817 const SkRect& rect = de.getRect(); 797 const SkRect& rect = de.getRect();
818 SkScalar intervalLength = de.getIntervalLength(); 798 SkScalar intervalLength = de.getIntervalLength();
819 if (rect != fPrevRect || intervalLength != fPrevIntervalLength) { 799 if (rect != fPrevRect || intervalLength != fPrevIntervalLength) {
820 pdman.set4f(fRectUniform, rect.fLeft + 0.5f, rect.fTop + 0.5f, 800 pdman.set4f(fRectUniform, rect.fLeft + 0.5f, rect.fTop + 0.5f,
821 rect.fRight - 0.5f, rect.fBottom - 0.5f); 801 rect.fRight - 0.5f, rect.fBottom - 0.5f);
822 pdman.set1f(fIntervalUniform, intervalLength); 802 pdman.set1f(fIntervalUniform, intervalLength);
823 fPrevRect = rect; 803 fPrevRect = rect;
824 fPrevIntervalLength = intervalLength; 804 fPrevIntervalLength = intervalLength;
825 } 805 }
826 } 806 }
827 807
828 void GLDashingLineEffect::GenKey(const GrGeometryProcessor& processor, 808 void GLDashingLineEffect::GenKey(const GrProcessor& processor, const GrGLCaps&,
829 const GrBatchTracker&,
830 const GrGLCaps&,
831 GrProcessorKeyBuilder* b) { 809 GrProcessorKeyBuilder* b) {
832 const DashingLineEffect& de = processor.cast<DashingLineEffect>(); 810 const DashingLineEffect& de = processor.cast<DashingLineEffect>();
833 b->add32(de.getEdgeType()); 811 b->add32(de.getEdgeType());
834 } 812 }
835 813
836 ////////////////////////////////////////////////////////////////////////////// 814 //////////////////////////////////////////////////////////////////////////////
837 815
838 GrGeometryProcessor* DashingLineEffect::Create(GrPrimitiveEdgeType edgeType, 816 GrGeometryProcessor* DashingLineEffect::Create(GrPrimitiveEdgeType edgeType,
839 const DashInfo& info, 817 const DashInfo& info,
840 SkScalar strokeWidth) { 818 SkScalar strokeWidth) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 switch (cap) { 882 switch (cap) {
905 case GrDashingEffect::kRound_DashCap: 883 case GrDashingEffect::kRound_DashCap:
906 return DashingCircleEffect::Create(edgeType, info, SkScalarHalf(stro keWidth)); 884 return DashingCircleEffect::Create(edgeType, info, SkScalarHalf(stro keWidth));
907 case GrDashingEffect::kNonRound_DashCap: 885 case GrDashingEffect::kNonRound_DashCap:
908 return DashingLineEffect::Create(edgeType, info, strokeWidth); 886 return DashingLineEffect::Create(edgeType, info, strokeWidth);
909 default: 887 default:
910 SkFAIL("Unexpected dashed cap."); 888 SkFAIL("Unexpected dashed cap.");
911 } 889 }
912 return NULL; 890 return NULL;
913 } 891 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrCustomCoordsTextureEffect.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698