diff options
author | 2017-11-17 14:18:12 -0500 | |
---|---|---|
committer | 2017-11-17 20:35:06 +0000 | |
commit | 39631f3df172feb385527a5d125bc53b0bded7e6 (patch) | |
tree | f63361075ecc24f709d379c976b080d4d54949aa /src/gpu/GrOpFlushState.h | |
parent | e686cc4efadec7606b3df0f1e4133011d68b10b3 (diff) |
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>
Diffstat (limited to 'src/gpu/GrOpFlushState.h')
-rw-r--r-- | src/gpu/GrOpFlushState.h | 58 |
1 files changed, 6 insertions, 52 deletions
diff --git a/src/gpu/GrOpFlushState.h b/src/gpu/GrOpFlushState.h index b20098aac7..a9cf9a070f 100644 --- a/src/gpu/GrOpFlushState.h +++ b/src/gpu/GrOpFlushState.h @@ -13,6 +13,7 @@ #include "GrBufferAllocPool.h" #include "GrDeferredUpload.h" #include "SkArenaAlloc.h" +#include "SkArenaAllocList.h" #include "ops/GrMeshDrawOp.h" class GrGpu; @@ -110,53 +111,6 @@ 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}; @@ -165,9 +119,9 @@ private: GrIndexBufferAllocPool fIndexPool; // Data stored on behalf of the ops being flushed. - List<GrDeferredTextureUploadFn> fAsapUploads; - List<InlineUpload> fInlineUploads; - List<Draw> fDraws; + SkArenaAllocList<GrDeferredTextureUploadFn> fAsapUploads; + SkArenaAllocList<InlineUpload> fInlineUploads; + SkArenaAllocList<Draw> fDraws; // TODO: These should go in the arena. However, GrGpuCommandBuffer and other classes currently // accept contiguous arrays of meshes. SkSTArray<16, GrMesh> fMeshes; @@ -185,9 +139,9 @@ private: GrGpuCommandBuffer* fCommandBuffer = nullptr; // Variables that are used to track where we are in lists as ops are executed - List<Draw>::Iter fCurrDraw; + SkArenaAllocList<Draw>::Iter fCurrDraw; int fCurrMesh; - List<InlineUpload>::Iter fCurrUpload; + SkArenaAllocList<InlineUpload>::Iter fCurrUpload; }; #endif |