| 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 #include "GrAtlasTextContext.h" | 7 #include "GrAtlasTextContext.h" |
| 8 | 8 |
| 9 #include "GrBatchFontCache.h" | 9 #include "GrBatchFontCache.h" |
| 10 #include "GrBatchFlushState.h" | 10 #include "GrBatchFlushState.h" |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 | 479 |
| 480 return true; | 480 return true; |
| 481 } | 481 } |
| 482 | 482 |
| 483 void GrAtlasTextContext::regenerateTextBlob(GrAtlasTextBlob* cacheBlob, | 483 void GrAtlasTextContext::regenerateTextBlob(GrAtlasTextBlob* cacheBlob, |
| 484 const SkPaint& skPaint, GrColor colo
r, | 484 const SkPaint& skPaint, GrColor colo
r, |
| 485 const SkMatrix& viewMatrix, | 485 const SkMatrix& viewMatrix, |
| 486 const SkTextBlob* blob, SkScalar x,
SkScalar y, | 486 const SkTextBlob* blob, SkScalar x,
SkScalar y, |
| 487 SkDrawFilter* drawFilter, const SkIR
ect& clipRect, | 487 SkDrawFilter* drawFilter, const SkIR
ect& clipRect, |
| 488 GrRenderTarget* rt, const GrClip& cl
ip) { | 488 GrRenderTarget* rt, const GrClip& cl
ip) { |
| 489 // The color here is the GrPaint color, and it is used to determine whether
we | 489 // The color here is the GrPaint color, and it is used to determine whether
we |
| 490 // have to regenerate LCD text blobs. | 490 // have to regenerate LCD text blobs. |
| 491 // We use this color vs the SkPaint color because it has the colorfilter app
lied. | 491 // We use this color vs the SkPaint color because it has the colorfilter app
lied. |
| 492 cacheBlob->fPaintColor = color; | 492 cacheBlob->fPaintColor = color; |
| 493 cacheBlob->fViewMatrix = viewMatrix; | 493 cacheBlob->fViewMatrix = viewMatrix; |
| 494 cacheBlob->fX = x; | 494 cacheBlob->fX = x; |
| 495 cacheBlob->fY = y; | 495 cacheBlob->fY = y; |
| 496 | 496 |
| 497 // Regenerate textblob | 497 // Regenerate textblob |
| 498 SkPaint runPaint = skPaint; | 498 SkPaint runPaint = skPaint; |
| 499 SkTextBlob::RunIterator it(blob); | 499 SkTextBlob::RunIterator it(blob); |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 SkScalar textRatio; | 717 SkScalar textRatio; |
| 718 blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &tex
tRatio); | 718 blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &tex
tRatio); |
| 719 | 719 |
| 720 SkTDArray<char> fallbackTxt; | 720 SkTDArray<char> fallbackTxt; |
| 721 SkTDArray<SkScalar> fallbackPos; | 721 SkTDArray<SkScalar> fallbackPos; |
| 722 SkPoint offset; | 722 SkPoint offset; |
| 723 this->internalDrawDFText(blob, 0, dfPaint, paint.getColor(), viewMatrix,
text, | 723 this->internalDrawDFText(blob, 0, dfPaint, paint.getColor(), viewMatrix,
text, |
| 724 byteLength, x, y, clipRect, textRatio, &fallbac
kTxt, &fallbackPos, | 724 byteLength, x, y, clipRect, textRatio, &fallbac
kTxt, &fallbackPos, |
| 725 &offset, skPaint); | 725 &offset, skPaint); |
| 726 if (fallbackTxt.count()) { | 726 if (fallbackTxt.count()) { |
| 727 this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPai
nt, viewMatrix, | 727 this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPai
nt, viewMatrix, |
| 728 fallbackTxt, fallbackPos, 2, offset, clipR
ect); | 728 fallbackTxt, fallbackPos, 2, offset, clipR
ect); |
| 729 } | 729 } |
| 730 } else { | 730 } else { |
| 731 blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize); | 731 blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize); |
| 732 blob->fViewMatrix = viewMatrix; | 732 blob->fViewMatrix = viewMatrix; |
| 733 | 733 |
| 734 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa
trix, false); | 734 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa
trix, false); |
| 735 this->internalDrawBMPText(blob, 0, cache, skPaint, paint.getColor(), vie
wMatrix, text, | 735 this->internalDrawBMPText(blob, 0, cache, skPaint, paint.getColor(), vie
wMatrix, text, |
| 736 byteLength, x, y, clipRect); | 736 byteLength, x, y, clipRect); |
| 737 SkGlyphCache::AttachCache(cache); | 737 SkGlyphCache::AttachCache(cache); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 756 SkPaint dfPaint; | 756 SkPaint dfPaint; |
| 757 SkScalar textRatio; | 757 SkScalar textRatio; |
| 758 blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &tex
tRatio); | 758 blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &tex
tRatio); |
| 759 | 759 |
| 760 SkTDArray<char> fallbackTxt; | 760 SkTDArray<char> fallbackTxt; |
| 761 SkTDArray<SkScalar> fallbackPos; | 761 SkTDArray<SkScalar> fallbackPos; |
| 762 this->internalDrawDFPosText(blob, 0, dfPaint, paint.getColor(), viewMatr
ix, text, | 762 this->internalDrawDFPosText(blob, 0, dfPaint, paint.getColor(), viewMatr
ix, text, |
| 763 byteLength, pos, scalarsPerPosition, offset,
clipRect, | 763 byteLength, pos, scalarsPerPosition, offset,
clipRect, |
| 764 textRatio, &fallbackTxt, &fallbackPos); | 764 textRatio, &fallbackTxt, &fallbackPos); |
| 765 if (fallbackTxt.count()) { | 765 if (fallbackTxt.count()) { |
| 766 this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPai
nt, viewMatrix, | 766 this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPai
nt, viewMatrix, |
| 767 fallbackTxt, fallbackPos, scalarsPerPositi
on, offset, | 767 fallbackTxt, fallbackPos, scalarsPerPositi
on, offset, |
| 768 clipRect); | 768 clipRect); |
| 769 } | 769 } |
| 770 } else { | 770 } else { |
| 771 blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize); | 771 blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize); |
| 772 blob->fViewMatrix = viewMatrix; | 772 blob->fViewMatrix = viewMatrix; |
| 773 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa
trix, false); | 773 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa
trix, false); |
| 774 this->internalDrawBMPPosText(blob, 0, cache, skPaint, paint.getColor(),
viewMatrix, text, | 774 this->internalDrawBMPPosText(blob, 0, cache, skPaint, paint.getColor(),
viewMatrix, text, |
| 775 byteLength, pos, scalarsPerPosition, offset
, clipRect); | 775 byteLength, pos, scalarsPerPosition, offset
, clipRect); |
| 776 SkGlyphCache::AttachCache(cache); | 776 SkGlyphCache::AttachCache(cache); |
| 777 } | 777 } |
| 778 return blob; | 778 return blob; |
| 779 } | 779 } |
| 780 | 780 |
| 781 void GrAtlasTextContext::onDrawText(GrDrawContext* dc, GrRenderTarget* rt, | 781 void GrAtlasTextContext::onDrawText(GrDrawContext* dc, GrRenderTarget* rt, |
| 782 const GrClip& clip, | 782 const GrClip& clip, |
| 783 const GrPaint& paint, const SkPaint& skPaint
, | 783 const GrPaint& paint, const SkPaint& skPaint
, |
| 784 const SkMatrix& viewMatrix, | 784 const SkMatrix& viewMatrix, |
| 785 const char text[], size_t byteLength, | 785 const char text[], size_t byteLength, |
| 786 SkScalar x, SkScalar y, const SkIRect& regio
nClipBounds) { | 786 SkScalar x, SkScalar y, const SkIRect& regio
nClipBounds) { |
| 787 SkAutoTUnref<GrAtlasTextBlob> blob( | 787 SkAutoTUnref<GrAtlasTextBlob> blob( |
| 788 this->createDrawTextBlob(rt, clip, paint, skPaint, viewMatrix, | 788 this->createDrawTextBlob(rt, clip, paint, skPaint, viewMatrix, |
| 789 text, byteLength, x, y, regionClipBounds)); | 789 text, byteLength, x, y, regionClipBounds)); |
| 790 this->flush(blob, dc, rt, skPaint, paint, clip, regionClipBounds); | 790 this->flush(blob, dc, rt, skPaint, paint, clip, regionClipBounds); |
| 791 } | 791 } |
| 792 | 792 |
| (...skipping 1250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2043 GrBatchFontCache* fFontCache; | 2043 GrBatchFontCache* fFontCache; |
| 2044 | 2044 |
| 2045 // Distance field properties | 2045 // Distance field properties |
| 2046 SkAutoTUnref<const DistanceAdjustTable> fDistanceAdjustTable; | 2046 SkAutoTUnref<const DistanceAdjustTable> fDistanceAdjustTable; |
| 2047 SkColor fFilteredColor; | 2047 SkColor fFilteredColor; |
| 2048 | 2048 |
| 2049 typedef GrVertexBatch INHERITED; | 2049 typedef GrVertexBatch INHERITED; |
| 2050 }; | 2050 }; |
| 2051 | 2051 |
| 2052 void GrAtlasTextContext::flushRunAsPaths(GrDrawContext* dc, GrRenderTarget* rt, | 2052 void GrAtlasTextContext::flushRunAsPaths(GrDrawContext* dc, GrRenderTarget* rt, |
| 2053 const SkTextBlob::RunIterator& it, | 2053 const SkTextBlob::RunIterator& it, |
| 2054 const GrClip& clip, const SkPaint& skPa
int, | 2054 const GrClip& clip, const SkPaint& skPa
int, |
| 2055 SkDrawFilter* drawFilter, const SkMatri
x& viewMatrix, | 2055 SkDrawFilter* drawFilter, const SkMatri
x& viewMatrix, |
| 2056 const SkIRect& clipBounds, SkScalar x,
SkScalar y) { | 2056 const SkIRect& clipBounds, SkScalar x,
SkScalar y) { |
| 2057 SkPaint runPaint = skPaint; | 2057 SkPaint runPaint = skPaint; |
| 2058 | 2058 |
| 2059 size_t textLen = it.glyphCount() * sizeof(uint16_t); | 2059 size_t textLen = it.glyphCount() * sizeof(uint16_t); |
| 2060 const SkPoint& offset = it.offset(); | 2060 const SkPoint& offset = it.offset(); |
| 2061 | 2061 |
| 2062 it.applyFontToPaint(&runPaint); | 2062 it.applyFontToPaint(&runPaint); |
| 2063 | 2063 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2243 gTextContext = GrAtlasTextContext::Create(context, gSurfaceProps); | 2243 gTextContext = GrAtlasTextContext::Create(context, gSurfaceProps); |
| 2244 } | 2244 } |
| 2245 | 2245 |
| 2246 // create dummy render target | 2246 // create dummy render target |
| 2247 GrSurfaceDesc desc; | 2247 GrSurfaceDesc desc; |
| 2248 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 2248 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 2249 desc.fWidth = 1024; | 2249 desc.fWidth = 1024; |
| 2250 desc.fHeight = 1024; | 2250 desc.fHeight = 1024; |
| 2251 desc.fConfig = kRGBA_8888_GrPixelConfig; | 2251 desc.fConfig = kRGBA_8888_GrPixelConfig; |
| 2252 desc.fSampleCnt = 0; | 2252 desc.fSampleCnt = 0; |
| 2253 desc.fIsMipMapped = false; |
| 2253 SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(de
sc, true, nullptr, 0)); | 2254 SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(de
sc, true, nullptr, 0)); |
| 2254 SkASSERT(texture); | 2255 SkASSERT(texture); |
| 2255 SkASSERT(nullptr != texture->asRenderTarget()); | 2256 SkASSERT(nullptr != texture->asRenderTarget()); |
| 2256 GrRenderTarget* rt = texture->asRenderTarget(); | 2257 GrRenderTarget* rt = texture->asRenderTarget(); |
| 2257 | 2258 |
| 2258 // Setup dummy SkPaint / GrPaint | 2259 // Setup dummy SkPaint / GrPaint |
| 2259 GrColor color = GrRandomColor(random); | 2260 GrColor color = GrRandomColor(random); |
| 2260 SkMatrix viewMatrix = GrTest::TestMatrixInvertible(random); | 2261 SkMatrix viewMatrix = GrTest::TestMatrixInvertible(random); |
| 2261 SkPaint skPaint; | 2262 SkPaint skPaint; |
| 2262 skPaint.setColor(color); | 2263 skPaint.setColor(color); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2282 gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat
rix, text, | 2283 gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat
rix, text, |
| 2283 static_cast<size_t>(textLen), 0, 0,
noClip)); | 2284 static_cast<size_t>(textLen), 0, 0,
noClip)); |
| 2284 | 2285 |
| 2285 SkScalar transX = static_cast<SkScalar>(random->nextU()); | 2286 SkScalar transX = static_cast<SkScalar>(random->nextU()); |
| 2286 SkScalar transY = static_cast<SkScalar>(random->nextU()); | 2287 SkScalar transY = static_cast<SkScalar>(random->nextU()); |
| 2287 const GrAtlasTextBlob::Run::SubRunInfo& info = blob->fRuns[0].fSubRunInfo[0]
; | 2288 const GrAtlasTextBlob::Run::SubRunInfo& info = blob->fRuns[0].fSubRunInfo[0]
; |
| 2288 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
ransY, skPaint); | 2289 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
ransY, skPaint); |
| 2289 } | 2290 } |
| 2290 | 2291 |
| 2291 #endif | 2292 #endif |
| OLD | NEW |