1 /* 2 * Copyright 2016 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 GrTexureOpList_DEFINED 9 #define GrTexureOpList_DEFINED 10 11 #include "GrGpuResource.h" 12 #include "GrOpList.h" 13 #include "GrSurfaceProxy.h" 14 15 #include "SkTArray.h" 16 17 class GrAuditTrail; 18 class GrGpu; 19 class GrOp; 20 class GrTextureProxy; 21 struct SkIPoint; 22 struct SkIRect; 23 24 class GrTextureOpList final : public GrOpList { 25 public: 26 GrTextureOpList(GrResourceProvider*, GrTextureProxy*, GrAuditTrail*); 27 ~GrTextureOpList() override; 28 29 /** 30 * Empties the draw buffer of any queued ops. 31 */ 32 void reset() override; 33 abandonGpuResources()34 void abandonGpuResources() override {} freeGpuResources()35 void freeGpuResources() override {} 36 37 /** 38 * Together these two functions flush all queued ops to GrGpuCommandBuffer. The return value 39 * of executeOps() indicates whether any commands were actually issued to the GPU. 40 */ 41 void prepareOps(GrOpFlushState* flushState) override; 42 bool executeOps(GrOpFlushState* flushState) override; 43 44 /** 45 * Copies a pixel rectangle from one surface to another. This call may finalize 46 * reserved vertex/index data (as though a draw call was made). The src pixels 47 * copied are specified by srcRect. They are copied to a rect of the same 48 * size in dst with top left at dstPoint. If the src rect is clipped by the 49 * src bounds then pixel values in the dst rect corresponding to area clipped 50 * by the src rect are not overwritten. This method is not guaranteed to succeed 51 * depending on the type of surface, configs, etc, and the backend-specific 52 * limitations. 53 */ 54 bool copySurface(const GrCaps& caps, 55 GrSurfaceProxy* dst, 56 GrSurfaceProxy* src, 57 const SkIRect& srcRect, 58 const SkIPoint& dstPoint) override; 59 asTextureOpList()60 GrTextureOpList* asTextureOpList() override { return this; } 61 62 SkDEBUGCODE(void dump() const override;) 63 64 SkDEBUGCODE(int numOps() const override { return fRecordedOps.count(); }) 65 66 private: 67 void recordOp(std::unique_ptr<GrOp>); 68 69 SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps; 70 71 typedef GrOpList INHERITED; 72 }; 73 74 #endif 75