Altered Ganesh's clip stack plumbing to pass down new GrClipData class
http://codereview.appspot.com/6454047/
git-svn-id: http://skia.googlecode.com/svn/trunk@4788 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
index d0bb225..d5d03cd 100644
--- a/src/gpu/GrInOrderDrawBuffer.cpp
+++ b/src/gpu/GrInOrderDrawBuffer.cpp
@@ -124,9 +124,10 @@
// simply because the clip has changed if the clip doesn't affect
// the rect.
bool disabledClip = false;
- if (drawState->isClipState() && fClip.isRect()) {
- GrClip::Iter iter(fClip, GrClip::Iter::kBottom_IterStart);
+ if (drawState->isClipState() && fClip->fClipStack->isRect()) {
+
+ GrClip::Iter iter(*fClip->fClipStack, GrClip::Iter::kBottom_IterStart);
const GrClip::Iter::Clip* clip = iter.next();
GrAssert(NULL != clip && NULL != clip->fRect);
@@ -493,6 +494,7 @@
fVertexPool.reset();
fIndexPool.reset();
fClips.reset();
+ fClipOrigins.reset();
fClipSet = true;
this->resetDrawTracking();
@@ -527,6 +529,8 @@
GrDrawState* prevDrawState = target->drawState();
prevDrawState->ref();
+ GrClipData clipData;
+
int currState = 0;
int currClip = 0;
int currClear = 0;
@@ -567,7 +571,9 @@
++currState;
break;
case kSetClip_Cmd:
- target->setClip(fClips[currClip]);
+ clipData.fClipStack = &fClips[currClip];
+ clipData.fOrigin = fClipOrigins[currClip];
+ target->setClip(&clipData);
++currClip;
break;
case kClear_Cmd:
@@ -581,6 +587,7 @@
// we should have consumed all the states, clips, etc.
GrAssert(fStates.count() == currState);
GrAssert(fClips.count() == currClip);
+ GrAssert(fClipOrigins.count() == currClip);
GrAssert(fClears.count() == currClear);
GrAssert(fDraws.count() == currDraw);
@@ -809,7 +816,9 @@
bool GrInOrderDrawBuffer::needsNewClip() const {
if (this->getDrawState().isClipState()) {
- if (fClipSet && fClips.back() != fClip) {
+ if (fClipSet &&
+ (fClips.back() != *fClip->fClipStack ||
+ fClipOrigins.back() != fClip->fOrigin)) {
return true;
}
}
@@ -817,13 +826,15 @@
}
void GrInOrderDrawBuffer::recordClip() {
- fClips.push_back() = fClip;
+ fClips.push_back() = *fClip->fClipStack;
+ fClipOrigins.push_back() = fClip->fOrigin;
fClipSet = false;
fCmds.push_back(kSetClip_Cmd);
}
void GrInOrderDrawBuffer::recordDefaultClip() {
fClips.push_back() = GrClip();
+ fClipOrigins.push_back() = SkIPoint::Make(0, 0);
fCmds.push_back(kSetClip_Cmd);
}
@@ -852,7 +863,7 @@
return &fClears.push_back();
}
-void GrInOrderDrawBuffer::clipWillBeSet(const GrClip& newClip) {
- INHERITED::clipWillBeSet(newClip);
+void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) {
+ INHERITED::clipWillBeSet(newClipData);
fClipSet = true;
}