blob: 297424c6aa039c01f70d0d36fa89249e1beaf03d [file] [log] [blame]
joshualitte46760e2015-05-05 08:41:50 -07001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "GrCommandBuilder.h"
9
joshualitte46760e2015-05-05 08:41:50 -070010GrTargetCommands::Cmd* GrCommandBuilder::recordClear(const SkIRect* rect,
11 GrColor color,
12 bool canIgnoreRect,
13 GrRenderTarget* renderTarget) {
14 SkASSERT(renderTarget);
15
16 SkIRect r;
17 if (NULL == rect) {
18 // We could do something smart and remove previous draws and clears to
19 // the current render target. If we get that smart we have to make sure
20 // those draws aren't read before this clear (render-to-texture).
21 r.setLTRB(0, 0, renderTarget->width(), renderTarget->height());
22 rect = &r;
23 }
24 Clear* clr = GrNEW_APPEND_TO_RECORDER(*this->cmdBuffer(), Clear, (renderTarget));
25 GrColorIsPMAssert(color);
26 clr->fColor = color;
27 clr->fRect = *rect;
28 clr->fCanIgnoreRect = canIgnoreRect;
29 return clr;
30}
31
32GrTargetCommands::Cmd* GrCommandBuilder::recordClearStencilClip(const SkIRect& rect,
33 bool insideClip,
34 GrRenderTarget* renderTarget) {
35 SkASSERT(renderTarget);
36
37 ClearStencilClip* clr = GrNEW_APPEND_TO_RECORDER(*this->cmdBuffer(),
38 ClearStencilClip,
39 (renderTarget));
40 clr->fRect = rect;
41 clr->fInsideClip = insideClip;
42 return clr;
43}
44
45GrTargetCommands::Cmd* GrCommandBuilder::recordDiscard(GrRenderTarget* renderTarget) {
46 SkASSERT(renderTarget);
47
48 Clear* clr = GrNEW_APPEND_TO_RECORDER(*this->cmdBuffer(), Clear, (renderTarget));
49 clr->fColor = GrColor_ILLEGAL;
50 return clr;
51}
52
53GrTargetCommands::Cmd* GrCommandBuilder::recordCopySurface(GrSurface* dst,
54 GrSurface* src,
55 const SkIRect& srcRect,
56 const SkIPoint& dstPoint) {
57 CopySurface* cs = GrNEW_APPEND_TO_RECORDER(*this->cmdBuffer(), CopySurface, (dst, src));
58 cs->fSrcRect = srcRect;
59 cs->fDstPoint = dstPoint;
60 return cs;
61}
62
63GrTargetCommands::Cmd*
64GrCommandBuilder::recordXferBarrierIfNecessary(const GrPipeline& pipeline,
65 const GrDrawTargetCaps& caps) {
66 const GrXferProcessor& xp = *pipeline.getXferProcessor();
67 GrRenderTarget* rt = pipeline.getRenderTarget();
68
69 GrXferBarrierType barrierType;
70 if (!xp.willNeedXferBarrier(rt, caps, &barrierType)) {
71 return NULL;
72 }
73
74 XferBarrier* xb = GrNEW_APPEND_TO_RECORDER(*this->cmdBuffer(), XferBarrier, ());
75 xb->fBarrierType = barrierType;
76 return xb;
77}