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 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 const Attribute* inPosition() const { return fInPosition; } | 778 const Attribute* inPosition() const { return fInPosition; } |
779 | 779 |
780 const Attribute* inDashParams() const { return fInDashParams; } | 780 const Attribute* inDashParams() const { return fInDashParams; } |
781 | 781 |
782 const Attribute* inCircleParams() const { return fInCircleParams; } | 782 const Attribute* inCircleParams() const { return fInCircleParams; } |
783 | 783 |
784 DashAAMode aaMode() const { return fAAMode; } | 784 DashAAMode aaMode() const { return fAAMode; } |
785 | 785 |
786 GrColor color() const { return fColor; } | 786 GrColor color() const { return fColor; } |
787 | 787 |
| 788 const SkMatrix& localMatrix() const { return fLocalMatrix; } |
| 789 |
788 virtual void getGLProcessorKey(const GrBatchTracker&, | 790 virtual void getGLProcessorKey(const GrBatchTracker&, |
789 const GrGLSLCaps&, | 791 const GrGLSLCaps&, |
790 GrProcessorKeyBuilder* b) const override; | 792 GrProcessorKeyBuilder* b) const override; |
791 | 793 |
792 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker&, | 794 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker&, |
793 const GrGLSLCaps&) const ov
erride; | 795 const GrGLSLCaps&) const ov
erride; |
794 | 796 |
795 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; | 797 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; |
796 | 798 |
797 private: | 799 private: |
798 DashingCircleEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix)
; | 800 DashingCircleEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix)
; |
799 | 801 |
800 GrColor fColor; | 802 GrColor fColor; |
| 803 SkMatrix fLocalMatrix; |
801 DashAAMode fAAMode; | 804 DashAAMode fAAMode; |
802 const Attribute* fInPosition; | 805 const Attribute* fInPosition; |
803 const Attribute* fInDashParams; | 806 const Attribute* fInDashParams; |
804 const Attribute* fInCircleParams; | 807 const Attribute* fInCircleParams; |
805 | 808 |
806 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 809 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
807 | 810 |
808 typedef GrGeometryProcessor INHERITED; | 811 typedef GrGeometryProcessor INHERITED; |
809 }; | 812 }; |
810 | 813 |
811 ////////////////////////////////////////////////////////////////////////////// | 814 ////////////////////////////////////////////////////////////////////////////// |
812 | 815 |
813 class GLDashingCircleEffect : public GrGLGeometryProcessor { | 816 class GLDashingCircleEffect : public GrGLGeometryProcessor { |
814 public: | 817 public: |
815 GLDashingCircleEffect(const GrGeometryProcessor&, const GrBatchTracker&); | 818 GLDashingCircleEffect(const GrGeometryProcessor&, const GrBatchTracker&); |
816 | 819 |
817 void onEmitCode(EmitArgs&, GrGPArgs*) override; | 820 void onEmitCode(EmitArgs&, GrGPArgs*) override; |
818 | 821 |
819 static inline void GenKey(const GrGeometryProcessor&, | 822 static inline void GenKey(const GrGeometryProcessor&, |
820 const GrBatchTracker&, | 823 const GrBatchTracker&, |
821 const GrGLSLCaps&, | 824 const GrGLSLCaps&, |
822 GrProcessorKeyBuilder*); | 825 GrProcessorKeyBuilder*); |
823 | 826 |
824 virtual void setData(const GrGLProgramDataManager&, | 827 virtual void setData(const GrGLProgramDataManager&, |
825 const GrPrimitiveProcessor&, | 828 const GrPrimitiveProcessor&, |
826 const GrBatchTracker&) override; | 829 const GrBatchTracker&) override; |
827 | 830 |
| 831 void setTransformData(const GrPrimitiveProcessor& primProc, |
| 832 const GrGLProgramDataManager& pdman, |
| 833 int index, |
| 834 const SkTArray<const GrCoordTransform*, true>& transfo
rms) override { |
| 835 this->setTransformDataHelper<DashingCircleEffect>(primProc, pdman, index
, transforms); |
| 836 } |
| 837 |
828 private: | 838 private: |
829 UniformHandle fParamUniform; | 839 UniformHandle fParamUniform; |
830 UniformHandle fColorUniform; | 840 UniformHandle fColorUniform; |
831 GrColor fColor; | 841 GrColor fColor; |
832 SkScalar fPrevRadius; | 842 SkScalar fPrevRadius; |
833 SkScalar fPrevCenterX; | 843 SkScalar fPrevCenterX; |
834 SkScalar fPrevIntervalLength; | 844 SkScalar fPrevIntervalLength; |
835 typedef GrGLGeometryProcessor INHERITED; | 845 typedef GrGLGeometryProcessor INHERITED; |
836 }; | 846 }; |
837 | 847 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
903 } | 913 } |
904 } | 914 } |
905 | 915 |
906 void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, | 916 void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, |
907 const GrBatchTracker& bt, | 917 const GrBatchTracker& bt, |
908 const GrGLSLCaps&, | 918 const GrGLSLCaps&, |
909 GrProcessorKeyBuilder* b) { | 919 GrProcessorKeyBuilder* b) { |
910 const DashingCircleBatchTracker& local = bt.cast<DashingCircleBatchTracker>(
); | 920 const DashingCircleBatchTracker& local = bt.cast<DashingCircleBatchTracker>(
); |
911 const DashingCircleEffect& dce = gp.cast<DashingCircleEffect>(); | 921 const DashingCircleEffect& dce = gp.cast<DashingCircleEffect>(); |
912 uint32_t key = 0; | 922 uint32_t key = 0; |
913 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 : 0
x0; | 923 key |= local.fUsesLocalCoords && dce.localMatrix().hasPerspective() ? 0x1 :
0x0; |
914 key |= dce.aaMode() << 8; | 924 key |= dce.aaMode() << 8; |
915 b->add32(key << 16 | local.fInputColorType); | 925 b->add32(key << 16 | local.fInputColorType); |
916 } | 926 } |
917 | 927 |
918 ////////////////////////////////////////////////////////////////////////////// | 928 ////////////////////////////////////////////////////////////////////////////// |
919 | 929 |
920 GrGeometryProcessor* DashingCircleEffect::Create(GrColor color, | 930 GrGeometryProcessor* DashingCircleEffect::Create(GrColor color, |
921 DashAAMode aaMode, | 931 DashAAMode aaMode, |
922 const SkMatrix& localMatrix) { | 932 const SkMatrix& localMatrix) { |
923 return SkNEW_ARGS(DashingCircleEffect, (color, aaMode, localMatrix)); | 933 return SkNEW_ARGS(DashingCircleEffect, (color, aaMode, localMatrix)); |
924 } | 934 } |
925 | 935 |
926 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt, | 936 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt, |
927 const GrGLSLCaps& caps, | 937 const GrGLSLCaps& caps, |
928 GrProcessorKeyBuilder* b) const { | 938 GrProcessorKeyBuilder* b) const { |
929 GLDashingCircleEffect::GenKey(*this, bt, caps, b); | 939 GLDashingCircleEffect::GenKey(*this, bt, caps, b); |
930 } | 940 } |
931 | 941 |
932 GrGLPrimitiveProcessor* DashingCircleEffect::createGLInstance(const GrBatchTrack
er& bt, | 942 GrGLPrimitiveProcessor* DashingCircleEffect::createGLInstance(const GrBatchTrack
er& bt, |
933 const GrGLSLCaps&)
const { | 943 const GrGLSLCaps&)
const { |
934 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); | 944 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); |
935 } | 945 } |
936 | 946 |
937 DashingCircleEffect::DashingCircleEffect(GrColor color, | 947 DashingCircleEffect::DashingCircleEffect(GrColor color, |
938 DashAAMode aaMode, | 948 DashAAMode aaMode, |
939 const SkMatrix& localMatrix) | 949 const SkMatrix& localMatrix) |
940 : INHERITED(localMatrix) | 950 : fColor(color) |
941 , fColor(color) | 951 , fLocalMatrix(localMatrix) |
942 , fAAMode(aaMode) { | 952 , fAAMode(aaMode) { |
943 this->initClassID<DashingCircleEffect>(); | 953 this->initClassID<DashingCircleEffect>(); |
944 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 954 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
945 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); | 955 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); |
946 fInCircleParams = &this->addVertexAttrib(Attribute("inCircleParams", | 956 fInCircleParams = &this->addVertexAttrib(Attribute("inCircleParams", |
947 kVec2f_GrVertexAttribType
)); | 957 kVec2f_GrVertexAttribType
)); |
948 } | 958 } |
949 | 959 |
950 void DashingCircleEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineI
nfo& init) const { | 960 void DashingCircleEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineI
nfo& init) const { |
951 DashingCircleBatchTracker* local = bt->cast<DashingCircleBatchTracker>(); | 961 DashingCircleBatchTracker* local = bt->cast<DashingCircleBatchTracker>(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
996 const Attribute* inPosition() const { return fInPosition; } | 1006 const Attribute* inPosition() const { return fInPosition; } |
997 | 1007 |
998 const Attribute* inDashParams() const { return fInDashParams; } | 1008 const Attribute* inDashParams() const { return fInDashParams; } |
999 | 1009 |
1000 const Attribute* inRectParams() const { return fInRectParams; } | 1010 const Attribute* inRectParams() const { return fInRectParams; } |
1001 | 1011 |
1002 DashAAMode aaMode() const { return fAAMode; } | 1012 DashAAMode aaMode() const { return fAAMode; } |
1003 | 1013 |
1004 GrColor color() const { return fColor; } | 1014 GrColor color() const { return fColor; } |
1005 | 1015 |
| 1016 const SkMatrix& localMatrix() const { return fLocalMatrix; } |
| 1017 |
1006 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 1018 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
1007 const GrGLSLCaps& caps, | 1019 const GrGLSLCaps& caps, |
1008 GrProcessorKeyBuilder* b) const override; | 1020 GrProcessorKeyBuilder* b) const override; |
1009 | 1021 |
1010 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 1022 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
1011 const GrGLSLCaps&) const ov
erride; | 1023 const GrGLSLCaps&) const ov
erride; |
1012 | 1024 |
1013 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; | 1025 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override; |
1014 | 1026 |
1015 private: | 1027 private: |
1016 DashingLineEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix); | 1028 DashingLineEffect(GrColor, DashAAMode aaMode, const SkMatrix& localMatrix); |
1017 | 1029 |
1018 GrColor fColor; | 1030 GrColor fColor; |
| 1031 SkMatrix fLocalMatrix; |
1019 DashAAMode fAAMode; | 1032 DashAAMode fAAMode; |
1020 const Attribute* fInPosition; | 1033 const Attribute* fInPosition; |
1021 const Attribute* fInDashParams; | 1034 const Attribute* fInDashParams; |
1022 const Attribute* fInRectParams; | 1035 const Attribute* fInRectParams; |
1023 | 1036 |
1024 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 1037 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
1025 | 1038 |
1026 typedef GrGeometryProcessor INHERITED; | 1039 typedef GrGeometryProcessor INHERITED; |
1027 }; | 1040 }; |
1028 | 1041 |
1029 ////////////////////////////////////////////////////////////////////////////// | 1042 ////////////////////////////////////////////////////////////////////////////// |
1030 | 1043 |
1031 class GLDashingLineEffect : public GrGLGeometryProcessor { | 1044 class GLDashingLineEffect : public GrGLGeometryProcessor { |
1032 public: | 1045 public: |
1033 GLDashingLineEffect(const GrGeometryProcessor&, const GrBatchTracker&); | 1046 GLDashingLineEffect(const GrGeometryProcessor&, const GrBatchTracker&); |
1034 | 1047 |
1035 void onEmitCode(EmitArgs&, GrGPArgs*) override; | 1048 void onEmitCode(EmitArgs&, GrGPArgs*) override; |
1036 | 1049 |
1037 static inline void GenKey(const GrGeometryProcessor&, | 1050 static inline void GenKey(const GrGeometryProcessor&, |
1038 const GrBatchTracker&, | 1051 const GrBatchTracker&, |
1039 const GrGLSLCaps&, | 1052 const GrGLSLCaps&, |
1040 GrProcessorKeyBuilder*); | 1053 GrProcessorKeyBuilder*); |
1041 | 1054 |
1042 virtual void setData(const GrGLProgramDataManager&, | 1055 virtual void setData(const GrGLProgramDataManager&, |
1043 const GrPrimitiveProcessor&, | 1056 const GrPrimitiveProcessor&, |
1044 const GrBatchTracker&) override; | 1057 const GrBatchTracker&) override; |
1045 | 1058 |
| 1059 void setTransformData(const GrPrimitiveProcessor& primProc, |
| 1060 const GrGLProgramDataManager& pdman, |
| 1061 int index, |
| 1062 const SkTArray<const GrCoordTransform*, true>& transfo
rms) override { |
| 1063 this->setTransformDataHelper<DashingLineEffect>(primProc, pdman, index,
transforms); |
| 1064 } |
| 1065 |
1046 private: | 1066 private: |
1047 GrColor fColor; | 1067 GrColor fColor; |
1048 UniformHandle fColorUniform; | 1068 UniformHandle fColorUniform; |
1049 typedef GrGLGeometryProcessor INHERITED; | 1069 typedef GrGLGeometryProcessor INHERITED; |
1050 }; | 1070 }; |
1051 | 1071 |
1052 GLDashingLineEffect::GLDashingLineEffect(const GrGeometryProcessor&, | 1072 GLDashingLineEffect::GLDashingLineEffect(const GrGeometryProcessor&, |
1053 const GrBatchTracker&) { | 1073 const GrBatchTracker&) { |
1054 fColor = GrColor_ILLEGAL; | 1074 fColor = GrColor_ILLEGAL; |
1055 } | 1075 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1133 } | 1153 } |
1134 } | 1154 } |
1135 | 1155 |
1136 void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, | 1156 void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, |
1137 const GrBatchTracker& bt, | 1157 const GrBatchTracker& bt, |
1138 const GrGLSLCaps&, | 1158 const GrGLSLCaps&, |
1139 GrProcessorKeyBuilder* b) { | 1159 GrProcessorKeyBuilder* b) { |
1140 const DashingLineBatchTracker& local = bt.cast<DashingLineBatchTracker>(); | 1160 const DashingLineBatchTracker& local = bt.cast<DashingLineBatchTracker>(); |
1141 const DashingLineEffect& de = gp.cast<DashingLineEffect>(); | 1161 const DashingLineEffect& de = gp.cast<DashingLineEffect>(); |
1142 uint32_t key = 0; | 1162 uint32_t key = 0; |
1143 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 : 0
x0; | 1163 key |= local.fUsesLocalCoords && de.localMatrix().hasPerspective() ? 0x1 : 0
x0; |
1144 key |= de.aaMode() << 8; | 1164 key |= de.aaMode() << 8; |
1145 b->add32(key << 16 | local.fInputColorType); | 1165 b->add32(key << 16 | local.fInputColorType); |
1146 } | 1166 } |
1147 | 1167 |
1148 ////////////////////////////////////////////////////////////////////////////// | 1168 ////////////////////////////////////////////////////////////////////////////// |
1149 | 1169 |
1150 GrGeometryProcessor* DashingLineEffect::Create(GrColor color, | 1170 GrGeometryProcessor* DashingLineEffect::Create(GrColor color, |
1151 DashAAMode aaMode, | 1171 DashAAMode aaMode, |
1152 const SkMatrix& localMatrix) { | 1172 const SkMatrix& localMatrix) { |
1153 return SkNEW_ARGS(DashingLineEffect, (color, aaMode, localMatrix)); | 1173 return SkNEW_ARGS(DashingLineEffect, (color, aaMode, localMatrix)); |
1154 } | 1174 } |
1155 | 1175 |
1156 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt, | 1176 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt, |
1157 const GrGLSLCaps& caps, | 1177 const GrGLSLCaps& caps, |
1158 GrProcessorKeyBuilder* b) const { | 1178 GrProcessorKeyBuilder* b) const { |
1159 GLDashingLineEffect::GenKey(*this, bt, caps, b); | 1179 GLDashingLineEffect::GenKey(*this, bt, caps, b); |
1160 } | 1180 } |
1161 | 1181 |
1162 GrGLPrimitiveProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker
& bt, | 1182 GrGLPrimitiveProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker
& bt, |
1163 const GrGLSLCaps&) c
onst { | 1183 const GrGLSLCaps&) c
onst { |
1164 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); | 1184 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); |
1165 } | 1185 } |
1166 | 1186 |
1167 DashingLineEffect::DashingLineEffect(GrColor color, | 1187 DashingLineEffect::DashingLineEffect(GrColor color, |
1168 DashAAMode aaMode, | 1188 DashAAMode aaMode, |
1169 const SkMatrix& localMatrix) | 1189 const SkMatrix& localMatrix) |
1170 : INHERITED(localMatrix) | 1190 : fColor(color) |
1171 , fColor(color) | 1191 , fLocalMatrix(localMatrix) |
1172 , fAAMode(aaMode) { | 1192 , fAAMode(aaMode) { |
1173 this->initClassID<DashingLineEffect>(); | 1193 this->initClassID<DashingLineEffect>(); |
1174 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 1194 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
1175 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); | 1195 fInDashParams = &this->addVertexAttrib(Attribute("inDashParams", kVec3f_GrVe
rtexAttribType)); |
1176 fInRectParams = &this->addVertexAttrib(Attribute("inRect", kVec4f_GrVertexAt
tribType)); | 1196 fInRectParams = &this->addVertexAttrib(Attribute("inRect", kVec4f_GrVertexAt
tribType)); |
1177 } | 1197 } |
1178 | 1198 |
1179 void DashingLineEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInf
o& init) const { | 1199 void DashingLineEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInf
o& init) const { |
1180 DashingLineBatchTracker* local = bt->cast<DashingLineBatchTracker>(); | 1200 DashingLineBatchTracker* local = bt->cast<DashingLineBatchTracker>(); |
1181 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); | 1201 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1283 info.fIntervals = intervals; | 1303 info.fIntervals = intervals; |
1284 info.fCount = 2; | 1304 info.fCount = 2; |
1285 info.fPhase = phase; | 1305 info.fPhase = phase; |
1286 SkDEBUGCODE(bool success = ) strokeInfo.setDashInfo(info); | 1306 SkDEBUGCODE(bool success = ) strokeInfo.setDashInfo(info); |
1287 SkASSERT(success); | 1307 SkASSERT(success); |
1288 | 1308 |
1289 return create_batch(color, viewMatrix, pts, useAA, strokeInfo, msaaRT); | 1309 return create_batch(color, viewMatrix, pts, useAA, strokeInfo, msaaRT); |
1290 } | 1310 } |
1291 | 1311 |
1292 #endif | 1312 #endif |
OLD | NEW |