| Index: src/gpu/GrContext.cpp
|
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
|
| index 26b30a434adf359560c396bce8c60ba4622445ba..5e46bb49e8efe6b495cfd178d0eeb1bb2d67caf3 100755
|
| --- a/src/gpu/GrContext.cpp
|
| +++ b/src/gpu/GrContext.cpp
|
| @@ -383,20 +383,22 @@ void GrContext::clear(const SkIRect* rect,
|
|
|
| AutoCheckFlush acf(this);
|
| GR_CREATE_TRACE_MARKER_CONTEXT("GrContext::clear", this);
|
| - GrDrawTarget* target = this->prepareToDraw(NULL, NULL, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(NULL, renderTarget, NULL, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| target->clear(rect, color, canIgnoreRect, renderTarget);
|
| }
|
|
|
| -void GrContext::drawPaint(const GrPaint& origPaint, const SkMatrix& viewMatrix) {
|
| +void GrContext::drawPaint(GrRenderTarget* rt,
|
| + const GrPaint& origPaint,
|
| + const SkMatrix& viewMatrix) {
|
| // set rect to be big enough to fill the space, but not super-huge, so we
|
| // don't overflow fixed-point implementations
|
| SkRect r;
|
| r.setLTRB(0, 0,
|
| - SkIntToScalar(getRenderTarget()->width()),
|
| - SkIntToScalar(getRenderTarget()->height()));
|
| + SkIntToScalar(rt->width()),
|
| + SkIntToScalar(rt->height()));
|
| SkTCopyOnFirstWrite<GrPaint> paint(origPaint);
|
|
|
| // by definition this fills the entire clip, no need for AA
|
| @@ -416,7 +418,7 @@ void GrContext::drawPaint(const GrPaint& origPaint, const SkMatrix& viewMatrix)
|
| return;
|
| }
|
| inverse.mapRect(&r);
|
| - this->drawRect(*paint, viewMatrix, r);
|
| + this->drawRect(rt, *paint, viewMatrix, r);
|
| } else {
|
| SkMatrix localMatrix;
|
| if (!viewMatrix.invert(&localMatrix)) {
|
| @@ -426,7 +428,7 @@ void GrContext::drawPaint(const GrPaint& origPaint, const SkMatrix& viewMatrix)
|
|
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -522,20 +524,21 @@ static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po
|
| point.fY >= rect.fTop && point.fY <= rect.fBottom;
|
| }
|
|
|
| -void GrContext::drawRect(const GrPaint& paint,
|
| +void GrContext::drawRect(GrRenderTarget* rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect& rect,
|
| const GrStrokeInfo* strokeInfo) {
|
| if (strokeInfo && strokeInfo->isDashed()) {
|
| SkPath path;
|
| path.addRect(rect);
|
| - this->drawPath(paint, viewMatrix, path, *strokeInfo);
|
| + this->drawPath(rt, paint, viewMatrix, path, *strokeInfo);
|
| return;
|
| }
|
|
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -571,7 +574,7 @@ void GrContext::drawRect(const GrPaint& paint,
|
| // Will it blend?
|
| GrColor clearColor;
|
| if (paint.isOpaqueAndConstantColor(&clearColor)) {
|
| - target->clear(NULL, clearColor, true, fRenderTarget);
|
| + target->clear(NULL, clearColor, true, rt);
|
| return;
|
| }
|
| }
|
| @@ -654,14 +657,15 @@ void GrContext::drawRect(const GrPaint& paint,
|
| }
|
| }
|
|
|
| -void GrContext::drawNonAARectToRect(const GrPaint& paint,
|
| +void GrContext::drawNonAARectToRect(GrRenderTarget* rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect& rectToDraw,
|
| const SkRect& localRect,
|
| const SkMatrix* localMatrix) {
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -696,7 +700,8 @@ static const GrGeometryProcessor* set_vertex_attributes(const SkPoint* texCoords
|
| return GrDefaultGeoProcFactory::Create(flags, color, viewMatrix, SkMatrix::I());
|
| }
|
|
|
| -void GrContext::drawVertices(const GrPaint& paint,
|
| +void GrContext::drawVertices(GrRenderTarget* rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| GrPrimitiveType primitiveType,
|
| int vertexCount,
|
| @@ -709,7 +714,7 @@ void GrContext::drawVertices(const GrPaint& paint,
|
| GrPipelineBuilder pipelineBuilder;
|
| GrDrawTarget::AutoReleaseGeometry geo; // must be inside AutoCheckFlush scope
|
|
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -757,7 +762,8 @@ void GrContext::drawVertices(const GrPaint& paint,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrContext::drawRRect(const GrPaint& paint,
|
| +void GrContext::drawRRect(GrRenderTarget*rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRRect& rrect,
|
| const GrStrokeInfo& strokeInfo) {
|
| @@ -768,13 +774,13 @@ void GrContext::drawRRect(const GrPaint& paint,
|
| if (strokeInfo.isDashed()) {
|
| SkPath path;
|
| path.addRRect(rrect);
|
| - this->drawPath(paint, viewMatrix, path, strokeInfo);
|
| + this->drawPath(rt, paint, viewMatrix, path, strokeInfo);
|
| return;
|
| }
|
|
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -795,7 +801,8 @@ void GrContext::drawRRect(const GrPaint& paint,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrContext::drawDRRect(const GrPaint& paint,
|
| +void GrContext::drawDRRect(GrRenderTarget* rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRRect& outer,
|
| const SkRRect& inner) {
|
| @@ -805,7 +812,7 @@ void GrContext::drawDRRect(const GrPaint& paint,
|
|
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
|
|
| GR_CREATE_TRACE_MARKER("GrContext::drawDRRect", target);
|
|
|
| @@ -825,7 +832,8 @@ void GrContext::drawDRRect(const GrPaint& paint,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrContext::drawOval(const GrPaint& paint,
|
| +void GrContext::drawOval(GrRenderTarget*rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect& oval,
|
| const GrStrokeInfo& strokeInfo) {
|
| @@ -836,13 +844,13 @@ void GrContext::drawOval(const GrPaint& paint,
|
| if (strokeInfo.isDashed()) {
|
| SkPath path;
|
| path.addOval(oval);
|
| - this->drawPath(paint, viewMatrix, path, strokeInfo);
|
| + this->drawPath(rt, paint, viewMatrix, path, strokeInfo);
|
| return;
|
| }
|
|
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -919,14 +927,15 @@ static bool is_nested_rects(GrDrawTarget* target,
|
| return allEq || allGoE1;
|
| }
|
|
|
| -void GrContext::drawPath(const GrPaint& paint,
|
| +void GrContext::drawPath(GrRenderTarget* rt,
|
| + const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkPath& path,
|
| const GrStrokeInfo& strokeInfo) {
|
|
|
| if (path.isEmpty()) {
|
| if (path.isInverseFillType()) {
|
| - this->drawPaint(paint, viewMatrix);
|
| + this->drawPaint(rt, paint, viewMatrix);
|
| }
|
| return;
|
| }
|
| @@ -937,7 +946,7 @@ void GrContext::drawPath(const GrPaint& paint,
|
| if (path.isLine(pts)) {
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -954,11 +963,11 @@ void GrContext::drawPath(const GrPaint& paint,
|
| GrStrokeInfo newStrokeInfo(strokeInfo, false);
|
| SkStrokeRec* stroke = newStrokeInfo.getStrokeRecPtr();
|
| if (SkDashPath::FilterDashPath(effectPath.init(), path, stroke, NULL, info)) {
|
| - this->drawPath(paint, viewMatrix, *effectPath.get(), newStrokeInfo);
|
| + this->drawPath(rt, paint, viewMatrix, *effectPath.get(), newStrokeInfo);
|
| return;
|
| }
|
|
|
| - this->drawPath(paint, viewMatrix, path, newStrokeInfo);
|
| + this->drawPath(rt, paint, viewMatrix, path, newStrokeInfo);
|
| return;
|
| }
|
|
|
| @@ -969,7 +978,7 @@ void GrContext::drawPath(const GrPaint& paint,
|
| // OK.
|
| AutoCheckFlush acf(this);
|
| GrPipelineBuilder pipelineBuilder;
|
| - GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, &paint, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -1194,7 +1203,7 @@ bool GrContext::writeSurfacePixels(GrSurface* surface,
|
| // drawing a rect to the render target.
|
| // The bracket ensures we pop the stack if we wind up flushing below.
|
| {
|
| - GrDrawTarget* drawTarget = this->prepareToDraw(NULL, NULL, NULL);
|
| + GrDrawTarget* drawTarget = this->prepareToDraw(NULL, NULL, NULL, NULL);
|
| GrDrawTarget::AutoGeometryPush agp(drawTarget);
|
|
|
| GrPipelineBuilder pipelineBuilder;
|
| @@ -1376,7 +1385,7 @@ void GrContext::discardRenderTarget(GrRenderTarget* renderTarget) {
|
| SkASSERT(renderTarget);
|
| ASSERT_OWNED_RESOURCE(renderTarget);
|
| AutoCheckFlush acf(this);
|
| - GrDrawTarget* target = this->prepareToDraw(NULL, NULL, &acf);
|
| + GrDrawTarget* target = this->prepareToDraw(NULL, NULL, NULL, NULL);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -1394,7 +1403,7 @@ void GrContext::copySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRe
|
| // Since we're going to the draw target and not GPU, no need to check kNoFlush
|
| // here.
|
|
|
| - GrDrawTarget* target = this->prepareToDraw(NULL, NULL, NULL);
|
| + GrDrawTarget* target = this->prepareToDraw(NULL, NULL, NULL, NULL);
|
| if (NULL == target) {
|
| return;
|
| }
|
| @@ -1412,16 +1421,17 @@ void GrContext::flushSurfaceWrites(GrSurface* surface) {
|
| }
|
|
|
| GrDrawTarget* GrContext::prepareToDraw(GrPipelineBuilder* pipelineBuilder,
|
| + GrRenderTarget* rt,
|
| const GrPaint* paint,
|
| const AutoCheckFlush* acf) {
|
| if (NULL == fGpu) {
|
| return NULL;
|
| }
|
|
|
| - ASSERT_OWNED_RESOURCE(fRenderTarget.get());
|
| if (pipelineBuilder) {
|
| - SkASSERT(paint && acf);
|
| - pipelineBuilder->setFromPaint(*paint, fRenderTarget.get());
|
| + ASSERT_OWNED_RESOURCE(rt);
|
| + SkASSERT(rt && paint && acf);
|
| + pipelineBuilder->setFromPaint(*paint, rt);
|
| pipelineBuilder->setState(GrPipelineBuilder::kClip_StateBit,
|
| fClip && !fClip->fClipStack->isWideOpen());
|
| }
|
| @@ -1508,7 +1518,7 @@ void GrContext::setupDrawBuffer() {
|
| }
|
|
|
| GrDrawTarget* GrContext::getTextTarget() {
|
| - return this->prepareToDraw(NULL, NULL, NULL);
|
| + return this->prepareToDraw(NULL, NULL, NULL, NULL);
|
| }
|
|
|
| const GrIndexBuffer* GrContext::getQuadIndexBuffer() const {
|
|
|