• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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