Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: src/gpu/effects/GrBezierEffect.cpp

Issue 820523002: initial changes to add local matrix to primitive processor (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanup-ccm-above-context
Patch Set: cleanup Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/effects/GrBezierEffect.h ('k') | src/gpu/effects/GrBitmapTextGeoProc.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "gl/GrGLSL.h" 11 #include "gl/GrGLSL.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 struct ConicBatchTracker { 15 struct ConicBatchTracker {
16 GrGPInput fInputColorType; 16 GrGPInput fInputColorType;
17 GrColor fColor; 17 GrColor fColor;
18 uint8_t fCoverageScale; 18 uint8_t fCoverageScale;
19 bool fUsesLocalCoords;
19 }; 20 };
20 21
21 class GrGLConicEffect : public GrGLGeometryProcessor { 22 class GrGLConicEffect : public GrGLGeometryProcessor {
22 public: 23 public:
23 GrGLConicEffect(const GrGeometryProcessor&, 24 GrGLConicEffect(const GrGeometryProcessor&,
24 const GrBatchTracker&); 25 const GrBatchTracker&);
25 26
26 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 27 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
27 28
28 static inline void GenKey(const GrGeometryProcessor&, 29 static inline void GenKey(const GrGeometryProcessor&,
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 192
192 bool GrConicEffect::onIsEqual(const GrGeometryProcessor& other) const { 193 bool GrConicEffect::onIsEqual(const GrGeometryProcessor& other) const {
193 const GrConicEffect& ce = other.cast<GrConicEffect>(); 194 const GrConicEffect& ce = other.cast<GrConicEffect>();
194 return (ce.fEdgeType == fEdgeType); 195 return (ce.fEdgeType == fEdgeType);
195 } 196 }
196 197
197 void GrConicEffect::initBatchTracker(GrBatchTracker* bt, const InitBT& init) con st { 198 void GrConicEffect::initBatchTracker(GrBatchTracker* bt, const InitBT& init) con st {
198 ConicBatchTracker* local = bt->cast<ConicBatchTracker>(); 199 ConicBatchTracker* local = bt->cast<ConicBatchTracker>();
199 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false); 200 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false);
200 local->fCoverageScale = fCoverageScale; 201 local->fCoverageScale = fCoverageScale;
202 local->fUsesLocalCoords = init.fUsesLocalCoords;
201 } 203 }
202 204
203 bool GrConicEffect::onCanMakeEqual(const GrBatchTracker& m, const GrBatchTracker & t) const { 205 bool GrConicEffect::onCanMakeEqual(const GrBatchTracker& m,
206 const GrGeometryProcessor& that,
207 const GrBatchTracker& t) const {
204 const ConicBatchTracker& mine = m.cast<ConicBatchTracker>(); 208 const ConicBatchTracker& mine = m.cast<ConicBatchTracker>();
205 const ConicBatchTracker& theirs = t.cast<ConicBatchTracker>(); 209 const ConicBatchTracker& theirs = t.cast<ConicBatchTracker>();
206 return CanCombineOutput(mine.fInputColorType, mine.fColor, 210 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
211 that, theirs.fUsesLocalCoords) &&
212 CanCombineOutput(mine.fInputColorType, mine.fColor,
207 theirs.fInputColorType, theirs.fColor) && 213 theirs.fInputColorType, theirs.fColor) &&
208 mine.fCoverageScale == theirs.fCoverageScale; 214 mine.fCoverageScale == theirs.fCoverageScale;
209 } 215 }
210 216
211 ////////////////////////////////////////////////////////////////////////////// 217 //////////////////////////////////////////////////////////////////////////////
212 218
213 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrConicEffect); 219 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrConicEffect);
214 220
215 GrGeometryProcessor* GrConicEffect::TestCreate(SkRandom* random, 221 GrGeometryProcessor* GrConicEffect::TestCreate(SkRandom* random,
216 GrContext*, 222 GrContext*,
217 const GrDrawTargetCaps& caps, 223 const GrDrawTargetCaps& caps,
218 GrTexture*[]) { 224 GrTexture*[]) {
219 GrGeometryProcessor* gp; 225 GrGeometryProcessor* gp;
220 do { 226 do {
221 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( 227 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>(
222 random->nextULessThan(kGrPro cessorEdgeTypeCnt)); 228 random->nextULessThan(kGrPro cessorEdgeTypeCnt));
223 gp = GrConicEffect::Create(GrRandomColor(random), edgeType, caps); 229 gp = GrConicEffect::Create(GrRandomColor(random), edgeType, caps);
224 } while (NULL == gp); 230 } while (NULL == gp);
225 return gp; 231 return gp;
226 } 232 }
227 233
228 ////////////////////////////////////////////////////////////////////////////// 234 //////////////////////////////////////////////////////////////////////////////
229 // Quad 235 // Quad
230 ////////////////////////////////////////////////////////////////////////////// 236 //////////////////////////////////////////////////////////////////////////////
231 237
232 struct QuadBatchTracker { 238 struct QuadBatchTracker {
233 GrGPInput fInputColorType; 239 GrGPInput fInputColorType;
234 GrColor fColor; 240 GrColor fColor;
235 uint8_t fCoverageScale; 241 uint8_t fCoverageScale;
242 bool fUsesLocalCoords;
236 }; 243 };
237 244
238 class GrGLQuadEffect : public GrGLGeometryProcessor { 245 class GrGLQuadEffect : public GrGLGeometryProcessor {
239 public: 246 public:
240 GrGLQuadEffect(const GrGeometryProcessor&, 247 GrGLQuadEffect(const GrGeometryProcessor&,
241 const GrBatchTracker&); 248 const GrBatchTracker&);
242 249
243 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 250 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
244 251
245 static inline void GenKey(const GrGeometryProcessor&, 252 static inline void GenKey(const GrGeometryProcessor&,
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 401
395 bool GrQuadEffect::onIsEqual(const GrGeometryProcessor& other) const { 402 bool GrQuadEffect::onIsEqual(const GrGeometryProcessor& other) const {
396 const GrQuadEffect& ce = other.cast<GrQuadEffect>(); 403 const GrQuadEffect& ce = other.cast<GrQuadEffect>();
397 return (ce.fEdgeType == fEdgeType); 404 return (ce.fEdgeType == fEdgeType);
398 } 405 }
399 406
400 void GrQuadEffect::initBatchTracker(GrBatchTracker* bt, const InitBT& init) cons t { 407 void GrQuadEffect::initBatchTracker(GrBatchTracker* bt, const InitBT& init) cons t {
401 QuadBatchTracker* local = bt->cast<QuadBatchTracker>(); 408 QuadBatchTracker* local = bt->cast<QuadBatchTracker>();
402 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false); 409 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false);
403 local->fCoverageScale = fCoverageScale; 410 local->fCoverageScale = fCoverageScale;
411 local->fUsesLocalCoords = init.fUsesLocalCoords;
404 } 412 }
405 413
406 bool GrQuadEffect::onCanMakeEqual(const GrBatchTracker& m, const GrBatchTracker& t) const { 414 bool GrQuadEffect::onCanMakeEqual(const GrBatchTracker& m,
415 const GrGeometryProcessor& that,
416 const GrBatchTracker& t) const {
407 const QuadBatchTracker& mine = m.cast<QuadBatchTracker>(); 417 const QuadBatchTracker& mine = m.cast<QuadBatchTracker>();
408 const QuadBatchTracker& theirs = t.cast<QuadBatchTracker>(); 418 const QuadBatchTracker& theirs = t.cast<QuadBatchTracker>();
409 return CanCombineOutput(mine.fInputColorType, mine.fColor, 419 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
420 that, theirs.fUsesLocalCoords) &&
421 CanCombineOutput(mine.fInputColorType, mine.fColor,
410 theirs.fInputColorType, theirs.fColor) && 422 theirs.fInputColorType, theirs.fColor) &&
411 mine.fCoverageScale == theirs.fCoverageScale; 423 mine.fCoverageScale == theirs.fCoverageScale;
412 } 424 }
413 425
414 ////////////////////////////////////////////////////////////////////////////// 426 //////////////////////////////////////////////////////////////////////////////
415 427
416 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrQuadEffect); 428 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrQuadEffect);
417 429
418 GrGeometryProcessor* GrQuadEffect::TestCreate(SkRandom* random, 430 GrGeometryProcessor* GrQuadEffect::TestCreate(SkRandom* random,
419 GrContext*, 431 GrContext*,
420 const GrDrawTargetCaps& caps, 432 const GrDrawTargetCaps& caps,
421 GrTexture*[]) { 433 GrTexture*[]) {
422 GrGeometryProcessor* gp; 434 GrGeometryProcessor* gp;
423 do { 435 do {
424 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( 436 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>(
425 random->nextULessThan(kGrProcessorEdgeTypeCnt)); 437 random->nextULessThan(kGrProcessorEdgeTypeCnt));
426 gp = GrQuadEffect::Create(GrRandomColor(random), edgeType, caps); 438 gp = GrQuadEffect::Create(GrRandomColor(random), edgeType, caps);
427 } while (NULL == gp); 439 } while (NULL == gp);
428 return gp; 440 return gp;
429 } 441 }
430 442
431 ////////////////////////////////////////////////////////////////////////////// 443 //////////////////////////////////////////////////////////////////////////////
432 // Cubic 444 // Cubic
433 ////////////////////////////////////////////////////////////////////////////// 445 //////////////////////////////////////////////////////////////////////////////
434 446
435 struct CubicBatchTracker { 447 struct CubicBatchTracker {
436 GrGPInput fInputColorType; 448 GrGPInput fInputColorType;
437 GrColor fColor; 449 GrColor fColor;
450 bool fUsesLocalCoords;
438 }; 451 };
439 452
440 class GrGLCubicEffect : public GrGLGeometryProcessor { 453 class GrGLCubicEffect : public GrGLGeometryProcessor {
441 public: 454 public:
442 GrGLCubicEffect(const GrGeometryProcessor&, 455 GrGLCubicEffect(const GrGeometryProcessor&,
443 const GrBatchTracker&); 456 const GrBatchTracker&);
444 457
445 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 458 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
446 459
447 static inline void GenKey(const GrGeometryProcessor&, 460 static inline void GenKey(const GrGeometryProcessor&,
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 } 631 }
619 632
620 bool GrCubicEffect::onIsEqual(const GrGeometryProcessor& other) const { 633 bool GrCubicEffect::onIsEqual(const GrGeometryProcessor& other) const {
621 const GrCubicEffect& ce = other.cast<GrCubicEffect>(); 634 const GrCubicEffect& ce = other.cast<GrCubicEffect>();
622 return (ce.fEdgeType == fEdgeType); 635 return (ce.fEdgeType == fEdgeType);
623 } 636 }
624 637
625 void GrCubicEffect::initBatchTracker(GrBatchTracker* bt, const InitBT& init) con st { 638 void GrCubicEffect::initBatchTracker(GrBatchTracker* bt, const InitBT& init) con st {
626 CubicBatchTracker* local = bt->cast<CubicBatchTracker>(); 639 CubicBatchTracker* local = bt->cast<CubicBatchTracker>();
627 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false); 640 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false);
641 local->fUsesLocalCoords = init.fUsesLocalCoords;
628 } 642 }
629 643
630 bool GrCubicEffect::onCanMakeEqual(const GrBatchTracker& m, const GrBatchTracker & t) const { 644 bool GrCubicEffect::onCanMakeEqual(const GrBatchTracker& m,
645 const GrGeometryProcessor& that,
646 const GrBatchTracker& t) const {
631 const CubicBatchTracker& mine = m.cast<CubicBatchTracker>(); 647 const CubicBatchTracker& mine = m.cast<CubicBatchTracker>();
632 const CubicBatchTracker& theirs = t.cast<CubicBatchTracker>(); 648 const CubicBatchTracker& theirs = t.cast<CubicBatchTracker>();
633 return CanCombineOutput(mine.fInputColorType, mine.fColor, 649 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
650 that, theirs.fUsesLocalCoords) &&
651 CanCombineOutput(mine.fInputColorType, mine.fColor,
634 theirs.fInputColorType, theirs.fColor); 652 theirs.fInputColorType, theirs.fColor);
635 } 653 }
636 654
637 ////////////////////////////////////////////////////////////////////////////// 655 //////////////////////////////////////////////////////////////////////////////
638 656
639 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrCubicEffect); 657 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrCubicEffect);
640 658
641 GrGeometryProcessor* GrCubicEffect::TestCreate(SkRandom* random, 659 GrGeometryProcessor* GrCubicEffect::TestCreate(SkRandom* random,
642 GrContext*, 660 GrContext*,
643 const GrDrawTargetCaps& caps, 661 const GrDrawTargetCaps& caps,
644 GrTexture*[]) { 662 GrTexture*[]) {
645 GrGeometryProcessor* gp; 663 GrGeometryProcessor* gp;
646 do { 664 do {
647 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>( 665 GrPrimitiveEdgeType edgeType = static_cast<GrPrimitiveEdgeType>(
648 random->nextULessThan(kGrPro cessorEdgeTypeCnt)); 666 random->nextULessThan(kGrPro cessorEdgeTypeCnt));
649 gp = GrCubicEffect::Create(GrRandomColor(random), edgeType, caps); 667 gp = GrCubicEffect::Create(GrRandomColor(random), edgeType, caps);
650 } while (NULL == gp); 668 } while (NULL == gp);
651 return gp; 669 return gp;
652 } 670 }
653 671
OLDNEW
« no previous file with comments | « src/gpu/effects/GrBezierEffect.h ('k') | src/gpu/effects/GrBitmapTextGeoProc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698