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

Unified Diff: src/gpu/GrRectanizer_pow2.h

Issue 303263005: Add Sample slide for Rectanizers (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: comment change Created 6 years, 7 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 | « src/gpu/GrRectanizer.h ('k') | src/gpu/GrRectanizer_pow2.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrRectanizer_pow2.h
diff --git a/src/gpu/GrRectanizer_pow2.h b/src/gpu/GrRectanizer_pow2.h
index c2e45655f102eb344eae179e742fcbad0dbbd8a2..e9d9d02b0ac0a32268e03736bd9c50c441667688 100644
--- a/src/gpu/GrRectanizer_pow2.h
+++ b/src/gpu/GrRectanizer_pow2.h
@@ -10,6 +10,11 @@
#include "GrRectanizer.h"
+// This Rectanizer quantizes the incoming rects to powers of 2. Each power
+// of two can have, at most, one active row/shelf. Once a row/shelf for
+// a particular power of two gets full its fRows entry is recycled to point
+// to a new row.
+// The skyline algorithm almost always provides a better packing.
class GrRectanizerPow2 : public GrRectanizer {
public:
GrRectanizerPow2(int w, int h) : INHERITED(w, h) {
@@ -32,9 +37,12 @@ public:
private:
static const int kMIN_HEIGHT_POW2 = 2;
+ static const int kMaxExponent = 16;
struct Row {
GrIPoint16 fLoc;
+ // fRowHeight is actually known by this struct's position in fRows
+ // but it is used to signal if there exists an open row of this height
int fRowHeight;
bool canAddWidth(int width, int containerWidth) const {
@@ -42,14 +50,16 @@ private:
}
};
- Row fRows[16];
+ Row fRows[kMaxExponent]; // 0-th entry will be unused
int fNextStripY;
int32_t fAreaSoFar;
static int HeightToRowIndex(int height) {
SkASSERT(height >= kMIN_HEIGHT_POW2);
- return 32 - SkCLZ(height - 1);
+ int index = 32 - SkCLZ(height - 1);
+ SkASSERT(index < kMaxExponent);
+ return index;
}
bool canAddStrip(int height) const {
« no previous file with comments | « src/gpu/GrRectanizer.h ('k') | src/gpu/GrRectanizer_pow2.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698