| 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 "GrDefaultGeoProcFactory.h" | 8 #include "GrDefaultGeoProcFactory.h" |
| 9 | 9 |
| 10 #include "GrDrawState.h" | 10 #include "GrDrawState.h" |
| 11 #include "GrInvariantOutput.h" | 11 #include "GrInvariantOutput.h" |
| 12 #include "gl/GrGLGeometryProcessor.h" | 12 #include "gl/GrGLGeometryProcessor.h" |
| 13 #include "gl/builders/GrGLProgramBuilder.h" | 13 #include "gl/builders/GrGLProgramBuilder.h" |
| 14 | 14 |
| 15 /* | 15 /* |
| 16 * The default Geometry Processor simply takes position and multiplies it by the
uniform view | 16 * The default Geometry Processor simply takes position and multiplies it by the
uniform view |
| 17 * matrix. It also leaves coverage untouched. Behind the scenes, we may add per
vertex color or | 17 * matrix. It also leaves coverage untouched. Behind the scenes, we may add per
vertex color or |
| 18 * local coords. | 18 * local coords. |
| 19 */ | 19 */ |
| 20 typedef GrDefaultGeoProcFactory Flag; | 20 typedef GrDefaultGeoProcFactory Flag; |
| 21 | 21 |
| 22 class DefaultGeoProc : public GrGeometryProcessor { | 22 class DefaultGeoProc : public GrGeometryProcessor { |
| 23 public: | 23 public: |
| 24 static GrGeometryProcessor* Create(GrColor color, uint8_t coverage, uint32_t
gpTypeFlags, | 24 static GrGeometryProcessor* Create(GrColor color, uint8_t coverage, uint32_t
gpTypeFlags, |
| 25 bool opaqueVertexColors) { | 25 bool opaqueVertexColors, const SkMatrix&
localMatrix) { |
| 26 return SkNEW_ARGS(DefaultGeoProc, (color, coverage, gpTypeFlags, opaqueV
ertexColors)); | 26 return SkNEW_ARGS(DefaultGeoProc, (color, coverage, gpTypeFlags, opaqueV
ertexColors, |
| 27 localMatrix)); |
| 27 } | 28 } |
| 28 | 29 |
| 29 virtual const char* name() const SK_OVERRIDE { return "DefaultGeometryProces
sor"; } | 30 virtual const char* name() const SK_OVERRIDE { return "DefaultGeometryProces
sor"; } |
| 30 | 31 |
| 31 const GrAttribute* inPosition() const { return fInPosition; } | 32 const GrAttribute* inPosition() const { return fInPosition; } |
| 32 const GrAttribute* inColor() const { return fInColor; } | 33 const GrAttribute* inColor() const { return fInColor; } |
| 33 const GrAttribute* inLocalCoords() const { return fInLocalCoords; } | 34 const GrAttribute* inLocalCoords() const { return fInLocalCoords; } |
| 34 const GrAttribute* inCoverage() const { return fInCoverage; } | 35 const GrAttribute* inCoverage() const { return fInCoverage; } |
| 35 uint8_t coverage() const { return fCoverage; } | 36 uint8_t coverage() const { return fCoverage; } |
| 36 | 37 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 | 120 |
| 120 static inline void GenKey(const GrGeometryProcessor& gp, | 121 static inline void GenKey(const GrGeometryProcessor& gp, |
| 121 const GrBatchTracker& bt, | 122 const GrBatchTracker& bt, |
| 122 const GrGLCaps&, | 123 const GrGLCaps&, |
| 123 GrProcessorKeyBuilder* b) { | 124 GrProcessorKeyBuilder* b) { |
| 124 const DefaultGeoProc& def = gp.cast<DefaultGeoProc>(); | 125 const DefaultGeoProc& def = gp.cast<DefaultGeoProc>(); |
| 125 b->add32(def.fFlags); | 126 b->add32(def.fFlags); |
| 126 | 127 |
| 127 const BatchTracker& local = bt.cast<BatchTracker>(); | 128 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 128 b->add32(local.fInputColorType | local.fInputCoverageType << 16); | 129 b->add32(local.fInputColorType | local.fInputCoverageType << 16); |
| 130 b->add32(local.fUsesLocalCoords && gp.localMatrix().hasPerspective()
); |
| 129 } | 131 } |
| 130 | 132 |
| 131 virtual void setData(const GrGLProgramDataManager& pdman, | 133 virtual void setData(const GrGLProgramDataManager& pdman, |
| 132 const GrPrimitiveProcessor& gp, | 134 const GrPrimitiveProcessor& gp, |
| 133 const GrBatchTracker& bt) SK_OVERRIDE { | 135 const GrBatchTracker& bt) SK_OVERRIDE { |
| 134 const BatchTracker& local = bt.cast<BatchTracker>(); | 136 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 135 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { | 137 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
| 136 GrGLfloat c[4]; | 138 GrGLfloat c[4]; |
| 137 GrColorToRGBAFloat(local.fColor, c); | 139 GrColorToRGBAFloat(local.fColor, c); |
| 138 pdman.set4fv(fColorUniform, 1, c); | 140 pdman.set4fv(fColorUniform, 1, c); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 157 const GrGLCaps& caps, | 159 const GrGLCaps& caps, |
| 158 GrProcessorKeyBuilder* b) const SK_OVERRIDE { | 160 GrProcessorKeyBuilder* b) const SK_OVERRIDE { |
| 159 GLProcessor::GenKey(*this, bt, caps, b); | 161 GLProcessor::GenKey(*this, bt, caps, b); |
| 160 } | 162 } |
| 161 | 163 |
| 162 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE { | 164 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE { |
| 163 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 165 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
| 164 } | 166 } |
| 165 | 167 |
| 166 private: | 168 private: |
| 167 DefaultGeoProc(GrColor color, uint8_t coverage, uint32_t gpTypeFlags, bool o
paqueVertexColors) | 169 DefaultGeoProc(GrColor color, uint8_t coverage, uint32_t gpTypeFlags, bool o
paqueVertexColors, |
| 168 : INHERITED(color, opaqueVertexColors) | 170 const SkMatrix& localMatrix) |
| 171 : INHERITED(color, opaqueVertexColors, localMatrix) |
| 169 , fInPosition(NULL) | 172 , fInPosition(NULL) |
| 170 , fInColor(NULL) | 173 , fInColor(NULL) |
| 171 , fInLocalCoords(NULL) | 174 , fInLocalCoords(NULL) |
| 172 , fInCoverage(NULL) | 175 , fInCoverage(NULL) |
| 173 , fCoverage(coverage) | 176 , fCoverage(coverage) |
| 174 , fFlags(gpTypeFlags) { | 177 , fFlags(gpTypeFlags) { |
| 175 this->initClassID<DefaultGeoProc>(); | 178 this->initClassID<DefaultGeoProc>(); |
| 176 bool hasColor = SkToBool(gpTypeFlags & GrDefaultGeoProcFactory::kColor_G
PType); | 179 bool hasColor = SkToBool(gpTypeFlags & GrDefaultGeoProcFactory::kColor_G
PType); |
| 177 bool hasLocalCoord = SkToBool(gpTypeFlags & GrDefaultGeoProcFactory::kLo
calCoord_GPType); | 180 bool hasLocalCoord = SkToBool(gpTypeFlags & GrDefaultGeoProcFactory::kLo
calCoord_GPType); |
| 178 bool hasCoverage = SkToBool(gpTypeFlags & GrDefaultGeoProcFactory::kCove
rage_GPType); | 181 bool hasCoverage = SkToBool(gpTypeFlags & GrDefaultGeoProcFactory::kCove
rage_GPType); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 flags |= GrDefaultGeoProcFactory::kColor_GPType; | 240 flags |= GrDefaultGeoProcFactory::kColor_GPType; |
| 238 } | 241 } |
| 239 if (random->nextBool()) { | 242 if (random->nextBool()) { |
| 240 flags |= GrDefaultGeoProcFactory::kCoverage_GPType; | 243 flags |= GrDefaultGeoProcFactory::kCoverage_GPType; |
| 241 } | 244 } |
| 242 if (random->nextBool()) { | 245 if (random->nextBool()) { |
| 243 flags |= GrDefaultGeoProcFactory::kLocalCoord_GPType; | 246 flags |= GrDefaultGeoProcFactory::kLocalCoord_GPType; |
| 244 } | 247 } |
| 245 | 248 |
| 246 return DefaultGeoProc::Create(GrRandomColor(random), GrRandomCoverage(random
), | 249 return DefaultGeoProc::Create(GrRandomColor(random), GrRandomCoverage(random
), |
| 247 flags, random->nextBool()); | 250 flags, random->nextBool(), |
| 251 GrProcessorUnitTest::TestMatrix(random)); |
| 248 } | 252 } |
| 249 | 253 |
| 250 const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(GrColor color, | 254 const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(GrColor color, |
| 251 uint32_t gpTypeFlags, | 255 uint32_t gpTypeFlags, |
| 252 bool opaqueVertexColo
rs, | 256 bool opaqueVertexColo
rs, |
| 253 uint8_t coverage) { | 257 uint8_t coverage, |
| 254 return DefaultGeoProc::Create(color, coverage, gpTypeFlags, opaqueVertexColo
rs); | 258 const SkMatrix& local
Matrix) { |
| 259 return DefaultGeoProc::Create(color, coverage, gpTypeFlags, opaqueVertexColo
rs, localMatrix); |
| 255 } | 260 } |
| OLD | NEW |