OLD | NEW |
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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 int fRunCount; | 203 int fRunCount; |
204 SkMaskFilter::BlurRec fBlurRec; | 204 SkMaskFilter::BlurRec fBlurRec; |
205 struct StrokeInfo { | 205 struct StrokeInfo { |
206 SkScalar fFrameWidth; | 206 SkScalar fFrameWidth; |
207 SkScalar fMiterLimit; | 207 SkScalar fMiterLimit; |
208 SkPaint::Join fJoin; | 208 SkPaint::Join fJoin; |
209 }; | 209 }; |
210 StrokeInfo fStrokeInfo; | 210 StrokeInfo fStrokeInfo; |
211 GrMemoryPool* fPool; | 211 GrMemoryPool* fPool; |
212 | 212 |
| 213 enum TextType { |
| 214 kHasDistanceField_TextType = 0x1, |
| 215 kHasBitmap_TextType = 0x2, |
| 216 }; |
| 217 uint8_t fTextType; |
| 218 |
| 219 BitmapTextBlob() : fTextType(0) {} |
| 220 |
213 // all glyph / vertex offsets are into these pools. | 221 // all glyph / vertex offsets are into these pools. |
214 unsigned char* fVertices; | 222 unsigned char* fVertices; |
215 GrGlyph::PackedID* fGlyphIDs; | 223 GrGlyph::PackedID* fGlyphIDs; |
216 Run* fRuns; | 224 Run* fRuns; |
217 | 225 |
218 struct Key { | 226 struct Key { |
219 Key() { | 227 Key() { |
220 sk_bzero(this, sizeof(Key)); | 228 sk_bzero(this, sizeof(Key)); |
221 } | 229 } |
222 uint32_t fUniqueID; | 230 uint32_t fUniqueID; |
(...skipping 25 matching lines...) Expand all Loading... |
248 } | 256 } |
249 void* operator new(size_t) { | 257 void* operator new(size_t) { |
250 SkFAIL("All blobs are created by placement new."); | 258 SkFAIL("All blobs are created by placement new."); |
251 return sk_malloc_throw(0); | 259 return sk_malloc_throw(0); |
252 } | 260 } |
253 | 261 |
254 void* operator new(size_t, void* p) { return p; } | 262 void* operator new(size_t, void* p) { return p; } |
255 void operator delete(void* target, void* placement) { | 263 void operator delete(void* target, void* placement) { |
256 ::operator delete(target, placement); | 264 ::operator delete(target, placement); |
257 } | 265 } |
| 266 |
| 267 bool hasDistanceField() const { return SkToBool(fTextType & kHasDistance
Field_TextType); } |
| 268 bool hasBitmap() const { return SkToBool(fTextType & kHasBitmap_TextType
); } |
| 269 void setHasDistanceField() { fTextType |= kHasDistanceField_TextType; } |
| 270 void setHasBitmap() { fTextType |= kHasBitmap_TextType; } |
258 }; | 271 }; |
259 | 272 |
260 typedef BitmapTextBlob::Run Run; | 273 typedef BitmapTextBlob::Run Run; |
261 typedef Run::SubRunInfo PerSubRunInfo; | 274 typedef Run::SubRunInfo PerSubRunInfo; |
262 | 275 |
263 inline bool canDrawAsDistanceFields(const SkPaint&, const SkMatrix& viewMatr
ix); | 276 inline bool canDrawAsDistanceFields(const SkPaint&, const SkMatrix& viewMatr
ix); |
264 BitmapTextBlob* setupDFBlob(int glyphCount, const SkPaint& origPaint, | 277 BitmapTextBlob* setupDFBlob(int glyphCount, const SkPaint& origPaint, |
265 const SkMatrix& viewMatrix, SkGlyphCache** cache
, | 278 const SkMatrix& viewMatrix, SkGlyphCache** cache
, |
266 SkPaint* dfPaint, SkScalar* textRatio); | 279 SkPaint* dfPaint, SkScalar* textRatio); |
267 void bmpAppendGlyph(BitmapTextBlob*, int runIndex, GrGlyph::PackedID, int le
ft, int top, | 280 void bmpAppendGlyph(BitmapTextBlob*, int runIndex, GrGlyph::PackedID, int le
ft, int top, |
(...skipping 18 matching lines...) Expand all Loading... |
286 SkScalar transX, SkScalar transY); | 299 SkScalar transX, SkScalar transY); |
287 | 300 |
288 // We have to flush SkTextBlobs differently from drawText / drawPosText | 301 // We have to flush SkTextBlobs differently from drawText / drawPosText |
289 void flush(GrDrawTarget*, const SkTextBlob*, BitmapTextBlob*, GrRenderTarget
*, const SkPaint&, | 302 void flush(GrDrawTarget*, const SkTextBlob*, BitmapTextBlob*, GrRenderTarget
*, const SkPaint&, |
290 const GrPaint&, SkDrawFilter*, const GrClip&, const SkMatrix& vie
wMatrix, | 303 const GrPaint&, SkDrawFilter*, const GrClip&, const SkMatrix& vie
wMatrix, |
291 const SkIRect& clipBounds, SkScalar x, SkScalar y, SkScalar trans
X, SkScalar transY); | 304 const SkIRect& clipBounds, SkScalar x, SkScalar y, SkScalar trans
X, SkScalar transY); |
292 void flush(GrDrawTarget*, BitmapTextBlob*, GrRenderTarget*, const SkPaint&, | 305 void flush(GrDrawTarget*, BitmapTextBlob*, GrRenderTarget*, const SkPaint&, |
293 const GrPaint&, const GrClip&); | 306 const GrPaint&, const GrClip&); |
294 | 307 |
295 // A helper for drawing BitmapText in a run of distance fields | 308 // A helper for drawing BitmapText in a run of distance fields |
296 inline void fallbackDrawPosText(BitmapTextBlob*, GrRenderTarget*, const GrCl
ip&, | 309 inline void fallbackDrawPosText(BitmapTextBlob*, int runIndex, |
| 310 GrRenderTarget*, const GrClip&, |
297 const GrPaint&, | 311 const GrPaint&, |
298 const SkPaint&, const SkMatrix& viewMatrix, | 312 const SkPaint&, const SkMatrix& viewMatrix, |
299 const SkTDArray<char>& fallbackTxt, | 313 const SkTDArray<char>& fallbackTxt, |
300 const SkTDArray<SkScalar>& fallbackPos, | 314 const SkTDArray<SkScalar>& fallbackPos, |
301 int scalarsPerPosition, | 315 int scalarsPerPosition, |
302 const SkPoint& offset, | 316 const SkPoint& offset, |
303 const SkIRect& clipRect); | 317 const SkIRect& clipRect); |
304 | 318 |
305 void internalDrawBMPText(BitmapTextBlob*, int runIndex, SkGlyphCache*, const
SkPaint&, | 319 void internalDrawBMPText(BitmapTextBlob*, int runIndex, SkGlyphCache*, const
SkPaint&, |
306 GrColor color, const SkMatrix& viewMatrix, | 320 GrColor color, const SkMatrix& viewMatrix, |
(...skipping 25 matching lines...) Expand all Loading... |
332 // sets up the descriptor on the blob and returns a detached cache. Client
must attach | 346 // sets up the descriptor on the blob and returns a detached cache. Client
must attach |
333 inline static GrColor ComputeCanonicalColor(const SkPaint&, bool lcd); | 347 inline static GrColor ComputeCanonicalColor(const SkPaint&, bool lcd); |
334 inline SkGlyphCache* setupCache(Run*, const SkPaint&, const SkMatrix* viewMa
trix, bool noGamma); | 348 inline SkGlyphCache* setupCache(Run*, const SkPaint&, const SkMatrix* viewMa
trix, bool noGamma); |
335 static inline bool MustRegenerateBlob(SkScalar* outTransX, SkScalar* outTran
sY, | 349 static inline bool MustRegenerateBlob(SkScalar* outTransX, SkScalar* outTran
sY, |
336 const BitmapTextBlob&, const SkPaint&, | 350 const BitmapTextBlob&, const SkPaint&, |
337 const SkMaskFilter::BlurRec&, | 351 const SkMaskFilter::BlurRec&, |
338 const SkMatrix& viewMatrix, SkScalar x
, SkScalar y); | 352 const SkMatrix& viewMatrix, SkScalar x
, SkScalar y); |
339 void regenerateTextBlob(BitmapTextBlob* bmp, const SkPaint& skPaint, GrColor
, | 353 void regenerateTextBlob(BitmapTextBlob* bmp, const SkPaint& skPaint, GrColor
, |
340 const SkMatrix& viewMatrix, | 354 const SkMatrix& viewMatrix, |
341 const SkTextBlob* blob, SkScalar x, SkScalar y, | 355 const SkTextBlob* blob, SkScalar x, SkScalar y, |
342 SkDrawFilter* drawFilter, const SkIRect& clipRect); | 356 SkDrawFilter* drawFilter, const SkIRect& clipRect, G
rRenderTarget*, |
| 357 const GrClip&, const GrPaint&); |
343 inline static bool HasLCD(const SkTextBlob*); | 358 inline static bool HasLCD(const SkTextBlob*); |
344 inline void initDistanceFieldPaint(SkPaint*, SkScalar* textRatio, const SkMa
trix&); | 359 inline void initDistanceFieldPaint(SkPaint*, SkScalar* textRatio, const SkMa
trix&); |
345 | 360 |
346 // Distance field text needs this table to compute a value for use in the fr
agment shader. | 361 // Distance field text needs this table to compute a value for use in the fr
agment shader. |
347 // Because the GrAtlasTextContext can go out of scope before the final flush
, this needs to be | 362 // Because the GrAtlasTextContext can go out of scope before the final flush
, this needs to be |
348 // refcnted and malloced | 363 // refcnted and malloced |
349 struct DistanceAdjustTable : public SkNVRefCnt<DistanceAdjustTable> { | 364 struct DistanceAdjustTable : public SkNVRefCnt<DistanceAdjustTable> { |
350 DistanceAdjustTable(float gamma) { this->buildDistanceAdjustTable(gamma)
; } | 365 DistanceAdjustTable(float gamma) { this->buildDistanceAdjustTable(gamma)
; } |
351 ~DistanceAdjustTable() { SkDELETE_ARRAY(fTable); } | 366 ~DistanceAdjustTable() { SkDELETE_ARRAY(fTable); } |
352 | 367 |
(...skipping 15 matching lines...) Expand all Loading... |
368 bool fEnableDFRendering; | 383 bool fEnableDFRendering; |
369 SkAutoTUnref<DistanceAdjustTable> fDistanceAdjustTable; | 384 SkAutoTUnref<DistanceAdjustTable> fDistanceAdjustTable; |
370 | 385 |
371 friend class GrTextBlobCache; | 386 friend class GrTextBlobCache; |
372 friend class BitmapTextBatch; | 387 friend class BitmapTextBatch; |
373 | 388 |
374 typedef GrTextContext INHERITED; | 389 typedef GrTextContext INHERITED; |
375 }; | 390 }; |
376 | 391 |
377 #endif | 392 #endif |
OLD | NEW |