1 /* 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 #ifndef GrCommandBuilder_DEFINED 9 #define GrCommandBuilder_DEFINED 10 11 #include "GrTargetCommands.h" 12 13 class GrInOrderDrawBuffer; 14 15 class GrCommandBuilder : ::SkNoncopyable { 16 public: 17 typedef GrTargetCommands::Cmd Cmd; 18 typedef GrTargetCommands::State State; 19 20 static GrCommandBuilder* Create(GrGpu* gpu, bool reorder); 21 ~GrCommandBuilder()22 virtual ~GrCommandBuilder() {} 23 reset()24 void reset() { fCommands.reset(); } flush(GrInOrderDrawBuffer * iodb)25 void flush(GrInOrderDrawBuffer* iodb) { fCommands.flush(iodb); } 26 27 virtual Cmd* recordClearStencilClip(const SkIRect& rect, 28 bool insideClip, 29 GrRenderTarget* renderTarget); 30 virtual Cmd* recordDiscard(GrRenderTarget*); 31 virtual Cmd* recordDrawBatch(State*, GrBatch*) = 0; 32 virtual Cmd* recordStencilPath(const GrPipelineBuilder&, 33 const GrPathProcessor*, 34 const GrPath*, 35 const GrScissorState&, 36 const GrStencilSettings&) = 0; 37 virtual Cmd* recordDrawPath(State*, 38 const GrPathProcessor*, 39 const GrPath*, 40 const GrStencilSettings&) = 0; 41 virtual Cmd* recordDrawPaths(State*, 42 GrInOrderDrawBuffer*, 43 const GrPathProcessor*, 44 const GrPathRange*, 45 const void*, 46 GrDrawTarget::PathIndexType, 47 const float transformValues[], 48 GrDrawTarget::PathTransformType , 49 int, 50 const GrStencilSettings&, 51 const GrDrawTarget::PipelineInfo&) = 0; 52 virtual Cmd* recordClear(const SkIRect* rect, 53 GrColor, 54 bool canIgnoreRect, 55 GrRenderTarget*); 56 virtual Cmd* recordCopySurface(GrSurface* dst, 57 GrSurface* src, 58 const SkIRect& srcRect, 59 const SkIPoint& dstPoint); 60 virtual Cmd* recordXferBarrierIfNecessary(const GrPipeline&, const GrDrawTargetCaps&); 61 62 protected: 63 typedef GrTargetCommands::DrawBatch DrawBatch; 64 typedef GrTargetCommands::StencilPath StencilPath; 65 typedef GrTargetCommands::DrawPath DrawPath; 66 typedef GrTargetCommands::DrawPaths DrawPaths; 67 typedef GrTargetCommands::Clear Clear; 68 typedef GrTargetCommands::ClearStencilClip ClearStencilClip; 69 typedef GrTargetCommands::CopySurface CopySurface; 70 typedef GrTargetCommands::XferBarrier XferBarrier; 71 GrCommandBuilder(GrGpu * gpu)72 GrCommandBuilder(GrGpu* gpu) : fCommands(gpu) {} 73 cmdBuffer()74 GrTargetCommands::CmdBuffer* cmdBuffer() { return fCommands.cmdBuffer(); } batchTarget()75 GrBatchTarget* batchTarget() { return fCommands.batchTarget(); } 76 77 private: 78 GrTargetCommands fCommands; 79 80 }; 81 82 #endif 83