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

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

Issue 2351753002: Revert of Stop flattening GrCoordTransforms in parent GrFragmentProcessors. (Closed)
Patch Set: Created 4 years, 3 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/gpu/effects/GrBitmapTextGeoProc.cpp ('k') | src/gpu/effects/GrDistanceFieldGeoProc.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 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 "GrBatchFlushState.h" 10 #include "GrBatchFlushState.h"
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 class GLDashingCircleEffect : public GrGLSLGeometryProcessor { 810 class GLDashingCircleEffect : public GrGLSLGeometryProcessor {
811 public: 811 public:
812 GLDashingCircleEffect(); 812 GLDashingCircleEffect();
813 813
814 void onEmitCode(EmitArgs&, GrGPArgs*) override; 814 void onEmitCode(EmitArgs&, GrGPArgs*) override;
815 815
816 static inline void GenKey(const GrGeometryProcessor&, 816 static inline void GenKey(const GrGeometryProcessor&,
817 const GrGLSLCaps&, 817 const GrGLSLCaps&,
818 GrProcessorKeyBuilder*); 818 GrProcessorKeyBuilder*);
819 819
820 void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, 820 void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) o verride;
821 FPCoordTransformIter&& transformIter) override; 821
822 void setTransformData(const GrPrimitiveProcessor& primProc,
823 const GrGLSLProgramDataManager& pdman,
824 int index,
825 const SkTArray<const GrCoordTransform*, true>& transfo rms) override {
826 this->setTransformDataHelper(primProc.cast<DashingCircleEffect>().localM atrix(), pdman,
827 index, transforms);
828 }
829
822 private: 830 private:
823 UniformHandle fParamUniform; 831 UniformHandle fParamUniform;
824 UniformHandle fColorUniform; 832 UniformHandle fColorUniform;
825 GrColor fColor; 833 GrColor fColor;
826 SkScalar fPrevRadius; 834 SkScalar fPrevRadius;
827 SkScalar fPrevCenterX; 835 SkScalar fPrevCenterX;
828 SkScalar fPrevIntervalLength; 836 SkScalar fPrevIntervalLength;
829 typedef GrGLSLGeometryProcessor INHERITED; 837 typedef GrGLSLGeometryProcessor INHERITED;
830 }; 838 };
831 839
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 // Setup position 872 // Setup position
865 this->setupPosition(vertBuilder, gpArgs, dce.inPosition()->fName); 873 this->setupPosition(vertBuilder, gpArgs, dce.inPosition()->fName);
866 874
867 // emit transforms 875 // emit transforms
868 this->emitTransforms(vertBuilder, 876 this->emitTransforms(vertBuilder,
869 varyingHandler, 877 varyingHandler,
870 uniformHandler, 878 uniformHandler,
871 gpArgs->fPositionVar, 879 gpArgs->fPositionVar,
872 dce.inPosition()->fName, 880 dce.inPosition()->fName,
873 dce.localMatrix(), 881 dce.localMatrix(),
874 args.fFPCoordTransformHandler); 882 args.fTransformsIn,
883 args.fTransformsOut);
875 884
876 // transforms all points so that we can compare them to our test circle 885 // transforms all points so that we can compare them to our test circle
877 fragBuilder->codeAppendf("float xShifted = %s.x - floor(%s.x / %s.z) * %s.z; ", 886 fragBuilder->codeAppendf("float xShifted = %s.x - floor(%s.x / %s.z) * %s.z; ",
878 dashParams.fsIn(), dashParams.fsIn(), dashParams.fs In(), 887 dashParams.fsIn(), dashParams.fsIn(), dashParams.fs In(),
879 dashParams.fsIn()); 888 dashParams.fsIn());
880 fragBuilder->codeAppendf("vec2 fragPosShifted = vec2(xShifted, %s.y);", dash Params.fsIn()); 889 fragBuilder->codeAppendf("vec2 fragPosShifted = vec2(xShifted, %s.y);", dash Params.fsIn());
881 fragBuilder->codeAppendf("vec2 center = vec2(%s.y, 0.0);", circleParams.fsIn ()); 890 fragBuilder->codeAppendf("vec2 center = vec2(%s.y, 0.0);", circleParams.fsIn ());
882 fragBuilder->codeAppend("float dist = length(center - fragPosShifted);"); 891 fragBuilder->codeAppend("float dist = length(center - fragPosShifted);");
883 if (dce.aaMode() != AAMode::kNone) { 892 if (dce.aaMode() != AAMode::kNone) {
884 fragBuilder->codeAppendf("float diff = dist - %s.x;", circleParams.fsIn( )); 893 fragBuilder->codeAppendf("float diff = dist - %s.x;", circleParams.fsIn( ));
885 fragBuilder->codeAppend("diff = 1.0 - diff;"); 894 fragBuilder->codeAppend("diff = 1.0 - diff;");
886 fragBuilder->codeAppend("float alpha = clamp(diff, 0.0, 1.0);"); 895 fragBuilder->codeAppend("float alpha = clamp(diff, 0.0, 1.0);");
887 } else { 896 } else {
888 fragBuilder->codeAppendf("float alpha = 1.0;"); 897 fragBuilder->codeAppendf("float alpha = 1.0;");
889 fragBuilder->codeAppendf("alpha *= dist < %s.x + 0.5 ? 1.0 : 0.0;", cir cleParams.fsIn()); 898 fragBuilder->codeAppendf("alpha *= dist < %s.x + 0.5 ? 1.0 : 0.0;", cir cleParams.fsIn());
890 } 899 }
891 fragBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage); 900 fragBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage);
892 } 901 }
893 902
894 void GLDashingCircleEffect::setData(const GrGLSLProgramDataManager& pdman, 903 void GLDashingCircleEffect::setData(const GrGLSLProgramDataManager& pdman,
895 const GrPrimitiveProcessor& processor, 904 const GrPrimitiveProcessor& processor) {
896 FPCoordTransformIter&& transformIter) {
897 const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>(); 905 const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>();
898 if (dce.color() != fColor) { 906 if (dce.color() != fColor) {
899 float c[4]; 907 float c[4];
900 GrColorToRGBAFloat(dce.color(), c); 908 GrColorToRGBAFloat(dce.color(), c);
901 pdman.set4fv(fColorUniform, 1, c); 909 pdman.set4fv(fColorUniform, 1, c);
902 fColor = dce.color(); 910 fColor = dce.color();
903 } 911 }
904 this->setTransformDataHelper(dce.localMatrix(), pdman, &transformIter);
905 } 912 }
906 913
907 void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, 914 void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp,
908 const GrGLSLCaps&, 915 const GrGLSLCaps&,
909 GrProcessorKeyBuilder* b) { 916 GrProcessorKeyBuilder* b) {
910 const DashingCircleEffect& dce = gp.cast<DashingCircleEffect>(); 917 const DashingCircleEffect& dce = gp.cast<DashingCircleEffect>();
911 uint32_t key = 0; 918 uint32_t key = 0;
912 key |= dce.usesLocalCoords() && dce.localMatrix().hasPerspective() ? 0x1 : 0 x0; 919 key |= dce.usesLocalCoords() && dce.localMatrix().hasPerspective() ? 0x1 : 0 x0;
913 key |= dce.colorIgnored() ? 0x2 : 0x0; 920 key |= dce.colorIgnored() ? 0x2 : 0x0;
914 key |= static_cast<uint32_t>(dce.aaMode()) << 8; 921 key |= static_cast<uint32_t>(dce.aaMode()) << 8;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 class GLDashingLineEffect : public GrGLSLGeometryProcessor { 1030 class GLDashingLineEffect : public GrGLSLGeometryProcessor {
1024 public: 1031 public:
1025 GLDashingLineEffect(); 1032 GLDashingLineEffect();
1026 1033
1027 void onEmitCode(EmitArgs&, GrGPArgs*) override; 1034 void onEmitCode(EmitArgs&, GrGPArgs*) override;
1028 1035
1029 static inline void GenKey(const GrGeometryProcessor&, 1036 static inline void GenKey(const GrGeometryProcessor&,
1030 const GrGLSLCaps&, 1037 const GrGLSLCaps&,
1031 GrProcessorKeyBuilder*); 1038 GrProcessorKeyBuilder*);
1032 1039
1033 void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, 1040 void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) o verride;
1034 FPCoordTransformIter&& iter) override; 1041
1042 void setTransformData(const GrPrimitiveProcessor& primProc,
1043 const GrGLSLProgramDataManager& pdman,
1044 int index,
1045 const SkTArray<const GrCoordTransform*, true>& transfo rms) override {
1046 this->setTransformDataHelper(primProc.cast<DashingLineEffect>().localMat rix(), pdman, index,
1047 transforms);
1048 }
1035 1049
1036 private: 1050 private:
1037 GrColor fColor; 1051 GrColor fColor;
1038 UniformHandle fColorUniform; 1052 UniformHandle fColorUniform;
1039 typedef GrGLSLGeometryProcessor INHERITED; 1053 typedef GrGLSLGeometryProcessor INHERITED;
1040 }; 1054 };
1041 1055
1042 GLDashingLineEffect::GLDashingLineEffect() { 1056 GLDashingLineEffect::GLDashingLineEffect() {
1043 fColor = GrColor_ILLEGAL; 1057 fColor = GrColor_ILLEGAL;
1044 } 1058 }
(...skipping 28 matching lines...) Expand all
1073 // Setup position 1087 // Setup position
1074 this->setupPosition(vertBuilder, gpArgs, de.inPosition()->fName); 1088 this->setupPosition(vertBuilder, gpArgs, de.inPosition()->fName);
1075 1089
1076 // emit transforms 1090 // emit transforms
1077 this->emitTransforms(vertBuilder, 1091 this->emitTransforms(vertBuilder,
1078 varyingHandler, 1092 varyingHandler,
1079 uniformHandler, 1093 uniformHandler,
1080 gpArgs->fPositionVar, 1094 gpArgs->fPositionVar,
1081 de.inPosition()->fName, 1095 de.inPosition()->fName,
1082 de.localMatrix(), 1096 de.localMatrix(),
1083 args.fFPCoordTransformHandler); 1097 args.fTransformsIn,
1098 args.fTransformsOut);
1084 1099
1085 // transforms all points so that we can compare them to our test rect 1100 // transforms all points so that we can compare them to our test rect
1086 fragBuilder->codeAppendf("float xShifted = %s.x - floor(%s.x / %s.z) * %s.z; ", 1101 fragBuilder->codeAppendf("float xShifted = %s.x - floor(%s.x / %s.z) * %s.z; ",
1087 inDashParams.fsIn(), inDashParams.fsIn(), inDashPar ams.fsIn(), 1102 inDashParams.fsIn(), inDashParams.fsIn(), inDashPar ams.fsIn(),
1088 inDashParams.fsIn()); 1103 inDashParams.fsIn());
1089 fragBuilder->codeAppendf("vec2 fragPosShifted = vec2(xShifted, %s.y);", inDa shParams.fsIn()); 1104 fragBuilder->codeAppendf("vec2 fragPosShifted = vec2(xShifted, %s.y);", inDa shParams.fsIn());
1090 if (de.aaMode() == AAMode::kCoverage) { 1105 if (de.aaMode() == AAMode::kCoverage) {
1091 // The amount of coverage removed in x and y by the edges is computed as a pair of negative 1106 // The amount of coverage removed in x and y by the edges is computed as a pair of negative
1092 // numbers, xSub and ySub. 1107 // numbers, xSub and ySub.
1093 fragBuilder->codeAppend("float xSub, ySub;"); 1108 fragBuilder->codeAppend("float xSub, ySub;");
(...skipping 18 matching lines...) Expand all
1112 fragBuilder->codeAppendf("float alpha = 1.0;"); 1127 fragBuilder->codeAppendf("float alpha = 1.0;");
1113 fragBuilder->codeAppendf("alpha *= (fragPosShifted.x - %s.x) > -0.5 ? 1. 0 : 0.0;", 1128 fragBuilder->codeAppendf("alpha *= (fragPosShifted.x - %s.x) > -0.5 ? 1. 0 : 0.0;",
1114 inRectParams.fsIn()); 1129 inRectParams.fsIn());
1115 fragBuilder->codeAppendf("alpha *= (%s.z - fragPosShifted.x) >= -0.5 ? 1 .0 : 0.0;", 1130 fragBuilder->codeAppendf("alpha *= (%s.z - fragPosShifted.x) >= -0.5 ? 1 .0 : 0.0;",
1116 inRectParams.fsIn()); 1131 inRectParams.fsIn());
1117 } 1132 }
1118 fragBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage); 1133 fragBuilder->codeAppendf("%s = vec4(alpha);", args.fOutputCoverage);
1119 } 1134 }
1120 1135
1121 void GLDashingLineEffect::setData(const GrGLSLProgramDataManager& pdman, 1136 void GLDashingLineEffect::setData(const GrGLSLProgramDataManager& pdman,
1122 const GrPrimitiveProcessor& processor, 1137 const GrPrimitiveProcessor& processor) {
1123 FPCoordTransformIter&& transformIter) {
1124 const DashingLineEffect& de = processor.cast<DashingLineEffect>(); 1138 const DashingLineEffect& de = processor.cast<DashingLineEffect>();
1125 if (de.color() != fColor) { 1139 if (de.color() != fColor) {
1126 float c[4]; 1140 float c[4];
1127 GrColorToRGBAFloat(de.color(), c); 1141 GrColorToRGBAFloat(de.color(), c);
1128 pdman.set4fv(fColorUniform, 1, c); 1142 pdman.set4fv(fColorUniform, 1, c);
1129 fColor = de.color(); 1143 fColor = de.color();
1130 } 1144 }
1131 this->setTransformDataHelper(de.localMatrix(), pdman, &transformIter);
1132 } 1145 }
1133 1146
1134 void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, 1147 void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp,
1135 const GrGLSLCaps&, 1148 const GrGLSLCaps&,
1136 GrProcessorKeyBuilder* b) { 1149 GrProcessorKeyBuilder* b) {
1137 const DashingLineEffect& de = gp.cast<DashingLineEffect>(); 1150 const DashingLineEffect& de = gp.cast<DashingLineEffect>();
1138 uint32_t key = 0; 1151 uint32_t key = 0;
1139 key |= de.usesLocalCoords() && de.localMatrix().hasPerspective() ? 0x1 : 0x0 ; 1152 key |= de.usesLocalCoords() && de.localMatrix().hasPerspective() ? 0x1 : 0x0 ;
1140 key |= de.colorIgnored() ? 0x2 : 0x0; 1153 key |= de.colorIgnored() ? 0x2 : 0x0;
1141 key |= static_cast<int>(de.aaMode()) << 8; 1154 key |= static_cast<int>(de.aaMode()) << 8;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 p.setStrokeWidth(SkIntToScalar(1)); 1285 p.setStrokeWidth(SkIntToScalar(1));
1273 p.setStrokeCap(cap); 1286 p.setStrokeCap(cap);
1274 p.setPathEffect(GrTest::TestDashPathEffect::Make(intervals, 2, phase)); 1287 p.setPathEffect(GrTest::TestDashPathEffect::Make(intervals, 2, phase));
1275 1288
1276 GrStyle style(p); 1289 GrStyle style(p);
1277 1290
1278 return GrDashingEffect::CreateDashLineBatch(color, viewMatrix, pts, aaMode, style); 1291 return GrDashingEffect::CreateDashLineBatch(color, viewMatrix, pts, aaMode, style);
1279 } 1292 }
1280 1293
1281 #endif 1294 #endif
OLDNEW
« no previous file with comments | « src/gpu/effects/GrBitmapTextGeoProc.cpp ('k') | src/gpu/effects/GrDistanceFieldGeoProc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698