| 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 "GrBezierEffect.h" | 8 #include "GrBezierEffect.h" |
| 9 | 9 |
| 10 #include "gl/GrGLProcessor.h" | 10 #include "gl/GrGLProcessor.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 void onEmitCode(EmitArgs&, GrGPArgs*) override; | 27 void onEmitCode(EmitArgs&, GrGPArgs*) override; |
| 28 | 28 |
| 29 static inline void GenKey(const GrGeometryProcessor&, | 29 static inline void GenKey(const GrGeometryProcessor&, |
| 30 const GrBatchTracker&, | 30 const GrBatchTracker&, |
| 31 const GrGLSLCaps&, | 31 const GrGLSLCaps&, |
| 32 GrProcessorKeyBuilder*); | 32 GrProcessorKeyBuilder*); |
| 33 | 33 |
| 34 virtual void setData(const GrGLProgramDataManager& pdman, | 34 virtual void setData(const GrGLProgramDataManager& pdman, |
| 35 const GrPrimitiveProcessor& primProc, | 35 const GrPrimitiveProcessor& primProc, |
| 36 const GrBatchTracker& bt) override { | 36 const GrBatchTracker& bt) override { |
| 37 this->setUniformViewMatrix(pdman, primProc.viewMatrix()); | 37 const GrConicEffect& ce = primProc.cast<GrConicEffect>(); |
| 38 this->setUniformViewMatrix(pdman, ce.viewMatrix()); |
| 38 | 39 |
| 39 const ConicBatchTracker& local = bt.cast<ConicBatchTracker>(); | 40 const ConicBatchTracker& local = bt.cast<ConicBatchTracker>(); |
| 40 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { | 41 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { |
| 41 GrGLfloat c[4]; | 42 GrGLfloat c[4]; |
| 42 GrColorToRGBAFloat(local.fColor, c); | 43 GrColorToRGBAFloat(local.fColor, c); |
| 43 pdman.set4fv(fColorUniform, 1, c); | 44 pdman.set4fv(fColorUniform, 1, c); |
| 44 fColor = local.fColor; | 45 fColor = local.fColor; |
| 45 } | 46 } |
| 46 if (0xff != local.fCoverageScale && fCoverageScale != local.fCoverageSca
le) { | 47 if (0xff != local.fCoverageScale && fCoverageScale != local.fCoverageSca
le) { |
| 47 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(local.fCov
erageScale)); | 48 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(local.fCov
erageScale)); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 void GrGLConicEffect::GenKey(const GrGeometryProcessor& gp, | 164 void GrGLConicEffect::GenKey(const GrGeometryProcessor& gp, |
| 164 const GrBatchTracker& bt, | 165 const GrBatchTracker& bt, |
| 165 const GrGLSLCaps&, | 166 const GrGLSLCaps&, |
| 166 GrProcessorKeyBuilder* b) { | 167 GrProcessorKeyBuilder* b) { |
| 167 const GrConicEffect& ce = gp.cast<GrConicEffect>(); | 168 const GrConicEffect& ce = gp.cast<GrConicEffect>(); |
| 168 const ConicBatchTracker& local = bt.cast<ConicBatchTracker>(); | 169 const ConicBatchTracker& local = bt.cast<ConicBatchTracker>(); |
| 169 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; | 170 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; |
| 170 key |= kUniform_GrGPInput == local.fInputColorType ? 0x4 : 0x0; | 171 key |= kUniform_GrGPInput == local.fInputColorType ? 0x4 : 0x0; |
| 171 key |= 0xff != local.fCoverageScale ? 0x8 : 0x0; | 172 key |= 0xff != local.fCoverageScale ? 0x8 : 0x0; |
| 172 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x10 :
0x0; | 173 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x10 :
0x0; |
| 173 key |= ComputePosKey(gp.viewMatrix()) << 5; | 174 key |= ComputePosKey(ce.viewMatrix()) << 5; |
| 174 b->add32(key); | 175 b->add32(key); |
| 175 } | 176 } |
| 176 | 177 |
| 177 ////////////////////////////////////////////////////////////////////////////// | 178 ////////////////////////////////////////////////////////////////////////////// |
| 178 | 179 |
| 179 GrConicEffect::~GrConicEffect() {} | 180 GrConicEffect::~GrConicEffect() {} |
| 180 | 181 |
| 181 void GrConicEffect::getGLProcessorKey(const GrBatchTracker& bt, | 182 void GrConicEffect::getGLProcessorKey(const GrBatchTracker& bt, |
| 182 const GrGLSLCaps& caps, | 183 const GrGLSLCaps& caps, |
| 183 GrProcessorKeyBuilder* b) const { | 184 GrProcessorKeyBuilder* b) const { |
| 184 GrGLConicEffect::GenKey(*this, bt, caps, b); | 185 GrGLConicEffect::GenKey(*this, bt, caps, b); |
| 185 } | 186 } |
| 186 | 187 |
| 187 GrGLPrimitiveProcessor* GrConicEffect::createGLInstance(const GrBatchTracker& bt
, | 188 GrGLPrimitiveProcessor* GrConicEffect::createGLInstance(const GrBatchTracker& bt
, |
| 188 const GrGLSLCaps&) const
{ | 189 const GrGLSLCaps&) const
{ |
| 189 return SkNEW_ARGS(GrGLConicEffect, (*this, bt)); | 190 return SkNEW_ARGS(GrGLConicEffect, (*this, bt)); |
| 190 } | 191 } |
| 191 | 192 |
| 192 GrConicEffect::GrConicEffect(GrColor color, const SkMatrix& viewMatrix, uint8_t
coverage, | 193 GrConicEffect::GrConicEffect(GrColor color, const SkMatrix& viewMatrix, uint8_t
coverage, |
| 193 GrPrimitiveEdgeType edgeType, const SkMatrix& local
Matrix) | 194 GrPrimitiveEdgeType edgeType, const SkMatrix& local
Matrix) |
| 194 : INHERITED(viewMatrix, localMatrix) | 195 : INHERITED(localMatrix) |
| 195 , fColor(color) | 196 , fColor(color) |
| 197 , fViewMatrix(viewMatrix) |
| 196 , fCoverageScale(coverage) | 198 , fCoverageScale(coverage) |
| 197 , fEdgeType(edgeType) { | 199 , fEdgeType(edgeType) { |
| 198 this->initClassID<GrConicEffect>(); | 200 this->initClassID<GrConicEffect>(); |
| 199 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 201 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 200 fInConicCoeffs = &this->addVertexAttrib(Attribute("inConicCoeffs", | 202 fInConicCoeffs = &this->addVertexAttrib(Attribute("inConicCoeffs", |
| 201 kVec4f_GrVertexAttribTyp
e)); | 203 kVec4f_GrVertexAttribTyp
e)); |
| 202 } | 204 } |
| 203 | 205 |
| 204 void GrConicEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& i
nit) const { | 206 void GrConicEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& i
nit) const { |
| 205 ConicBatchTracker* local = bt->cast<ConicBatchTracker>(); | 207 ConicBatchTracker* local = bt->cast<ConicBatchTracker>(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 void onEmitCode(EmitArgs&, GrGPArgs*) override; | 248 void onEmitCode(EmitArgs&, GrGPArgs*) override; |
| 247 | 249 |
| 248 static inline void GenKey(const GrGeometryProcessor&, | 250 static inline void GenKey(const GrGeometryProcessor&, |
| 249 const GrBatchTracker&, | 251 const GrBatchTracker&, |
| 250 const GrGLSLCaps&, | 252 const GrGLSLCaps&, |
| 251 GrProcessorKeyBuilder*); | 253 GrProcessorKeyBuilder*); |
| 252 | 254 |
| 253 virtual void setData(const GrGLProgramDataManager& pdman, | 255 virtual void setData(const GrGLProgramDataManager& pdman, |
| 254 const GrPrimitiveProcessor& primProc, | 256 const GrPrimitiveProcessor& primProc, |
| 255 const GrBatchTracker& bt) override { | 257 const GrBatchTracker& bt) override { |
| 256 this->setUniformViewMatrix(pdman, primProc.viewMatrix()); | 258 const GrQuadEffect& qe = primProc.cast<GrQuadEffect>(); |
| 259 this->setUniformViewMatrix(pdman, qe.viewMatrix()); |
| 257 | 260 |
| 258 const QuadBatchTracker& local = bt.cast<QuadBatchTracker>(); | 261 const QuadBatchTracker& local = bt.cast<QuadBatchTracker>(); |
| 259 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { | 262 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { |
| 260 GrGLfloat c[4]; | 263 GrGLfloat c[4]; |
| 261 GrColorToRGBAFloat(local.fColor, c); | 264 GrColorToRGBAFloat(local.fColor, c); |
| 262 pdman.set4fv(fColorUniform, 1, c); | 265 pdman.set4fv(fColorUniform, 1, c); |
| 263 fColor = local.fColor; | 266 fColor = local.fColor; |
| 264 } | 267 } |
| 265 if (0xff != local.fCoverageScale && local.fCoverageScale != fCoverageSca
le) { | 268 if (0xff != local.fCoverageScale && local.fCoverageScale != fCoverageSca
le) { |
| 266 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(local.fCov
erageScale)); | 269 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(local.fCov
erageScale)); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 void GrGLQuadEffect::GenKey(const GrGeometryProcessor& gp, | 371 void GrGLQuadEffect::GenKey(const GrGeometryProcessor& gp, |
| 369 const GrBatchTracker& bt, | 372 const GrBatchTracker& bt, |
| 370 const GrGLSLCaps&, | 373 const GrGLSLCaps&, |
| 371 GrProcessorKeyBuilder* b) { | 374 GrProcessorKeyBuilder* b) { |
| 372 const GrQuadEffect& ce = gp.cast<GrQuadEffect>(); | 375 const GrQuadEffect& ce = gp.cast<GrQuadEffect>(); |
| 373 const QuadBatchTracker& local = bt.cast<QuadBatchTracker>(); | 376 const QuadBatchTracker& local = bt.cast<QuadBatchTracker>(); |
| 374 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; | 377 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; |
| 375 key |= kUniform_GrGPInput == local.fInputColorType ? 0x4 : 0x0; | 378 key |= kUniform_GrGPInput == local.fInputColorType ? 0x4 : 0x0; |
| 376 key |= 0xff != local.fCoverageScale ? 0x8 : 0x0; | 379 key |= 0xff != local.fCoverageScale ? 0x8 : 0x0; |
| 377 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x10 :
0x0; | 380 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x10 :
0x0; |
| 378 key |= ComputePosKey(gp.viewMatrix()) << 5; | 381 key |= ComputePosKey(ce.viewMatrix()) << 5; |
| 379 b->add32(key); | 382 b->add32(key); |
| 380 } | 383 } |
| 381 | 384 |
| 382 ////////////////////////////////////////////////////////////////////////////// | 385 ////////////////////////////////////////////////////////////////////////////// |
| 383 | 386 |
| 384 GrQuadEffect::~GrQuadEffect() {} | 387 GrQuadEffect::~GrQuadEffect() {} |
| 385 | 388 |
| 386 void GrQuadEffect::getGLProcessorKey(const GrBatchTracker& bt, | 389 void GrQuadEffect::getGLProcessorKey(const GrBatchTracker& bt, |
| 387 const GrGLSLCaps& caps, | 390 const GrGLSLCaps& caps, |
| 388 GrProcessorKeyBuilder* b) const { | 391 GrProcessorKeyBuilder* b) const { |
| 389 GrGLQuadEffect::GenKey(*this, bt, caps, b); | 392 GrGLQuadEffect::GenKey(*this, bt, caps, b); |
| 390 } | 393 } |
| 391 | 394 |
| 392 GrGLPrimitiveProcessor* GrQuadEffect::createGLInstance(const GrBatchTracker& bt, | 395 GrGLPrimitiveProcessor* GrQuadEffect::createGLInstance(const GrBatchTracker& bt, |
| 393 const GrGLSLCaps&) const
{ | 396 const GrGLSLCaps&) const
{ |
| 394 return SkNEW_ARGS(GrGLQuadEffect, (*this, bt)); | 397 return SkNEW_ARGS(GrGLQuadEffect, (*this, bt)); |
| 395 } | 398 } |
| 396 | 399 |
| 397 GrQuadEffect::GrQuadEffect(GrColor color, const SkMatrix& viewMatrix, uint8_t co
verage, | 400 GrQuadEffect::GrQuadEffect(GrColor color, const SkMatrix& viewMatrix, uint8_t co
verage, |
| 398 GrPrimitiveEdgeType edgeType, const SkMatrix& localMa
trix) | 401 GrPrimitiveEdgeType edgeType, const SkMatrix& localMa
trix) |
| 399 : INHERITED(viewMatrix, localMatrix) | 402 : INHERITED(localMatrix) |
| 400 , fColor(color) | 403 , fColor(color) |
| 404 , fViewMatrix(viewMatrix) |
| 401 , fCoverageScale(coverage) | 405 , fCoverageScale(coverage) |
| 402 , fEdgeType(edgeType) { | 406 , fEdgeType(edgeType) { |
| 403 this->initClassID<GrQuadEffect>(); | 407 this->initClassID<GrQuadEffect>(); |
| 404 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 408 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 405 fInHairQuadEdge = &this->addVertexAttrib(Attribute("inHairQuadEdge", | 409 fInHairQuadEdge = &this->addVertexAttrib(Attribute("inHairQuadEdge", |
| 406 kVec4f_GrVertexAttribTyp
e)); | 410 kVec4f_GrVertexAttribTyp
e)); |
| 407 } | 411 } |
| 408 | 412 |
| 409 void GrQuadEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& in
it) const { | 413 void GrQuadEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& in
it) const { |
| 410 QuadBatchTracker* local = bt->cast<QuadBatchTracker>(); | 414 QuadBatchTracker* local = bt->cast<QuadBatchTracker>(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 void onEmitCode(EmitArgs&, GrGPArgs*) override; | 455 void onEmitCode(EmitArgs&, GrGPArgs*) override; |
| 452 | 456 |
| 453 static inline void GenKey(const GrGeometryProcessor&, | 457 static inline void GenKey(const GrGeometryProcessor&, |
| 454 const GrBatchTracker&, | 458 const GrBatchTracker&, |
| 455 const GrGLSLCaps&, | 459 const GrGLSLCaps&, |
| 456 GrProcessorKeyBuilder*); | 460 GrProcessorKeyBuilder*); |
| 457 | 461 |
| 458 virtual void setData(const GrGLProgramDataManager& pdman, | 462 virtual void setData(const GrGLProgramDataManager& pdman, |
| 459 const GrPrimitiveProcessor& primProc, | 463 const GrPrimitiveProcessor& primProc, |
| 460 const GrBatchTracker& bt) override { | 464 const GrBatchTracker& bt) override { |
| 461 this->setUniformViewMatrix(pdman, primProc.viewMatrix()); | 465 const GrCubicEffect& ce = primProc.cast<GrCubicEffect>(); |
| 466 this->setUniformViewMatrix(pdman, ce.viewMatrix()); |
| 462 | 467 |
| 463 const CubicBatchTracker& local = bt.cast<CubicBatchTracker>(); | 468 const CubicBatchTracker& local = bt.cast<CubicBatchTracker>(); |
| 464 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { | 469 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo
r) { |
| 465 GrGLfloat c[4]; | 470 GrGLfloat c[4]; |
| 466 GrColorToRGBAFloat(local.fColor, c); | 471 GrColorToRGBAFloat(local.fColor, c); |
| 467 pdman.set4fv(fColorUniform, 1, c); | 472 pdman.set4fv(fColorUniform, 1, c); |
| 468 fColor = local.fColor; | 473 fColor = local.fColor; |
| 469 } | 474 } |
| 470 } | 475 } |
| 471 | 476 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 | 601 |
| 597 void GrGLCubicEffect::GenKey(const GrGeometryProcessor& gp, | 602 void GrGLCubicEffect::GenKey(const GrGeometryProcessor& gp, |
| 598 const GrBatchTracker& bt, | 603 const GrBatchTracker& bt, |
| 599 const GrGLSLCaps&, | 604 const GrGLSLCaps&, |
| 600 GrProcessorKeyBuilder* b) { | 605 GrProcessorKeyBuilder* b) { |
| 601 const GrCubicEffect& ce = gp.cast<GrCubicEffect>(); | 606 const GrCubicEffect& ce = gp.cast<GrCubicEffect>(); |
| 602 const CubicBatchTracker& local = bt.cast<CubicBatchTracker>(); | 607 const CubicBatchTracker& local = bt.cast<CubicBatchTracker>(); |
| 603 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; | 608 uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; |
| 604 key |= kUniform_GrGPInput == local.fInputColorType ? 0x4 : 0x8; | 609 key |= kUniform_GrGPInput == local.fInputColorType ? 0x4 : 0x8; |
| 605 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x10 :
0x0; | 610 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x10 :
0x0; |
| 606 key |= ComputePosKey(gp.viewMatrix()) << 5; | 611 key |= ComputePosKey(ce.viewMatrix()) << 5; |
| 607 b->add32(key); | 612 b->add32(key); |
| 608 } | 613 } |
| 609 | 614 |
| 610 ////////////////////////////////////////////////////////////////////////////// | 615 ////////////////////////////////////////////////////////////////////////////// |
| 611 | 616 |
| 612 GrCubicEffect::~GrCubicEffect() {} | 617 GrCubicEffect::~GrCubicEffect() {} |
| 613 | 618 |
| 614 void GrCubicEffect::getGLProcessorKey(const GrBatchTracker& bt, | 619 void GrCubicEffect::getGLProcessorKey(const GrBatchTracker& bt, |
| 615 const GrGLSLCaps& caps, | 620 const GrGLSLCaps& caps, |
| 616 GrProcessorKeyBuilder* b) const { | 621 GrProcessorKeyBuilder* b) const { |
| 617 GrGLCubicEffect::GenKey(*this, bt, caps, b); | 622 GrGLCubicEffect::GenKey(*this, bt, caps, b); |
| 618 } | 623 } |
| 619 | 624 |
| 620 GrGLPrimitiveProcessor* GrCubicEffect::createGLInstance(const GrBatchTracker& bt
, | 625 GrGLPrimitiveProcessor* GrCubicEffect::createGLInstance(const GrBatchTracker& bt
, |
| 621 const GrGLSLCaps&) const
{ | 626 const GrGLSLCaps&) const
{ |
| 622 return SkNEW_ARGS(GrGLCubicEffect, (*this, bt)); | 627 return SkNEW_ARGS(GrGLCubicEffect, (*this, bt)); |
| 623 } | 628 } |
| 624 | 629 |
| 625 GrCubicEffect::GrCubicEffect(GrColor color, const SkMatrix& viewMatrix, | 630 GrCubicEffect::GrCubicEffect(GrColor color, const SkMatrix& viewMatrix, |
| 626 GrPrimitiveEdgeType edgeType) | 631 GrPrimitiveEdgeType edgeType) |
| 627 : INHERITED(viewMatrix) | 632 : fColor(color) |
| 628 , fColor(color) | 633 , fViewMatrix(viewMatrix) |
| 629 , fEdgeType(edgeType) { | 634 , fEdgeType(edgeType) { |
| 630 this->initClassID<GrCubicEffect>(); | 635 this->initClassID<GrCubicEffect>(); |
| 631 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 636 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 632 fInCubicCoeffs = &this->addVertexAttrib(Attribute("inCubicCoeffs", | 637 fInCubicCoeffs = &this->addVertexAttrib(Attribute("inCubicCoeffs", |
| 633 kVec4f_GrVertexAttribTyp
e)); | 638 kVec4f_GrVertexAttribTyp
e)); |
| 634 } | 639 } |
| 635 | 640 |
| 636 void GrCubicEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& i
nit) const { | 641 void GrCubicEffect::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& i
nit) const { |
| 637 CubicBatchTracker* local = bt->cast<CubicBatchTracker>(); | 642 CubicBatchTracker* local = bt->cast<CubicBatchTracker>(); |
| 638 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); | 643 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, false); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 650 GrGeometryProcessor* gp; | 655 GrGeometryProcessor* gp; |
| 651 do { | 656 do { |
| 652 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( | 657 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( |
| 653 random->nextULessThan(kGrPro
cessorEdgeTypeCnt)); | 658 random->nextULessThan(kGrPro
cessorEdgeTypeCnt)); |
| 654 gp = GrCubicEffect::Create(GrRandomColor(random), | 659 gp = GrCubicEffect::Create(GrRandomColor(random), |
| 655 GrTest::TestMatrix(random), edgeType, caps); | 660 GrTest::TestMatrix(random), edgeType, caps); |
| 656 } while (NULL == gp); | 661 } while (NULL == gp); |
| 657 return gp; | 662 return gp; |
| 658 } | 663 } |
| 659 | 664 |
| OLD | NEW |