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

Side by Side Diff: src/gpu/GrAtlasTextContext.h

Issue 1096753002: Small change to allow DistanceField and BMP text to coexist in a blob (Closed) Base URL: https://skia.googlesource.com/skia.git@atdfnow
Patch Set: warnings Created 5 years, 8 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 | « no previous file | src/gpu/GrAtlasTextContext.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 GrAtlasTextContext_DEFINED 8 #ifndef GrAtlasTextContext_DEFINED
9 #define GrAtlasTextContext_DEFINED 9 #define GrAtlasTextContext_DEFINED
10 10
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 uint64_t fAtlasGeneration; 107 uint64_t fAtlasGeneration;
108 uint32_t fGlyphStartIndex; 108 uint32_t fGlyphStartIndex;
109 uint32_t fGlyphEndIndex; 109 uint32_t fGlyphEndIndex;
110 size_t fVertexStartIndex; 110 size_t fVertexStartIndex;
111 size_t fVertexEndIndex; 111 size_t fVertexEndIndex;
112 GrBatchAtlas::BulkUseTokenUpdater fBulkUseToken; 112 GrBatchAtlas::BulkUseTokenUpdater fBulkUseToken;
113 113
114 // distance field properties 114 // distance field properties
115 bool fDrawAsDistanceFields; 115 bool fDrawAsDistanceFields;
116 bool fUseLCDText; 116 bool fUseLCDText;
117 // Distance field text cannot draw coloremoji, and so has to fal l back. However,
118 // though the distance field text and the coloremoji may share t he same run, they
119 // will have different descriptors. If fOverrideDescriptor is n on-NULL, then it
120 // will be used in place of the run's descriptor to regen textur e coords
121 // TODO we could have a descriptor cache, it would reduce the si ze of these blobs
122 // significantly, and then the subrun could just have a refed po inter to the
123 // correct descriptor.
124 SkAutoTDelete<SkAutoDescriptor> fOverrideDescriptor;
117 }; 125 };
118 126
119 class SubRunInfoArray { 127 class SubRunInfoArray {
120 public: 128 public:
121 SubRunInfoArray() 129 SubRunInfoArray()
122 : fSubRunCount(0) 130 : fSubRunCount(0)
123 , fSubRunAllocation(kMinSubRuns) { 131 , fSubRunAllocation(kMinSubRuns) {
132 SK_COMPILE_ASSERT(kMinSubRuns > 0, insufficient_subrun_alloc ation);
133 // We always seed with one here, so we can assume a valid su brun during
134 // push_back
124 fPtr = reinterpret_cast<SubRunInfo*>(fSubRunStorage.get()); 135 fPtr = reinterpret_cast<SubRunInfo*>(fSubRunStorage.get());
125 this->push_back(); 136 SkNEW_PLACEMENT(&fPtr[fSubRunCount++], SubRunInfo);
137 }
138 ~SubRunInfoArray() {
139 for (int i = 0; i < fSubRunCount; i++) {
140 fPtr[i].~SubRunInfo();
141 }
126 } 142 }
127 143
128 int count() const { return fSubRunCount; } 144 int count() const { return fSubRunCount; }
129 SubRunInfo& back() { return fPtr[fSubRunCount - 1]; } 145 SubRunInfo& back() { return fPtr[fSubRunCount - 1]; }
130 SubRunInfo& push_back() { 146 SubRunInfo& push_back() {
131 if (fSubRunCount >= fSubRunAllocation) { 147 if (fSubRunCount >= fSubRunAllocation) {
132 fSubRunAllocation = fSubRunAllocation << 1; 148 fSubRunAllocation = fSubRunAllocation << 1;
133 fSubRunStorage.realloc(fSubRunAllocation * sizeof(SubRun Info)); 149 fSubRunStorage.realloc(fSubRunAllocation * sizeof(SubRun Info));
134 fPtr = reinterpret_cast<SubRunInfo*>(fSubRunStorage.get( )); 150 fPtr = reinterpret_cast<SubRunInfo*>(fSubRunStorage.get( ));
135 } 151 }
136 SkNEW_PLACEMENT(&fPtr[fSubRunCount], SubRunInfo); 152 SkNEW_PLACEMENT(&fPtr[fSubRunCount], SubRunInfo);
153
154 // Forward glyph / vertex information to seed the new sub ru n
155 SubRunInfo& newSubRun = fPtr[fSubRunCount];
156 SubRunInfo& prevSubRun = fPtr[fSubRunCount - 1];
157 newSubRun.fGlyphStartIndex = prevSubRun.fGlyphEndIndex;
158 newSubRun.fGlyphEndIndex = prevSubRun.fGlyphEndIndex;
159
160 newSubRun.fVertexStartIndex = prevSubRun.fVertexEndIndex;
161 newSubRun.fVertexEndIndex = prevSubRun.fVertexEndIndex;
137 return fPtr[fSubRunCount++]; 162 return fPtr[fSubRunCount++];
138 } 163 }
139 SubRunInfo& operator[](int index) { 164 SubRunInfo& operator[](int index) {
140 return fPtr[index]; 165 return fPtr[index];
141 } 166 }
142 const SubRunInfo& operator[](int index) const { 167 const SubRunInfo& operator[](int index) const {
143 return fPtr[index]; 168 return fPtr[index];
144 } 169 }
145 170
146 private: 171 private:
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 SkScalar transX, SkScalar transY); 286 SkScalar transX, SkScalar transY);
262 287
263 // We have to flush SkTextBlobs differently from drawText / drawPosText 288 // We have to flush SkTextBlobs differently from drawText / drawPosText
264 void flush(GrDrawTarget*, const SkTextBlob*, BitmapTextBlob*, GrRenderTarget *, const SkPaint&, 289 void flush(GrDrawTarget*, const SkTextBlob*, BitmapTextBlob*, GrRenderTarget *, const SkPaint&,
265 const GrPaint&, SkDrawFilter*, const GrClip&, const SkMatrix& vie wMatrix, 290 const GrPaint&, SkDrawFilter*, const GrClip&, const SkMatrix& vie wMatrix,
266 const SkIRect& clipBounds, SkScalar x, SkScalar y, SkScalar trans X, SkScalar transY); 291 const SkIRect& clipBounds, SkScalar x, SkScalar y, SkScalar trans X, SkScalar transY);
267 void flush(GrDrawTarget*, BitmapTextBlob*, GrRenderTarget*, const SkPaint&, 292 void flush(GrDrawTarget*, BitmapTextBlob*, GrRenderTarget*, const SkPaint&,
268 const GrPaint&, const GrClip&); 293 const GrPaint&, const GrClip&);
269 294
270 // A helper for drawing BitmapText in a run of distance fields 295 // A helper for drawing BitmapText in a run of distance fields
271 inline void fallbackDrawPosText(GrRenderTarget*, const GrClip&, 296 inline void fallbackDrawPosText(BitmapTextBlob*, GrRenderTarget*, const GrCl ip&,
272 const GrPaint&, 297 const GrPaint&,
273 const SkPaint&, const SkMatrix& viewMatrix, 298 const SkPaint&, const SkMatrix& viewMatrix,
274 const SkTDArray<char>& fallbackTxt, 299 const SkTDArray<char>& fallbackTxt,
275 const SkTDArray<SkScalar>& fallbackPos, 300 const SkTDArray<SkScalar>& fallbackPos,
276 int scalarsPerPosition, 301 int scalarsPerPosition,
277 const SkPoint& offset, 302 const SkPoint& offset,
278 const SkIRect& clipRect); 303 const SkIRect& clipRect);
279 304
280 void internalDrawBMPText(BitmapTextBlob*, int runIndex, SkGlyphCache*, const SkPaint&, 305 void internalDrawBMPText(BitmapTextBlob*, int runIndex, SkGlyphCache*, const SkPaint&,
281 GrColor color, const SkMatrix& viewMatrix, 306 GrColor color, const SkMatrix& viewMatrix,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 bool fEnableDFRendering; 368 bool fEnableDFRendering;
344 SkAutoTUnref<DistanceAdjustTable> fDistanceAdjustTable; 369 SkAutoTUnref<DistanceAdjustTable> fDistanceAdjustTable;
345 370
346 friend class GrTextBlobCache; 371 friend class GrTextBlobCache;
347 friend class BitmapTextBatch; 372 friend class BitmapTextBatch;
348 373
349 typedef GrTextContext INHERITED; 374 typedef GrTextContext INHERITED;
350 }; 375 };
351 376
352 #endif 377 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/GrAtlasTextContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698