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

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

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