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 "GrBatch.h" | 10 #include "GrBatch.h" |
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
776 * right by half the off interval. The line then goes in the positive x directio
n. | 776 * right by half the off interval. The line then goes in the positive x directio
n. |
777 */ | 777 */ |
778 class DashingCircleEffect : public GrGeometryProcessor { | 778 class DashingCircleEffect : public GrGeometryProcessor { |
779 public: | 779 public: |
780 typedef SkPathEffect::DashInfo DashInfo; | 780 typedef SkPathEffect::DashInfo DashInfo; |
781 | 781 |
782 static GrGeometryProcessor* Create(GrColor, | 782 static GrGeometryProcessor* Create(GrColor, |
783 DashAAMode aaMode, | 783 DashAAMode aaMode, |
784 const SkMatrix& localMatrix); | 784 const SkMatrix& localMatrix); |
785 | 785 |
| 786 virtual ~DashingCircleEffect(); |
| 787 |
786 const char* name() const override { return "DashingCircleEffect"; } | 788 const char* name() const override { return "DashingCircleEffect"; } |
787 | 789 |
788 const Attribute* inPosition() const { return fInPosition; } | 790 const Attribute* inPosition() const { return fInPosition; } |
789 | 791 |
790 const Attribute* inDashParams() const { return fInDashParams; } | 792 const Attribute* inDashParams() const { return fInDashParams; } |
791 | 793 |
792 const Attribute* inCircleParams() const { return fInCircleParams; } | 794 const Attribute* inCircleParams() const { return fInCircleParams; } |
793 | 795 |
794 DashAAMode aaMode() const { return fAAMode; } | 796 DashAAMode aaMode() const { return fAAMode; } |
795 | 797 |
796 virtual void getGLProcessorKey(const GrBatchTracker&, | 798 virtual void getGLProcessorKey(const GrBatchTracker&, |
797 const GrGLCaps&, | 799 const GrGLCaps&, |
798 GrProcessorKeyBuilder* b) const override; | 800 GrProcessorKeyBuilder* b) const override; |
799 | 801 |
800 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker&, | 802 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker&, |
801 const GrGLCaps&) const over
ride; | 803 const GrGLCaps&) const over
ride; |
802 | 804 |
803 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; | 805 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; |
804 | 806 |
| 807 bool onCanMakeEqual(const GrBatchTracker&, |
| 808 const GrGeometryProcessor&, |
| 809 const GrBatchTracker&) const override; |
| 810 |
805 private: | 811 private: |
806 DashingCircleEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix)
; | 812 DashingCircleEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix)
; |
807 | 813 |
| 814 bool onIsEqual(const GrGeometryProcessor& other) const override; |
| 815 |
| 816 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; |
| 817 |
808 DashAAMode fAAMode; | 818 DashAAMode fAAMode; |
809 const Attribute* fInPosition; | 819 const Attribute* fInPosition; |
810 const Attribute* fInDashParams; | 820 const Attribute* fInDashParams; |
811 const Attribute* fInCircleParams; | 821 const Attribute* fInCircleParams; |
812 | 822 |
813 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 823 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
814 | 824 |
815 typedef GrGeometryProcessor INHERITED; | 825 typedef GrGeometryProcessor INHERITED; |
816 }; | 826 }; |
817 | 827 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 } | 936 } |
927 | 937 |
928 ////////////////////////////////////////////////////////////////////////////// | 938 ////////////////////////////////////////////////////////////////////////////// |
929 | 939 |
930 GrGeometryProcessor* DashingCircleEffect::Create(GrColor color, | 940 GrGeometryProcessor* DashingCircleEffect::Create(GrColor color, |
931 DashAAMode aaMode, | 941 DashAAMode aaMode, |
932 const SkMatrix& localMatrix) { | 942 const SkMatrix& localMatrix) { |
933 return SkNEW_ARGS(DashingCircleEffect, (color, aaMode, localMatrix)); | 943 return SkNEW_ARGS(DashingCircleEffect, (color, aaMode, localMatrix)); |
934 } | 944 } |
935 | 945 |
| 946 DashingCircleEffect::~DashingCircleEffect() {} |
| 947 |
| 948 void DashingCircleEffect::onGetInvariantOutputCoverage(GrInitInvariantOutput* ou
t) const { |
| 949 out->setUnknownSingleComponent(); |
| 950 } |
| 951 |
936 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt, | 952 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt, |
937 const GrGLCaps& caps, | 953 const GrGLCaps& caps, |
938 GrProcessorKeyBuilder* b) const { | 954 GrProcessorKeyBuilder* b) const { |
939 GLDashingCircleEffect::GenKey(*this, bt, caps, b); | 955 GLDashingCircleEffect::GenKey(*this, bt, caps, b); |
940 } | 956 } |
941 | 957 |
942 GrGLPrimitiveProcessor* DashingCircleEffect::createGLInstance(const GrBatchTrack
er& bt, | 958 GrGLPrimitiveProcessor* DashingCircleEffect::createGLInstance(const GrBatchTrack
er& bt, |
943 const GrGLCaps&) c
onst { | 959 const GrGLCaps&) c
onst { |
944 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); | 960 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); |
945 } | 961 } |
946 | 962 |
947 DashingCircleEffect::DashingCircleEffect(GrColor color, | 963 DashingCircleEffect::DashingCircleEffect(GrColor color, |
948 DashAAMode aaMode, | 964 DashAAMode aaMode, |
949 const SkMatrix& localMatrix) | 965 const SkMatrix& localMatrix) |
950 : INHERITED(color, SkMatrix::I(), localMatrix), fAAMode(aaMode) { | 966 : INHERITED(color, SkMatrix::I(), localMatrix), fAAMode(aaMode) { |
951 this->initClassID<DashingCircleEffect>(); | 967 this->initClassID<DashingCircleEffect>(); |
952 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 968 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
953 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); | 969 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); |
954 fInCircleParams = &this->addVertexAttrib(Attribute("inCircleParams", | 970 fInCircleParams = &this->addVertexAttrib(Attribute("inCircleParams", |
955 kVec2f_GrVertexAttribType
)); | 971 kVec2f_GrVertexAttribType
)); |
956 } | 972 } |
957 | 973 |
| 974 bool DashingCircleEffect::onIsEqual(const GrGeometryProcessor& other) const { |
| 975 const DashingCircleEffect& dce = other.cast<DashingCircleEffect>(); |
| 976 return fAAMode == dce.fAAMode; |
| 977 } |
| 978 |
958 void DashingCircleEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineI
nfo& init) const { | 979 void DashingCircleEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineI
nfo& init) const { |
959 DashingCircleBatchTracker* local = bt->cast<DashingCircleBatchTracker>(); | 980 DashingCircleBatchTracker* local = bt->cast<DashingCircleBatchTracker>(); |
960 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); | 981 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); |
961 local->fUsesLocalCoords = init.fUsesLocalCoords; | 982 local->fUsesLocalCoords = init.fUsesLocalCoords; |
962 } | 983 } |
963 | 984 |
| 985 bool DashingCircleEffect::onCanMakeEqual(const GrBatchTracker& m, |
| 986 const GrGeometryProcessor& that, |
| 987 const GrBatchTracker& t) const { |
| 988 const DashingCircleBatchTracker& mine = m.cast<DashingCircleBatchTracker>(); |
| 989 const DashingCircleBatchTracker& theirs = t.cast<DashingCircleBatchTracker>(
); |
| 990 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, |
| 991 that, theirs.fUsesLocalCoords) && |
| 992 CanCombineOutput(mine.fInputColorType, mine.fColor, |
| 993 theirs.fInputColorType, theirs.fColor); |
| 994 } |
| 995 |
964 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingCircleEffect); | 996 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingCircleEffect); |
965 | 997 |
966 GrGeometryProcessor* DashingCircleEffect::TestCreate(SkRandom* random, | 998 GrGeometryProcessor* DashingCircleEffect::TestCreate(SkRandom* random, |
967 GrContext*, | 999 GrContext*, |
968 const GrDrawTargetCaps& cap
s, | 1000 const GrDrawTargetCaps& cap
s, |
969 GrTexture*[]) { | 1001 GrTexture*[]) { |
970 DashAAMode aaMode = static_cast<DashAAMode>(random->nextULessThan(kDashAAMod
eCount)); | 1002 DashAAMode aaMode = static_cast<DashAAMode>(random->nextULessThan(kDashAAMod
eCount)); |
971 return DashingCircleEffect::Create(GrRandomColor(random), | 1003 return DashingCircleEffect::Create(GrRandomColor(random), |
972 aaMode, GrProcessorUnitTest::TestMatrix(ra
ndom)); | 1004 aaMode, GrProcessorUnitTest::TestMatrix(ra
ndom)); |
973 } | 1005 } |
(...skipping 18 matching lines...) Expand all Loading... |
992 * positive x direction. | 1024 * positive x direction. |
993 */ | 1025 */ |
994 class DashingLineEffect : public GrGeometryProcessor { | 1026 class DashingLineEffect : public GrGeometryProcessor { |
995 public: | 1027 public: |
996 typedef SkPathEffect::DashInfo DashInfo; | 1028 typedef SkPathEffect::DashInfo DashInfo; |
997 | 1029 |
998 static GrGeometryProcessor* Create(GrColor, | 1030 static GrGeometryProcessor* Create(GrColor, |
999 DashAAMode aaMode, | 1031 DashAAMode aaMode, |
1000 const SkMatrix& localMatrix); | 1032 const SkMatrix& localMatrix); |
1001 | 1033 |
| 1034 virtual ~DashingLineEffect(); |
| 1035 |
1002 const char* name() const override { return "DashingEffect"; } | 1036 const char* name() const override { return "DashingEffect"; } |
1003 | 1037 |
1004 const Attribute* inPosition() const { return fInPosition; } | 1038 const Attribute* inPosition() const { return fInPosition; } |
1005 | 1039 |
1006 const Attribute* inDashParams() const { return fInDashParams; } | 1040 const Attribute* inDashParams() const { return fInDashParams; } |
1007 | 1041 |
1008 const Attribute* inRectParams() const { return fInRectParams; } | 1042 const Attribute* inRectParams() const { return fInRectParams; } |
1009 | 1043 |
1010 DashAAMode aaMode() const { return fAAMode; } | 1044 DashAAMode aaMode() const { return fAAMode; } |
1011 | 1045 |
1012 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 1046 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
1013 const GrGLCaps& caps, | 1047 const GrGLCaps& caps, |
1014 GrProcessorKeyBuilder* b) const override; | 1048 GrProcessorKeyBuilder* b) const override; |
1015 | 1049 |
1016 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 1050 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
1017 const GrGLCaps&) const over
ride; | 1051 const GrGLCaps&) const over
ride; |
1018 | 1052 |
1019 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; | 1053 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; |
1020 | 1054 |
| 1055 bool onCanMakeEqual(const GrBatchTracker&, |
| 1056 const GrGeometryProcessor&, |
| 1057 const GrBatchTracker&) const override; |
| 1058 |
1021 private: | 1059 private: |
1022 DashingLineEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix); | 1060 DashingLineEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix); |
1023 | 1061 |
| 1062 bool onIsEqual(const GrGeometryProcessor& other) const override; |
| 1063 |
| 1064 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const override; |
| 1065 |
1024 DashAAMode fAAMode; | 1066 DashAAMode fAAMode; |
1025 const Attribute* fInPosition; | 1067 const Attribute* fInPosition; |
1026 const Attribute* fInDashParams; | 1068 const Attribute* fInDashParams; |
1027 const Attribute* fInRectParams; | 1069 const Attribute* fInRectParams; |
1028 | 1070 |
1029 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 1071 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
1030 | 1072 |
1031 typedef GrGeometryProcessor INHERITED; | 1073 typedef GrGeometryProcessor INHERITED; |
1032 }; | 1074 }; |
1033 | 1075 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 } | 1196 } |
1155 | 1197 |
1156 ////////////////////////////////////////////////////////////////////////////// | 1198 ////////////////////////////////////////////////////////////////////////////// |
1157 | 1199 |
1158 GrGeometryProcessor* DashingLineEffect::Create(GrColor color, | 1200 GrGeometryProcessor* DashingLineEffect::Create(GrColor color, |
1159 DashAAMode aaMode, | 1201 DashAAMode aaMode, |
1160 const SkMatrix& localMatrix) { | 1202 const SkMatrix& localMatrix) { |
1161 return SkNEW_ARGS(DashingLineEffect, (color, aaMode, localMatrix)); | 1203 return SkNEW_ARGS(DashingLineEffect, (color, aaMode, localMatrix)); |
1162 } | 1204 } |
1163 | 1205 |
| 1206 DashingLineEffect::~DashingLineEffect() {} |
| 1207 |
| 1208 void DashingLineEffect::onGetInvariantOutputCoverage(GrInitInvariantOutput* out)
const { |
| 1209 out->setUnknownSingleComponent(); |
| 1210 } |
| 1211 |
1164 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt, | 1212 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt, |
1165 const GrGLCaps& caps, | 1213 const GrGLCaps& caps, |
1166 GrProcessorKeyBuilder* b) const { | 1214 GrProcessorKeyBuilder* b) const { |
1167 GLDashingLineEffect::GenKey(*this, bt, caps, b); | 1215 GLDashingLineEffect::GenKey(*this, bt, caps, b); |
1168 } | 1216 } |
1169 | 1217 |
1170 GrGLPrimitiveProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker
& bt, | 1218 GrGLPrimitiveProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker
& bt, |
1171 const GrGLCaps&) con
st { | 1219 const GrGLCaps&) con
st { |
1172 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); | 1220 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); |
1173 } | 1221 } |
1174 | 1222 |
1175 DashingLineEffect::DashingLineEffect(GrColor color, | 1223 DashingLineEffect::DashingLineEffect(GrColor color, |
1176 DashAAMode aaMode, | 1224 DashAAMode aaMode, |
1177 const SkMatrix& localMatrix) | 1225 const SkMatrix& localMatrix) |
1178 : INHERITED(color, SkMatrix::I(), localMatrix), fAAMode(aaMode) { | 1226 : INHERITED(color, SkMatrix::I(), localMatrix), fAAMode(aaMode) { |
1179 this->initClassID<DashingLineEffect>(); | 1227 this->initClassID<DashingLineEffect>(); |
1180 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 1228 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
1181 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); | 1229 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); |
1182 fInRectParams = &this->addVertexAttrib(Attribute("inRect", kVec4f_GrVertexAt
tribType)); | 1230 fInRectParams = &this->addVertexAttrib(Attribute("inRect", kVec4f_GrVertexAt
tribType)); |
1183 } | 1231 } |
1184 | 1232 |
| 1233 bool DashingLineEffect::onIsEqual(const GrGeometryProcessor& other) const { |
| 1234 const DashingLineEffect& de = other.cast<DashingLineEffect>(); |
| 1235 return fAAMode == de.fAAMode; |
| 1236 } |
| 1237 |
1185 void DashingLineEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInf
o& init) const { | 1238 void DashingLineEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInf
o& init) const { |
1186 DashingLineBatchTracker* local = bt->cast<DashingLineBatchTracker>(); | 1239 DashingLineBatchTracker* local = bt->cast<DashingLineBatchTracker>(); |
1187 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); | 1240 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); |
1188 local->fUsesLocalCoords = init.fUsesLocalCoords; | 1241 local->fUsesLocalCoords = init.fUsesLocalCoords; |
1189 } | 1242 } |
1190 | 1243 |
| 1244 bool DashingLineEffect::onCanMakeEqual(const GrBatchTracker& m, |
| 1245 const GrGeometryProcessor& that, |
| 1246 const GrBatchTracker& t) const { |
| 1247 const DashingLineBatchTracker& mine = m.cast<DashingLineBatchTracker>(); |
| 1248 const DashingLineBatchTracker& theirs = t.cast<DashingLineBatchTracker>(); |
| 1249 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, |
| 1250 that, theirs.fUsesLocalCoords) && |
| 1251 CanCombineOutput(mine.fInputColorType, mine.fColor, |
| 1252 theirs.fInputColorType, theirs.fColor); |
| 1253 } |
| 1254 |
1191 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingLineEffect); | 1255 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DashingLineEffect); |
1192 | 1256 |
1193 GrGeometryProcessor* DashingLineEffect::TestCreate(SkRandom* random, | 1257 GrGeometryProcessor* DashingLineEffect::TestCreate(SkRandom* random, |
1194 GrContext*, | 1258 GrContext*, |
1195 const GrDrawTargetCaps& caps, | 1259 const GrDrawTargetCaps& caps, |
1196 GrTexture*[]) { | 1260 GrTexture*[]) { |
1197 DashAAMode aaMode = static_cast<DashAAMode>(random->nextULessThan(kDashAAMod
eCount)); | 1261 DashAAMode aaMode = static_cast<DashAAMode>(random->nextULessThan(kDashAAMod
eCount)); |
1198 return DashingLineEffect::Create(GrRandomColor(random), | 1262 return DashingLineEffect::Create(GrRandomColor(random), |
1199 aaMode, GrProcessorUnitTest::TestMatrix(ran
dom)); | 1263 aaMode, GrProcessorUnitTest::TestMatrix(ran
dom)); |
1200 } | 1264 } |
1201 | 1265 |
1202 ////////////////////////////////////////////////////////////////////////////// | 1266 ////////////////////////////////////////////////////////////////////////////// |
1203 | 1267 |
1204 static GrGeometryProcessor* create_dash_gp(GrColor color, | 1268 static GrGeometryProcessor* create_dash_gp(GrColor color, |
1205 DashAAMode dashAAMode, | 1269 DashAAMode dashAAMode, |
1206 DashCap cap, | 1270 DashCap cap, |
1207 const SkMatrix& localMatrix) { | 1271 const SkMatrix& localMatrix) { |
1208 switch (cap) { | 1272 switch (cap) { |
1209 case kRound_DashCap: | 1273 case kRound_DashCap: |
1210 return DashingCircleEffect::Create(color, dashAAMode, localMatrix); | 1274 return DashingCircleEffect::Create(color, dashAAMode, localMatrix); |
1211 case kNonRound_DashCap: | 1275 case kNonRound_DashCap: |
1212 return DashingLineEffect::Create(color, dashAAMode, localMatrix); | 1276 return DashingLineEffect::Create(color, dashAAMode, localMatrix); |
1213 default: | 1277 default: |
1214 SkFAIL("Unexpected dashed cap."); | 1278 SkFAIL("Unexpected dashed cap."); |
1215 } | 1279 } |
1216 return NULL; | 1280 return NULL; |
1217 } | 1281 } |
OLD | NEW |