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 GrClearOp_DEFINED 9 #define GrClearOp_DEFINED 10 11 #include "include/gpu/GrTypes.h" 12 #include "src/gpu/GrScissorState.h" 13 #include "src/gpu/ops/GrOp.h" 14 15 class GrOpFlushState; 16 class GrRecordingContext; 17 18 class GrClearOp final : public GrOp { 19 public: 20 DEFINE_OP_CLASS_ID 21 22 // A fullscreen or scissored clear, depending on the clip and proxy dimensions 23 static GrOp::Owner MakeColor(GrRecordingContext* context, 24 const GrScissorState& scissor, 25 std::array<float, 4> color); 26 27 static GrOp::Owner MakeStencilClip(GrRecordingContext* context, 28 const GrScissorState& scissor, 29 bool insideMask); 30 name()31 const char* name() const override { return "Clear"; } 32 color()33 const std::array<float, 4>& color() const { return fColor; } stencilInsideMask()34 bool stencilInsideMask() const { return fStencilInsideMask; } 35 private: 36 friend class GrOp; // for ctors 37 38 enum class Buffer { 39 kColor = 0b01, 40 kStencilClip = 0b10, 41 42 kBoth = 0b11, 43 }; 44 GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(Buffer); 45 46 GrClearOp(Buffer buffer, 47 const GrScissorState& scissor, 48 std::array<float, 4> color, 49 bool stencil); 50 51 CombineResult onCombineIfPossible(GrOp* t, SkArenaAlloc*, const GrCaps& caps) override; 52 onPrePrepare(GrRecordingContext *,const GrSurfaceProxyView & writeView,GrAppliedClip *,const GrXferProcessor::DstProxyView &,GrXferBarrierFlags renderPassXferBarriers,GrLoadOp colorLoadOp)53 void onPrePrepare(GrRecordingContext*, const GrSurfaceProxyView& writeView, GrAppliedClip*, 54 const GrXferProcessor::DstProxyView&, 55 GrXferBarrierFlags renderPassXferBarriers, GrLoadOp colorLoadOp) override {} 56 onPrepare(GrOpFlushState *)57 void onPrepare(GrOpFlushState*) override {} 58 59 void onExecute(GrOpFlushState* state, const SkRect& chainBounds) override; 60 #if GR_TEST_UTILS onDumpInfo()61 SkString onDumpInfo() const override { 62 SkString string("Scissor [ "); 63 if (fScissor.enabled()) { 64 const SkIRect& r = fScissor.rect(); 65 string.appendf("L: %d, T: %d, R: %d, B: %d", r.fLeft, r.fTop, r.fRight, r.fBottom); 66 } else { 67 string.append("disabled"); 68 } 69 string.appendf("], Color: {%g, %g, %g, %g}\n", fColor[0], fColor[1], fColor[2], fColor[3]); 70 return string; 71 } 72 #endif 73 74 GrScissorState fScissor; 75 std::array<float, 4> fColor; 76 bool fStencilInsideMask; 77 Buffer fBuffer; 78 79 using INHERITED = GrOp; 80 }; 81 82 GR_MAKE_BITFIELD_CLASS_OPS(GrClearOp::Buffer) 83 84 #endif 85