| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrOvalRenderer.h" | 8 #include "GrOvalRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatch.h" | 10 #include "GrBatch.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 | 71 |
| 72 class CircleEdgeEffect : public GrGeometryProcessor { | 72 class CircleEdgeEffect : public GrGeometryProcessor { |
| 73 public: | 73 public: |
| 74 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri
x& localMatrix) { | 74 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri
x& localMatrix) { |
| 75 return SkNEW_ARGS(CircleEdgeEffect, (color, stroke, localMatrix)); | 75 return SkNEW_ARGS(CircleEdgeEffect, (color, stroke, localMatrix)); |
| 76 } | 76 } |
| 77 | 77 |
| 78 const Attribute* inPosition() const { return fInPosition; } | 78 const Attribute* inPosition() const { return fInPosition; } |
| 79 const Attribute* inCircleEdge() const { return fInCircleEdge; } | 79 const Attribute* inCircleEdge() const { return fInCircleEdge; } |
| 80 GrColor color() const { return fColor; } | 80 GrColor color() const { return fColor; } |
| 81 const SkMatrix& localMatrix() const { return fLocalMatrix; } |
| 81 virtual ~CircleEdgeEffect() {} | 82 virtual ~CircleEdgeEffect() {} |
| 82 | 83 |
| 83 const char* name() const override { return "CircleEdge"; } | 84 const char* name() const override { return "CircleEdge"; } |
| 84 | 85 |
| 85 inline bool isStroked() const { return fStroke; } | 86 inline bool isStroked() const { return fStroke; } |
| 86 | 87 |
| 87 class GLProcessor : public GrGLGeometryProcessor { | 88 class GLProcessor : public GrGLGeometryProcessor { |
| 88 public: | 89 public: |
| 89 GLProcessor(const GrGeometryProcessor&, | 90 GLProcessor(const GrGeometryProcessor&, |
| 90 const GrBatchTracker&) | 91 const GrBatchTracker&) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 } | 125 } |
| 125 | 126 |
| 126 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 127 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
| 127 } | 128 } |
| 128 | 129 |
| 129 static void GenKey(const GrGeometryProcessor& gp, | 130 static void GenKey(const GrGeometryProcessor& gp, |
| 130 const GrBatchTracker& bt, | 131 const GrBatchTracker& bt, |
| 131 const GrGLSLCaps&, | 132 const GrGLSLCaps&, |
| 132 GrProcessorKeyBuilder* b) { | 133 GrProcessorKeyBuilder* b) { |
| 133 const BatchTracker& local = bt.cast<BatchTracker>(); | 134 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 134 const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>(); | 135 const CircleEdgeEffect& ce = gp.cast<CircleEdgeEffect>(); |
| 135 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0; | 136 uint16_t key = ce.isStroked() ? 0x1 : 0x0; |
| 136 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ?
0x2 : 0x0; | 137 key |= local.fUsesLocalCoords && ce.localMatrix().hasPerspective() ?
0x2 : 0x0; |
| 137 b->add32(key << 16 | local.fInputColorType); | 138 b->add32(key << 16 | local.fInputColorType); |
| 138 } | 139 } |
| 139 | 140 |
| 140 virtual void setData(const GrGLProgramDataManager& pdman, | 141 virtual void setData(const GrGLProgramDataManager& pdman, |
| 141 const GrPrimitiveProcessor& gp, | 142 const GrPrimitiveProcessor& gp, |
| 142 const GrBatchTracker& bt) override { | 143 const GrBatchTracker& bt) override { |
| 143 const BatchTracker& local = bt.cast<BatchTracker>(); | 144 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 144 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { | 145 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
| 145 GrGLfloat c[4]; | 146 GrGLfloat c[4]; |
| 146 GrColorToRGBAFloat(local.fColor, c); | 147 GrColorToRGBAFloat(local.fColor, c); |
| 147 pdman.set4fv(fColorUniform, 1, c); | 148 pdman.set4fv(fColorUniform, 1, c); |
| 148 fColor = local.fColor; | 149 fColor = local.fColor; |
| 149 } | 150 } |
| 150 } | 151 } |
| 151 | 152 |
| 153 void setTransformData(const GrPrimitiveProcessor& primProc, |
| 154 const GrGLProgramDataManager& pdman, |
| 155 int index, |
| 156 const SkTArray<const GrCoordTransform*, true>& tra
nsforms) override { |
| 157 this->setTransformDataHelper<CircleEdgeEffect>(primProc, pdman, inde
x, transforms); |
| 158 } |
| 159 |
| 152 private: | 160 private: |
| 153 GrColor fColor; | 161 GrColor fColor; |
| 154 UniformHandle fColorUniform; | 162 UniformHandle fColorUniform; |
| 155 typedef GrGLGeometryProcessor INHERITED; | 163 typedef GrGLGeometryProcessor INHERITED; |
| 156 }; | 164 }; |
| 157 | 165 |
| 158 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 166 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 159 const GrGLSLCaps& caps, | 167 const GrGLSLCaps& caps, |
| 160 GrProcessorKeyBuilder* b) const override { | 168 GrProcessorKeyBuilder* b) const override { |
| 161 GLProcessor::GenKey(*this, bt, caps, b); | 169 GLProcessor::GenKey(*this, bt, caps, b); |
| 162 } | 170 } |
| 163 | 171 |
| 164 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 172 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 165 const GrGLSLCaps&) const ov
erride { | 173 const GrGLSLCaps&) const ov
erride { |
| 166 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 174 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
| 167 } | 175 } |
| 168 | 176 |
| 169 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { | 177 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { |
| 170 BatchTracker* local = bt->cast<BatchTracker>(); | 178 BatchTracker* local = bt->cast<BatchTracker>(); |
| 171 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); | 179 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
| 172 local->fUsesLocalCoords = init.fUsesLocalCoords; | 180 local->fUsesLocalCoords = init.fUsesLocalCoords; |
| 173 } | 181 } |
| 174 | 182 |
| 175 private: | 183 private: |
| 176 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) | 184 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) |
| 177 : INHERITED(localMatrix) | 185 : fColor(color) |
| 178 , fColor(color) { | 186 , fLocalMatrix(localMatrix) { |
| 179 this->initClassID<CircleEdgeEffect>(); | 187 this->initClassID<CircleEdgeEffect>(); |
| 180 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); | 188 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); |
| 181 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge", | 189 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge", |
| 182 kVec4f_GrVertexAttrib
Type)); | 190 kVec4f_GrVertexAttrib
Type)); |
| 183 fStroke = stroke; | 191 fStroke = stroke; |
| 184 } | 192 } |
| 185 | 193 |
| 186 struct BatchTracker { | 194 struct BatchTracker { |
| 187 GrGPInput fInputColorType; | 195 GrGPInput fInputColorType; |
| 188 GrColor fColor; | 196 GrColor fColor; |
| 189 bool fUsesLocalCoords; | 197 bool fUsesLocalCoords; |
| 190 }; | 198 }; |
| 191 | 199 |
| 192 GrColor fColor; | 200 GrColor fColor; |
| 201 SkMatrix fLocalMatrix; |
| 193 const Attribute* fInPosition; | 202 const Attribute* fInPosition; |
| 194 const Attribute* fInCircleEdge; | 203 const Attribute* fInCircleEdge; |
| 195 bool fStroke; | 204 bool fStroke; |
| 196 | 205 |
| 197 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 206 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
| 198 | 207 |
| 199 typedef GrGeometryProcessor INHERITED; | 208 typedef GrGeometryProcessor INHERITED; |
| 200 }; | 209 }; |
| 201 | 210 |
| 202 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(CircleEdgeEffect); | 211 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(CircleEdgeEffect); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 227 } | 236 } |
| 228 | 237 |
| 229 virtual ~EllipseEdgeEffect() {} | 238 virtual ~EllipseEdgeEffect() {} |
| 230 | 239 |
| 231 const char* name() const override { return "EllipseEdge"; } | 240 const char* name() const override { return "EllipseEdge"; } |
| 232 | 241 |
| 233 const Attribute* inPosition() const { return fInPosition; } | 242 const Attribute* inPosition() const { return fInPosition; } |
| 234 const Attribute* inEllipseOffset() const { return fInEllipseOffset; } | 243 const Attribute* inEllipseOffset() const { return fInEllipseOffset; } |
| 235 const Attribute* inEllipseRadii() const { return fInEllipseRadii; } | 244 const Attribute* inEllipseRadii() const { return fInEllipseRadii; } |
| 236 GrColor color() const { return fColor; } | 245 GrColor color() const { return fColor; } |
| 246 const SkMatrix& localMatrix() const { return fLocalMatrix; } |
| 237 | 247 |
| 238 inline bool isStroked() const { return fStroke; } | 248 inline bool isStroked() const { return fStroke; } |
| 239 | 249 |
| 240 class GLProcessor : public GrGLGeometryProcessor { | 250 class GLProcessor : public GrGLGeometryProcessor { |
| 241 public: | 251 public: |
| 242 GLProcessor(const GrGeometryProcessor&, | 252 GLProcessor(const GrGeometryProcessor&, |
| 243 const GrBatchTracker&) | 253 const GrBatchTracker&) |
| 244 : fColor(GrColor_ILLEGAL) {} | 254 : fColor(GrColor_ILLEGAL) {} |
| 245 | 255 |
| 246 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ | 256 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 } | 308 } |
| 299 | 309 |
| 300 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 310 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
| 301 } | 311 } |
| 302 | 312 |
| 303 static void GenKey(const GrGeometryProcessor& gp, | 313 static void GenKey(const GrGeometryProcessor& gp, |
| 304 const GrBatchTracker& bt, | 314 const GrBatchTracker& bt, |
| 305 const GrGLSLCaps&, | 315 const GrGLSLCaps&, |
| 306 GrProcessorKeyBuilder* b) { | 316 GrProcessorKeyBuilder* b) { |
| 307 const BatchTracker& local = bt.cast<BatchTracker>(); | 317 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 308 const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>(
); | 318 const EllipseEdgeEffect& ee = gp.cast<EllipseEdgeEffect>(); |
| 309 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0; | 319 uint16_t key = ee.isStroked() ? 0x1 : 0x0; |
| 310 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ?
0x2 : 0x0; | 320 key |= local.fUsesLocalCoords && ee.localMatrix().hasPerspective() ?
0x2 : 0x0; |
| 311 b->add32(key << 16 | local.fInputColorType); | 321 b->add32(key << 16 | local.fInputColorType); |
| 312 } | 322 } |
| 313 | 323 |
| 314 virtual void setData(const GrGLProgramDataManager& pdman, | 324 virtual void setData(const GrGLProgramDataManager& pdman, |
| 315 const GrPrimitiveProcessor& gp, | 325 const GrPrimitiveProcessor& gp, |
| 316 const GrBatchTracker& bt) override { | 326 const GrBatchTracker& bt) override { |
| 317 | 327 |
| 318 const BatchTracker& local = bt.cast<BatchTracker>(); | 328 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 319 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { | 329 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
| 320 GrGLfloat c[4]; | 330 GrGLfloat c[4]; |
| 321 GrColorToRGBAFloat(local.fColor, c); | 331 GrColorToRGBAFloat(local.fColor, c); |
| 322 pdman.set4fv(fColorUniform, 1, c); | 332 pdman.set4fv(fColorUniform, 1, c); |
| 323 fColor = local.fColor; | 333 fColor = local.fColor; |
| 324 } | 334 } |
| 325 } | 335 } |
| 326 | 336 |
| 337 void setTransformData(const GrPrimitiveProcessor& primProc, |
| 338 const GrGLProgramDataManager& pdman, |
| 339 int index, |
| 340 const SkTArray<const GrCoordTransform*, true>& tra
nsforms) override { |
| 341 this->setTransformDataHelper<EllipseEdgeEffect>(primProc, pdman, ind
ex, transforms); |
| 342 } |
| 343 |
| 327 private: | 344 private: |
| 328 GrColor fColor; | 345 GrColor fColor; |
| 329 UniformHandle fColorUniform; | 346 UniformHandle fColorUniform; |
| 330 | 347 |
| 331 typedef GrGLGeometryProcessor INHERITED; | 348 typedef GrGLGeometryProcessor INHERITED; |
| 332 }; | 349 }; |
| 333 | 350 |
| 334 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 351 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 335 const GrGLSLCaps& caps, | 352 const GrGLSLCaps& caps, |
| 336 GrProcessorKeyBuilder* b) const override { | 353 GrProcessorKeyBuilder* b) const override { |
| 337 GLProcessor::GenKey(*this, bt, caps, b); | 354 GLProcessor::GenKey(*this, bt, caps, b); |
| 338 } | 355 } |
| 339 | 356 |
| 340 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 357 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 341 const GrGLSLCaps&) const ov
erride { | 358 const GrGLSLCaps&) const ov
erride { |
| 342 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 359 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
| 343 } | 360 } |
| 344 | 361 |
| 345 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { | 362 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { |
| 346 BatchTracker* local = bt->cast<BatchTracker>(); | 363 BatchTracker* local = bt->cast<BatchTracker>(); |
| 347 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); | 364 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
| 348 local->fUsesLocalCoords = init.fUsesLocalCoords; | 365 local->fUsesLocalCoords = init.fUsesLocalCoords; |
| 349 } | 366 } |
| 350 | 367 |
| 351 private: | 368 private: |
| 352 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) | 369 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) |
| 353 : INHERITED(localMatrix) | 370 : fColor(color) |
| 354 , fColor(color) { | 371 , fLocalMatrix(localMatrix) { |
| 355 this->initClassID<EllipseEdgeEffect>(); | 372 this->initClassID<EllipseEdgeEffect>(); |
| 356 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); | 373 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); |
| 357 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset", | 374 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset", |
| 358 kVec2f_GrVertexAtt
ribType)); | 375 kVec2f_GrVertexAtt
ribType)); |
| 359 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii", | 376 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii", |
| 360 kVec4f_GrVertexAttr
ibType)); | 377 kVec4f_GrVertexAttr
ibType)); |
| 361 fStroke = stroke; | 378 fStroke = stroke; |
| 362 } | 379 } |
| 363 | 380 |
| 364 struct BatchTracker { | 381 struct BatchTracker { |
| 365 GrGPInput fInputColorType; | 382 GrGPInput fInputColorType; |
| 366 GrColor fColor; | 383 GrColor fColor; |
| 367 bool fUsesLocalCoords; | 384 bool fUsesLocalCoords; |
| 368 }; | 385 }; |
| 369 | 386 |
| 370 const Attribute* fInPosition; | 387 const Attribute* fInPosition; |
| 371 const Attribute* fInEllipseOffset; | 388 const Attribute* fInEllipseOffset; |
| 372 const Attribute* fInEllipseRadii; | 389 const Attribute* fInEllipseRadii; |
| 373 GrColor fColor; | 390 GrColor fColor; |
| 391 SkMatrix fLocalMatrix; |
| 374 bool fStroke; | 392 bool fStroke; |
| 375 | 393 |
| 376 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 394 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
| 377 | 395 |
| 378 typedef GrGeometryProcessor INHERITED; | 396 typedef GrGeometryProcessor INHERITED; |
| 379 }; | 397 }; |
| 380 | 398 |
| 381 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(EllipseEdgeEffect); | 399 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(EllipseEdgeEffect); |
| 382 | 400 |
| 383 GrGeometryProcessor* EllipseEdgeEffect::TestCreate(SkRandom* random, | 401 GrGeometryProcessor* EllipseEdgeEffect::TestCreate(SkRandom* random, |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 | 465 |
| 448 // Setup pass through color | 466 // Setup pass through color |
| 449 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, | 467 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, |
| 450 &fColorUniform); | 468 &fColorUniform); |
| 451 | 469 |
| 452 // Setup position | 470 // Setup position |
| 453 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri
x()); | 471 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri
x()); |
| 454 | 472 |
| 455 // emit transforms | 473 // emit transforms |
| 456 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()
->fName, | 474 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()
->fName, |
| 457 ee.localMatrix(), args.fTransformsIn, args.fTra
nsformsOut); | 475 args.fTransformsIn, args.fTransformsOut); |
| 458 | 476 |
| 459 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(
); | 477 GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(
); |
| 460 SkAssertResult(fsBuilder->enableFeature( | 478 SkAssertResult(fsBuilder->enableFeature( |
| 461 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)
); | 479 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)
); |
| 462 // for outer curve | 480 // for outer curve |
| 463 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn()
); | 481 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn()
); |
| 464 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset)
- 1.0;"); | 482 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset)
- 1.0;"); |
| 465 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); | 483 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); |
| 466 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); | 484 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); |
| 467 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y
*duvdx.y," | 485 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y
*duvdx.y," |
| (...skipping 29 matching lines...) Expand all Loading... |
| 497 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 515 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
| 498 } | 516 } |
| 499 | 517 |
| 500 static void GenKey(const GrGeometryProcessor& gp, | 518 static void GenKey(const GrGeometryProcessor& gp, |
| 501 const GrBatchTracker& bt, | 519 const GrBatchTracker& bt, |
| 502 const GrGLSLCaps&, | 520 const GrGLSLCaps&, |
| 503 GrProcessorKeyBuilder* b) { | 521 GrProcessorKeyBuilder* b) { |
| 504 const BatchTracker& local = bt.cast<BatchTracker>(); | 522 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 505 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe
ct>(); | 523 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe
ct>(); |
| 506 uint16_t key = ellipseEffect.getMode(); | 524 uint16_t key = ellipseEffect.getMode(); |
| 507 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ?
0x1 << 8 : 0x0; | |
| 508 key |= ComputePosKey(ellipseEffect.viewMatrix()) << 9; | 525 key |= ComputePosKey(ellipseEffect.viewMatrix()) << 9; |
| 509 b->add32(key << 16 | local.fInputColorType); | 526 b->add32(key << 16 | local.fInputColorType); |
| 510 } | 527 } |
| 511 | 528 |
| 512 virtual void setData(const GrGLProgramDataManager& pdman, | 529 virtual void setData(const GrGLProgramDataManager& pdman, |
| 513 const GrPrimitiveProcessor& gp, | 530 const GrPrimitiveProcessor& gp, |
| 514 const GrBatchTracker& bt) override { | 531 const GrBatchTracker& bt) override { |
| 515 const DIEllipseEdgeEffect& dee = gp.cast<DIEllipseEdgeEffect>(); | 532 const DIEllipseEdgeEffect& dee = gp.cast<DIEllipseEdgeEffect>(); |
| 516 this->setUniformViewMatrix(pdman, dee.viewMatrix()); | 533 this->setUniformViewMatrix(pdman, dee.viewMatrix()); |
| 517 | 534 |
| (...skipping 1547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2065 } | 2082 } |
| 2066 | 2083 |
| 2067 BATCH_TEST_DEFINE(RRectBatch) { | 2084 BATCH_TEST_DEFINE(RRectBatch) { |
| 2068 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); | 2085 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); |
| 2069 GrColor color = GrRandomColor(random); | 2086 GrColor color = GrRandomColor(random); |
| 2070 const SkRRect& rrect = GrTest::TestRRectSimple(random); | 2087 const SkRRect& rrect = GrTest::TestRRectSimple(random); |
| 2071 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); | 2088 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); |
| 2072 } | 2089 } |
| 2073 | 2090 |
| 2074 #endif | 2091 #endif |
| OLD | NEW |