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