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

Unified Diff: gm/rrects.cpp

Issue 190953008: reorg iteration code in rrects GM, tightly pack rrects drawn in _effect version. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: fix new error Created 6 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « expectations/gm/ignored-tests.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/rrects.cpp
diff --git a/gm/rrects.cpp b/gm/rrects.cpp
index 7bc7c199b0a35098a9a82b534bde15f50cf3ff7b..7dd30ca9008535f96335e9ccd45743110b9439a9 100644
--- a/gm/rrects.cpp
+++ b/gm/rrects.cpp
@@ -65,7 +65,6 @@ protected:
}
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
- int numRRects = kNumRRects;
#if SK_SUPPORT_GPU
SkBaseDevice* device = canvas->getTopDevice();
GrContext* context = NULL;
@@ -76,9 +75,6 @@ protected:
if (kEffect_Type == fType && NULL == context) {
return;
}
- if (kEffect_Type == fType) {
- numRRects *= kGrEffectEdgeTypeCnt;
- }
#endif
SkPaint paint;
@@ -86,17 +82,26 @@ protected:
paint.setAntiAlias(true);
}
- static const SkRect kMaxTileBound = SkRect::MakeWH(SkIntToScalar(kTileX), SkIntToScalar(kTileY));
-
- int curRRect = 0;
- for (int y = 1; y < kImageHeight; y += kTileY) {
- for (int x = 1; x < kImageWidth; x += kTileX) {
- if (curRRect >= numRRects) {
- break;
- }
- int rrectIdx = curRRect % kNumRRects;
- SkASSERT(kMaxTileBound.contains(fRRects[rrectIdx].getBounds()));
+ static const SkRect kMaxTileBound = SkRect::MakeWH(SkIntToScalar(kTileX),
+ SkIntToScalar(kTileY));
+#ifdef SK_DEBUG
+ static const SkRect kMaxImageBound = SkRect::MakeWH(SkIntToScalar(kImageWidth),
+ SkIntToScalar(kImageHeight));
+#endif
+ int lastEdgeType = (kEffect_Type == fType) ? kLast_GrEffectEdgeType: 0;
+
+ int y = 1;
+ for (int et = (GrEffectEdgeType) 0; et <= lastEdgeType; ++et) {
+ int x = 1;
+ for (int curRRect = 0; curRRect < kNumRRects; ++curRRect) {
+ bool drew = true;
+#ifdef SK_DEBUG
+ SkASSERT(kMaxTileBound.contains(fRRects[curRRect].getBounds()));
+ SkRect imageSpaceBounds = fRRects[curRRect].getBounds();
+ imageSpaceBounds.offset(SkIntToScalar(x), SkIntToScalar(y));
+ SkASSERT(kMaxImageBound.contains(imageSpaceBounds));
+#endif
canvas->save();
canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
if (kEffect_Type == fType) {
@@ -109,9 +114,9 @@ protected:
}
GrDrawState* drawState = tt.target()->drawState();
- SkRRect rrect = fRRects[rrectIdx];
+ SkRRect rrect = fRRects[curRRect];
rrect.offset(SkIntToScalar(x), SkIntToScalar(y));
- GrEffectEdgeType edgeType = (GrEffectEdgeType) (curRRect / kNumRRects);
+ GrEffectEdgeType edgeType = (GrEffectEdgeType) et;
SkAutoTUnref<GrEffectRef> effect(GrRRectEffect::Create(edgeType, rrect));
if (effect) {
drawState->addCoverageEffect(effect);
@@ -123,17 +128,28 @@ protected:
bounds.outset(2.f, 2.f);
tt.target()->drawSimpleRect(bounds);
+ } else {
+ drew = false;
}
#endif
} else if (kBW_Clip_Type == fType || kAA_Clip_Type == fType) {
bool aaClip = (kAA_Clip_Type == fType);
- canvas->clipRRect(fRRects[rrectIdx], SkRegion::kReplace_Op, aaClip);
+ canvas->clipRRect(fRRects[curRRect], SkRegion::kReplace_Op, aaClip);
canvas->drawRect(kMaxTileBound, paint);
} else {
- canvas->drawRRect(fRRects[rrectIdx], paint);
+ canvas->drawRRect(fRRects[curRRect], paint);
}
- ++curRRect;
canvas->restore();
+ if (drew) {
+ x = x + kTileX;
+ if (x > kImageWidth) {
+ x = 1;
+ y += kTileY;
+ }
+ }
+ }
+ if (x != 1) {
+ y += kTileY;
}
}
}
« no previous file with comments | « expectations/gm/ignored-tests.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698