| /* | |
| * Copyright 2016 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrTexureOpList_DEFINED | |
| #define GrTexureOpList_DEFINED | |
| #include "GrGpuResource.h" | |
| #include "GrOpList.h" | |
| #include "GrSurfaceProxy.h" | |
| #include "SkTArray.h" | |
| class GrAuditTrail; | |
| class GrGpu; | |
| class GrOp; | |
| class GrTextureProxy; | |
| struct SkIPoint; | |
| struct SkIRect; | |
| class GrTextureOpList final : public GrOpList { | |
| public: | |
| GrTextureOpList(GrResourceProvider*, sk_sp<GrOpMemoryPool>, GrTextureProxy*, GrAuditTrail*); | |
| ~GrTextureOpList() override; | |
| /** | |
| * Empties the draw buffer of any queued ops. | |
| */ | |
| void endFlush() override; | |
| /** | |
| * Together these two functions flush all queued ops to GrGpuCommandBuffer. The return value | |
| * of executeOps() indicates whether any commands were actually issued to the GPU. | |
| */ | |
| void onPrepare(GrOpFlushState* flushState) override; | |
| bool onExecute(GrOpFlushState* flushState) override; | |
| /** | |
| * Copies a pixel rectangle from one surface to another. This call may finalize | |
| * reserved vertex/index data (as though a draw call was made). The src pixels | |
| * copied are specified by srcRect. They are copied to a rect of the same | |
| * size in dst with top left at dstPoint. If the src rect is clipped by the | |
| * src bounds then pixel values in the dst rect corresponding to area clipped | |
| * by the src rect are not overwritten. This method is not guaranteed to succeed | |
| * depending on the type of surface, configs, etc, and the backend-specific | |
| * limitations. | |
| */ | |
| bool copySurface(GrContext*, | |
| GrSurfaceProxy* dst, | |
| GrSurfaceProxy* src, | |
| const SkIRect& srcRect, | |
| const SkIPoint& dstPoint) override; | |
| GrTextureOpList* asTextureOpList() override { return this; } | |
| SkDEBUGCODE(void dump(bool printDependencies) const override;) | |
| SkDEBUGCODE(int numOps() const override { return fRecordedOps.count(); }) | |
| private: | |
| void deleteOp(int index); | |
| void deleteOps(); | |
| void purgeOpsWithUninstantiatedProxies() override; | |
| void gatherProxyIntervals(GrResourceAllocator*) const override; | |
| void recordOp(std::unique_ptr<GrOp>); | |
| // The memory for the ops in 'fRecordedOps' is actually stored in 'fOpMemoryPool' | |
| SkSTArray<2, std::unique_ptr<GrOp>, true> fRecordedOps; | |
| typedef GrOpList INHERITED; | |
| }; | |
| #endif |