Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Side by Side Diff: src/gpu/batches/GrDrawPathBatch.h

Issue 1374853004: Fix caching of nvpr glyphs (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: MSVC warnings Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/GrStencilAndCoverTextContext.cpp ('k') | src/gpu/batches/GrDrawPathBatch.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrDrawPathBatch_DEFINED 8 #ifndef GrDrawPathBatch_DEFINED
9 #define GrDrawPathBatch_DEFINED 9 #define GrDrawPathBatch_DEFINED
10 10
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 }; 88 };
89 89
90 /** 90 /**
91 * This could be nested inside the batch class, but for now it must be declarabl e in a public 91 * This could be nested inside the batch class, but for now it must be declarabl e in a public
92 * header (GrDrawContext) 92 * header (GrDrawContext)
93 */ 93 */
94 class GrPathRangeDraw : public GrNonAtomicRef { 94 class GrPathRangeDraw : public GrNonAtomicRef {
95 public: 95 public:
96 typedef GrPathRendering::PathTransformType TransformType; 96 typedef GrPathRendering::PathTransformType TransformType;
97 97
98 static GrPathRangeDraw* Create(GrPathRange* range, TransformType transformTy pe, 98 static GrPathRangeDraw* Create(TransformType transformType, int reserveCnt) {
99 int reserveCnt) { 99 return new GrPathRangeDraw(transformType, reserveCnt);
100 return new GrPathRangeDraw(range, transformType, reserveCnt);
101 } 100 }
102 101
103 void append(uint16_t index, float transform[]) { 102 void append(uint16_t index, float transform[]) {
104 fTransforms.push_back_n(GrPathRendering::PathTransformSize(fTransformTyp e), transform); 103 fTransforms.push_back_n(GrPathRendering::PathTransformSize(fTransformTyp e), transform);
105 fIndices.push_back(index); 104 fIndices.push_back(index);
106 } 105 }
107 106
108 int count() const { return fIndices.count(); } 107 int count() const { return fIndices.count(); }
109 108
110 TransformType transformType() const { return fTransformType; } 109 TransformType transformType() const { return fTransformType; }
111 110
112 const float* transforms() const { return fTransforms.begin(); } 111 const float* transforms() const { return fTransforms.begin(); }
113 112
114 const uint16_t* indices() const { return fIndices.begin(); } 113 const uint16_t* indices() const { return fIndices.begin(); }
115 114
116 const GrPathRange* range() const { return fPathRange.get(); }
117
118 void loadGlyphPathsIfNeeded() {
119 fPathRange.get()->loadPathsIfNeeded<uint16_t>(fIndices.begin(), fIndices .count());
120 }
121
122 static bool CanMerge(const GrPathRangeDraw& a, const GrPathRangeDraw& b) { 115 static bool CanMerge(const GrPathRangeDraw& a, const GrPathRangeDraw& b) {
123 return a.transformType() == b.transformType() && a.range() == b.range(); 116 return a.transformType() == b.transformType();
124 } 117 }
125 118
126 private: 119 private:
127 GrPathRangeDraw(GrPathRange* range, TransformType transformType, int reserve Cnt) 120 GrPathRangeDraw(TransformType transformType, int reserveCnt)
128 : fPathRange(range) 121 : fTransformType(transformType)
129 , fTransformType(transformType)
130 , fIndices(reserveCnt) 122 , fIndices(reserveCnt)
131 , fTransforms(reserveCnt * GrPathRendering::PathTransformSize(transformT ype)) { 123 , fTransforms(reserveCnt * GrPathRendering::PathTransformSize(transformT ype)) {
132 SkDEBUGCODE(fUsedInBatch = false;) 124 SkDEBUGCODE(fUsedInBatch = false;)
133 } 125 }
134 126
135 // Reserve space for 64 paths where indices are 16 bit and transforms are tr anslations. 127 // Reserve space for 64 paths where indices are 16 bit and transforms are tr anslations.
136 static const int kIndexReserveCnt = 64; 128 static const int kIndexReserveCnt = 64;
137 static const int kTransformBufferReserveCnt = 2 * 64; 129 static const int kTransformBufferReserveCnt = 2 * 64;
138 130
139 GrPendingIOResource<const GrPathRange, kRead_GrIOType> fPathRange;
140 GrPathRendering::PathTransformType fTransformType; 131 GrPathRendering::PathTransformType fTransformType;
141 SkSTArray<kIndexReserveCnt, uint16_t, true> fIndices; 132 SkSTArray<kIndexReserveCnt, uint16_t, true> fIndices;
142 SkSTArray<kTransformBufferReserveCnt, float, true> fTransforms; 133 SkSTArray<kTransformBufferReserveCnt, float, true> fTransforms;
143 134
144 // To ensure we don't reuse these across batches. 135 // To ensure we don't reuse these across batches.
145 #ifdef SK_DEBUG 136 #ifdef SK_DEBUG
146 bool fUsedInBatch; 137 bool fUsedInBatch;
147 friend class GrDrawPathRangeBatch; 138 friend class GrDrawPathRangeBatch;
148 #endif 139 #endif
149 140
150 typedef GrNonAtomicRef INHERITED; 141 typedef GrNonAtomicRef INHERITED;
151 }; 142 };
152 143
153 // Template this if we decide to support index types other than 16bit 144 // Template this if we decide to support index types other than 16bit
154 class GrDrawPathRangeBatch final : public GrDrawPathBatchBase { 145 class GrDrawPathRangeBatch final : public GrDrawPathBatchBase {
155 public: 146 public:
156 DEFINE_BATCH_CLASS_ID 147 DEFINE_BATCH_CLASS_ID
157 148
158 // This can't return a more abstract type because we install the stencil set tings late :( 149 // This can't return a more abstract type because we install the stencil set tings late :(
159 static GrDrawPathBatchBase* Create(const SkMatrix& viewMatrix, const SkMatri x& localMatrix, 150 static GrDrawPathBatchBase* Create(const SkMatrix& viewMatrix, const SkMatri x& localMatrix,
160 GrColor color, GrPathRangeDraw* pathRange Draw) { 151 GrColor color, GrPathRange* range, GrPath RangeDraw* draw) {
161 return new GrDrawPathRangeBatch(viewMatrix, localMatrix, color, pathRang eDraw); 152 return new GrDrawPathRangeBatch(viewMatrix, localMatrix, color, range, d raw);
162 } 153 }
163 154
164 ~GrDrawPathRangeBatch() override; 155 ~GrDrawPathRangeBatch() override;
165 156
166 const char* name() const override { return "DrawPathRange"; } 157 const char* name() const override { return "DrawPathRange"; }
167 158
168 SkString dumpInfo() const override; 159 SkString dumpInfo() const override;
169 160
170 private: 161 private:
171 inline bool isWinding() const; 162 inline bool isWinding() const;
172 163
173 GrDrawPathRangeBatch(const SkMatrix& viewMatrix, const SkMatrix& localMatrix , GrColor color, 164 GrDrawPathRangeBatch(const SkMatrix& viewMatrix, const SkMatrix& localMatrix , GrColor color,
174 GrPathRangeDraw* pathRangeDraw); 165 GrPathRange* range, GrPathRangeDraw* draw);
175 166
176 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override; 167 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override;
177 168
178 void onPrepare(GrBatchFlushState*) override {} 169 void onPrepare(GrBatchFlushState*) override {}
179 170
180 void onDraw(GrBatchFlushState* state) override; 171 void onDraw(GrBatchFlushState* state) override;
181 172
173 typedef GrPendingIOResource<const GrPathRange, kRead_GrIOType> PendingPathRa nge;
182 typedef SkTLList<GrPathRangeDraw*> DrawList; 174 typedef SkTLList<GrPathRangeDraw*> DrawList;
183 DrawList fDraws; 175 PendingPathRange fPathRange;
184 int fTotalPathCount; 176 DrawList fDraws;
185 SkMatrix fLocalMatrix; 177 int fTotalPathCount;
178 SkMatrix fLocalMatrix;
186 179
187 typedef GrDrawPathBatchBase INHERITED; 180 typedef GrDrawPathBatchBase INHERITED;
188 }; 181 };
189 182
190 #endif 183 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrStencilAndCoverTextContext.cpp ('k') | src/gpu/batches/GrDrawPathBatch.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698