Index: src/gpu/GrContext.cpp |
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp |
index d25709f0ea8c544017a258ff9a6f79e2c1912dce..f4bb7156415e0710709e3a506bdfd6e77074e44b 100644 |
--- a/src/gpu/GrContext.cpp |
+++ b/src/gpu/GrContext.cpp |
@@ -91,6 +91,7 @@ GrContext::GrContext() { |
++THREAD_INSTANCE_COUNT; |
fDrawState = NULL; |
fGpu = NULL; |
+ fClip = NULL; |
fPathRendererChain = NULL; |
fSoftwarePathRenderer = NULL; |
fTextureCache = NULL; |
@@ -100,6 +101,7 @@ GrContext::GrContext() { |
fDrawBufferIBAllocPool = NULL; |
fAARectRenderer = NULL; |
fOvalRenderer = NULL; |
jvanverth1
2013/05/28 15:28:59
Any init for RenderTarget needed?
bsalomon
2013/05/28 15:33:29
SkAutoTUnref defaults to NULL.
|
+ fViewMatrix.reset(); |
} |
bool GrContext::init(GrBackend backend, GrBackendContext backendContext) { |
@@ -594,18 +596,6 @@ bool GrContext::supportsIndex8PixelConfig(const GrTextureParams* params, |
return true; |
} |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-const GrClipData* GrContext::getClip() const { |
- return fGpu->getClip(); |
-} |
- |
-void GrContext::setClip(const GrClipData* clipData) { |
- fGpu->setClip(clipData); |
- |
- fDrawState->setState(GrDrawState::kClip_StateBit, |
- clipData && clipData->fClipStack && !clipData->fClipStack->isWideOpen()); |
-} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -630,7 +620,7 @@ void GrContext::drawPaint(const GrPaint& origPaint) { |
// map the four corners and bound them with a new rect. This will not |
// produce a correct result for some perspective matrices. |
if (!this->getMatrix().hasPerspective()) { |
- if (!fDrawState->getViewInverse(&inverse)) { |
+ if (!fViewMatrix.invert(&inverse)) { |
GrPrintf("Could not invert matrix\n"); |
return; |
} |
@@ -782,7 +772,7 @@ void GrContext::drawRect(const GrPaint& paint, |
SkMatrix combinedMatrix; |
bool useVertexCoverage; |
bool needAA = paint.isAntiAlias() && |
- !this->getRenderTarget()->isMultisampled(); |
+ !target->getDrawState().getRenderTarget()->isMultisampled(); |
bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix, |
&combinedMatrix, &devRect, |
&useVertexCoverage); |
@@ -966,7 +956,7 @@ void GrContext::drawRRect(const GrPaint& paint, |
GrDrawState::AutoStageDisable atr(fDrawState); |
bool useAA = paint.isAntiAlias() && |
- !this->getRenderTarget()->isMultisampled() && |
+ !target->getDrawState().getRenderTarget()->isMultisampled() && |
!disable_coverage_aa_for_blend(target); |
if (!fOvalRenderer->drawSimpleRRect(target, this, useAA, rect, stroke)) { |
@@ -986,7 +976,7 @@ void GrContext::drawOval(const GrPaint& paint, |
GrDrawState::AutoStageDisable atr(fDrawState); |
bool useAA = paint.isAntiAlias() && |
- !this->getRenderTarget()->isMultisampled() && |
+ !target->getDrawState().getRenderTarget()->isMultisampled() && |
!disable_coverage_aa_for_blend(target); |
if (!fOvalRenderer->drawOval(target, this, useAA, oval, stroke)) { |
@@ -1142,7 +1132,9 @@ void GrContext::flush(int flagsBitfield) { |
} else { |
this->flushDrawBuffer(); |
} |
+ // TODO: Remove this flag |
if (kForceCurrentRenderTarget_FlushBit & flagsBitfield) { |
+ fGpu->drawState()->setRenderTarget(this->getRenderTarget()); |
fGpu->forceRenderTargetFlush(); |
} |
} |
@@ -1256,7 +1248,7 @@ bool GrContext::readRenderTargetPixels(GrRenderTarget* target, |
ASSERT_OWNED_RESOURCE(target); |
if (NULL == target) { |
- target = fDrawState->getRenderTarget(); |
+ target = fRenderTarget.get(); |
if (NULL == target) { |
return false; |
} |
@@ -1443,7 +1435,7 @@ bool GrContext::writeRenderTargetPixels(GrRenderTarget* target, |
ASSERT_OWNED_RESOURCE(target); |
if (NULL == target) { |
- target = fDrawState->getRenderTarget(); |
+ target = fRenderTarget.get(); |
if (NULL == target) { |
return false; |
} |
@@ -1560,24 +1552,35 @@ GrDrawTarget* GrContext::prepareToDraw(const GrPaint* paint, BufferedDraw buffer |
this->flushDrawBuffer(); |
fLastDrawWasBuffered = kNo_BufferedDraw; |
} |
+ ASSERT_OWNED_RESOURCE(fRenderTarget.get()); |
if (NULL != paint) { |
GrAssert(fDrawState->stagesDisabled()); |
- fDrawState->setFromPaint(*paint); |
+ fDrawState->setFromPaint(*paint, fViewMatrix, fRenderTarget.get()); |
#if GR_DEBUG_PARTIAL_COVERAGE_CHECK |
if ((paint->hasMask() || 0xff != paint->fCoverage) && |
!fGpu->canApplyCoverage()) { |
GrPrintf("Partial pixel coverage will be incorrectly blended.\n"); |
} |
#endif |
+ } else { |
+ fDrawState->reset(); |
+ *fDrawState->viewMatrix() = fViewMatrix; |
jvanverth1
2013/05/28 15:28:59
While legal this seems a bit squirrely to me. Add
bsalomon
2013/05/28 15:33:29
My next CL removes this viewMatrix() function and
|
+ fDrawState->setRenderTarget(fRenderTarget.get()); |
} |
+ GrDrawTarget* target; |
if (kYes_BufferedDraw == buffered) { |
- fDrawBuffer->setClip(fGpu->getClip()); |
fLastDrawWasBuffered = kYes_BufferedDraw; |
- return fDrawBuffer; |
+ target = fDrawBuffer; |
} else { |
GrAssert(kNo_BufferedDraw == buffered); |
- return fGpu; |
+ fLastDrawWasBuffered = kNo_BufferedDraw; |
+ target = fGpu; |
} |
+ fDrawState->setState(GrDrawState::kClip_StateBit, NULL != fClip && |
+ !fClip->fClipStack->isWideOpen()); |
+ target->setClip(fClip); |
+ GrAssert(fDrawState == target->drawState()); |
+ return target; |
} |
/* |
@@ -1615,39 +1618,10 @@ GrPathRenderer* GrContext::getPathRenderer(const SkPath& path, |
//////////////////////////////////////////////////////////////////////////////// |
-void GrContext::setRenderTarget(GrRenderTarget* target) { |
- ASSERT_OWNED_RESOURCE(target); |
- fDrawState->setRenderTarget(target); |
-} |
- |
-GrRenderTarget* GrContext::getRenderTarget() { |
- return fDrawState->getRenderTarget(); |
-} |
- |
-const GrRenderTarget* GrContext::getRenderTarget() const { |
- return fDrawState->getRenderTarget(); |
-} |
- |
bool GrContext::isConfigRenderable(GrPixelConfig config) const { |
return fGpu->isConfigRenderable(config); |
} |
-const SkMatrix& GrContext::getMatrix() const { |
- return fDrawState->getViewMatrix(); |
-} |
- |
-void GrContext::setMatrix(const SkMatrix& m) { |
- fDrawState->setViewMatrix(m); |
-} |
- |
-void GrContext::setIdentityMatrix() { |
- fDrawState->viewMatrix()->reset(); |
-} |
- |
-void GrContext::concatMatrix(const SkMatrix& m) const { |
- fDrawState->preConcatViewMatrix(m); |
-} |
- |
static inline intptr_t setOrClear(intptr_t bits, int shift, intptr_t pred) { |
intptr_t mask = 1 << shift; |
if (pred) { |