| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |