diff options
author | Greg Daniel <egdaniel@google.com> | 2017-11-18 13:31:59 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-18 13:32:08 +0000 |
commit | 9c2202ffc22b4293b48a4edeafa1b5d2bab8bb83 (patch) | |
tree | 6667b8892e760ba70baa81f55a36c974eeb31761 /src/gpu/GrOpFlushState.h | |
parent | c12853ae42c30ef1cffb77c7777b330a7bbdb603 (diff) |
Revert "Add Atlas Text interface for rendering SDF glyphs."
This reverts commit 39631f3df172feb385527a5d125bc53b0bded7e6.
Reason for revert: break google3 rool
Original change's description:
> Add Atlas Text interface for rendering SDF glyphs.
>
> This new API is built upon SDF text atlas code from the GPU backend. Unlike using the GPU
> backend to draw text, this set of interfaces allows the client to render the SDF glyphs. The
> client issues text draws to potentially multiple targets and then the client flushes. The
> client then gets commands from Skia with data to put into a texture atlas and vertices to
> draw that reference the texture. The client is responsible for creating the texture, uploading
> the SDF data to the texture, and drawing the vertices provided by Skia.
>
> Change-Id: Ie9447e19b85f0ce1c2b942e5216c787a74f335d3
> Reviewed-on: https://skia-review.googlesource.com/59360
> Commit-Queue: Brian Salomon <bsalomon@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
TBR=jvanverth@google.com,bsalomon@google.com,robertphillips@google.com
Change-Id: I4aad0c99e645b476fd8ba25731f2a10e8802bb25
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/73420
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/GrOpFlushState.h')
-rw-r--r-- | src/gpu/GrOpFlushState.h | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h index a9cf9a070f..b20098aac7 100644 --- a/src/gpu/GrOpFlushState.h +++ b/src/gpu/GrOpFlushState.h @@ -13,7 +13,6 @@ #include "GrBufferAllocPool.h" #include "GrDeferredUpload.h" #include "SkArenaAlloc.h" -#include "SkArenaAllocList.h" #include "ops/GrMeshDrawOp.h" class GrGpu; @@ -111,6 +110,53 @@ private: uint32_t fOpID; }; + /** + * A singly linked list of Ts stored in a SkArenaAlloc. The arena rather than the list owns + * the elements. This supports forward iteration and range based for loops. + */ + template <typename T> + class List { + private: + struct Node; + + public: + List() = default; + + void reset() { fHead = fTail = nullptr; } + + template <typename... Args> + T& append(SkArenaAlloc* arena, Args... args); + + class Iter { + public: + Iter() = default; + Iter& operator++(); + T& operator*() const { return fCurr->fT; } + T* operator->() const { return &fCurr->fT; } + bool operator==(const Iter& that) const { return fCurr == that.fCurr; } + bool operator!=(const Iter& that) const { return !(*this == that); } + + private: + friend class List; + explicit Iter(Node* node) : fCurr(node) {} + Node* fCurr = nullptr; + }; + + Iter begin() { return Iter(fHead); } + Iter end() { return Iter(); } + Iter tail() { return Iter(fTail); } + + private: + struct Node { + template <typename... Args> + Node(Args... args) : fT(std::forward<Args>(args)...) {} + T fT; + Node* fNext = nullptr; + }; + Node* fHead = nullptr; + Node* fTail = nullptr; + }; + // Storage for ops' pipelines, draws, and inline uploads. SkArenaAlloc fArena{sizeof(GrPipeline) * 100}; @@ -119,9 +165,9 @@ private: GrIndexBufferAllocPool fIndexPool; // Data stored on behalf of the ops being flushed. - SkArenaAllocList<GrDeferredTextureUploadFn> fAsapUploads; - SkArenaAllocList<InlineUpload> fInlineUploads; - SkArenaAllocList<Draw> fDraws; + List<GrDeferredTextureUploadFn> fAsapUploads; + List<InlineUpload> fInlineUploads; + List<Draw> fDraws; // TODO: These should go in the arena. However, GrGpuCommandBuffer and other classes currently // accept contiguous arrays of meshes. SkSTArray<16, GrMesh> fMeshes; @@ -139,9 +185,9 @@ private: GrGpuCommandBuffer* fCommandBuffer = nullptr; // Variables that are used to track where we are in lists as ops are executed - SkArenaAllocList<Draw>::Iter fCurrDraw; + List<Draw>::Iter fCurrDraw; int fCurrMesh; - SkArenaAllocList<InlineUpload>::Iter fCurrUpload; + List<InlineUpload>::Iter fCurrUpload; }; #endif |