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

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

Issue 1128153005: Add unit tests to text context (Closed) Base URL: https://skia.googlesource.com/skia.git@randbatch9
Patch Set: windows warning Created 5 years, 7 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/GrAtlasTextContext.h ('k') | src/gpu/GrBatchTest.h » ('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 #include "GrAtlasTextContext.h" 7 #include "GrAtlasTextContext.h"
8 8
9 #include "GrBatch.h" 9 #include "GrBatch.h"
10 #include "GrBatchFontCache.h" 10 #include "GrBatchFontCache.h"
11 #include "GrBatchTarget.h" 11 #include "GrBatchTarget.h"
12 #include "GrBatchTest.h"
12 #include "GrDefaultGeoProcFactory.h" 13 #include "GrDefaultGeoProcFactory.h"
13 #include "GrDrawTarget.h" 14 #include "GrDrawTarget.h"
14 #include "GrFontScaler.h" 15 #include "GrFontScaler.h"
15 #include "GrIndexBuffer.h" 16 #include "GrIndexBuffer.h"
16 #include "GrResourceProvider.h" 17 #include "GrResourceProvider.h"
17 #include "GrStrokeInfo.h" 18 #include "GrStrokeInfo.h"
18 #include "GrTextBlobCache.h" 19 #include "GrTextBlobCache.h"
19 #include "GrTexturePriv.h" 20 #include "GrTexturePriv.h"
20 #include "GrVertexBuffer.h" 21 #include "GrVertexBuffer.h"
21 22
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 blob->fViewMatrix = viewMatrix; 677 blob->fViewMatrix = viewMatrix;
677 Run& run = blob->fRuns[0]; 678 Run& run = blob->fRuns[0];
678 PerSubRunInfo& subRun = run.fSubRunInfo.back(); 679 PerSubRunInfo& subRun = run.fSubRunInfo.back();
679 subRun.fUseLCDText = origPaint.isLCDRenderText(); 680 subRun.fUseLCDText = origPaint.isLCDRenderText();
680 subRun.fDrawAsDistanceFields = true; 681 subRun.fDrawAsDistanceFields = true;
681 682
682 *cache = this->setupCache(&blob->fRuns[0], *dfPaint, NULL, true); 683 *cache = this->setupCache(&blob->fRuns[0], *dfPaint, NULL, true);
683 return blob; 684 return blob;
684 } 685 }
685 686
686 void GrAtlasTextContext::onDrawText(GrRenderTarget* rt, const GrClip& clip, 687 inline GrAtlasTextContext::BitmapTextBlob*
687 const GrPaint& paint, const SkPaint& skPaint , 688 GrAtlasTextContext::createDrawTextBlob(GrRenderTarget* rt, const GrClip& clip,
688 const SkMatrix& viewMatrix, 689 const GrPaint& paint, const SkPaint& skPa int,
689 const char text[], size_t byteLength, 690 const SkMatrix& viewMatrix,
690 SkScalar x, SkScalar y, const SkIRect& regio nClipBounds) { 691 const char text[], size_t byteLength,
692 SkScalar x, SkScalar y, const SkIRect& re gionClipBounds) {
691 int glyphCount = skPaint.countText(text, byteLength); 693 int glyphCount = skPaint.countText(text, byteLength);
692 SkIRect clipRect; 694 SkIRect clipRect;
693 clip.getConservativeBounds(rt->width(), rt->height(), &clipRect); 695 clip.getConservativeBounds(rt->width(), rt->height(), &clipRect);
694 696
695 // setup cache 697 BitmapTextBlob* blob;
696 if (this->canDrawAsDistanceFields(skPaint, viewMatrix)) { 698 if (this->canDrawAsDistanceFields(skPaint, viewMatrix)) {
697 SkPaint dfPaint; 699 SkPaint dfPaint;
698 SkScalar textRatio; 700 SkScalar textRatio;
699 SkGlyphCache* cache; 701 SkGlyphCache* cache;
700 SkAutoTUnref<BitmapTextBlob> blob(this->setupDFBlob(glyphCount, skPaint, viewMatrix, &cache, 702 blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &cache, &dfPai nt, &textRatio);
701 &dfPaint, &textRatio ));
702 703
703 SkTDArray<char> fallbackTxt; 704 SkTDArray<char> fallbackTxt;
704 SkTDArray<SkScalar> fallbackPos; 705 SkTDArray<SkScalar> fallbackPos;
705 SkPoint offset; 706 SkPoint offset;
706 this->internalDrawDFText(blob, 0, cache, dfPaint, paint.getColor(), view Matrix, text, 707 this->internalDrawDFText(blob, 0, cache, dfPaint, paint.getColor(), view Matrix, text,
707 byteLength, x, y, clipRect, textRatio, &fallbac kTxt, &fallbackPos, 708 byteLength, x, y, clipRect, textRatio, &fallbac kTxt, &fallbackPos,
708 &offset, skPaint); 709 &offset, skPaint);
709 SkGlyphCache::AttachCache(cache); 710 SkGlyphCache::AttachCache(cache);
710 if (fallbackTxt.count()) { 711 if (fallbackTxt.count()) {
711 this->fallbackDrawPosText(blob, 0, rt, clip, paint, skPaint, viewMat rix, fallbackTxt, 712 this->fallbackDrawPosText(blob, 0, rt, clip, paint, skPaint, viewMat rix, fallbackTxt,
712 fallbackPos, 2, offset, clipRect); 713 fallbackPos, 2, offset, clipRect);
713 } 714 }
714 this->flush(fContext->getTextTarget(), blob, rt, skPaint, paint, clip);
715 } else { 715 } else {
716 SkAutoTUnref<BitmapTextBlob> blob(fCache->createBlob(glyphCount, 1, kGra yTextVASize)); 716 blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize);
717 blob->fViewMatrix = viewMatrix; 717 blob->fViewMatrix = viewMatrix;
718 718
719 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa trix, false); 719 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa trix, false);
720 this->internalDrawBMPText(blob, 0, cache, skPaint, paint.getColor(), vie wMatrix, text, 720 this->internalDrawBMPText(blob, 0, cache, skPaint, paint.getColor(), vie wMatrix, text,
721 byteLength, x, y, clipRect); 721 byteLength, x, y, clipRect);
722 SkGlyphCache::AttachCache(cache); 722 SkGlyphCache::AttachCache(cache);
723 this->flush(fContext->getTextTarget(), blob, rt, skPaint, paint, clip);
724 } 723 }
724 return blob;
725 } 725 }
726 726
727 void GrAtlasTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip, 727 inline GrAtlasTextContext::BitmapTextBlob*
728 const GrPaint& paint, const SkPaint& skPa int, 728 GrAtlasTextContext::createDrawPosTextBlob(GrRenderTarget* rt, const GrClip& clip ,
729 const SkMatrix& viewMatrix, 729 const GrPaint& paint, const SkPaint& s kPaint,
730 const char text[], size_t byteLength, 730 const SkMatrix& viewMatrix,
731 const SkScalar pos[], int scalarsPerPosit ion, 731 const char text[], size_t byteLength,
732 const SkPoint& offset, const SkIRect& reg ionClipBounds) { 732 const SkScalar pos[], int scalarsPerPo sition,
733 const SkPoint& offset, const SkIRect& regionClipBounds) {
733 int glyphCount = skPaint.countText(text, byteLength); 734 int glyphCount = skPaint.countText(text, byteLength);
734 735
735 SkIRect clipRect; 736 SkIRect clipRect;
736 clip.getConservativeBounds(rt->width(), rt->height(), &clipRect); 737 clip.getConservativeBounds(rt->width(), rt->height(), &clipRect);
737 738
739 BitmapTextBlob* blob;
738 if (this->canDrawAsDistanceFields(skPaint, viewMatrix)) { 740 if (this->canDrawAsDistanceFields(skPaint, viewMatrix)) {
739 SkPaint dfPaint; 741 SkPaint dfPaint;
740 SkScalar textRatio; 742 SkScalar textRatio;
741 SkGlyphCache* cache; 743 SkGlyphCache* cache;
742 SkAutoTUnref<BitmapTextBlob> blob(this->setupDFBlob(glyphCount, skPaint, viewMatrix, &cache, 744 blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &cache, &dfPai nt, &textRatio);
743 &dfPaint, &textRatio ));
744 745
745 SkTDArray<char> fallbackTxt; 746 SkTDArray<char> fallbackTxt;
746 SkTDArray<SkScalar> fallbackPos; 747 SkTDArray<SkScalar> fallbackPos;
747 this->internalDrawDFPosText(blob, 0, cache, dfPaint, paint.getColor(), v iewMatrix, text, 748 this->internalDrawDFPosText(blob, 0, cache, dfPaint, paint.getColor(), v iewMatrix, text,
748 byteLength, pos, scalarsPerPosition, offset, clipRect, 749 byteLength, pos, scalarsPerPosition, offset, clipRect,
749 textRatio, &fallbackTxt, &fallbackPos); 750 textRatio, &fallbackTxt, &fallbackPos);
750 SkGlyphCache::AttachCache(cache); 751 SkGlyphCache::AttachCache(cache);
751 if (fallbackTxt.count()) { 752 if (fallbackTxt.count()) {
752 this->fallbackDrawPosText(blob, 0, rt, clip, paint, skPaint, viewMat rix, fallbackTxt, 753 this->fallbackDrawPosText(blob, 0, rt, clip, paint, skPaint, viewMat rix, fallbackTxt,
753 fallbackPos, scalarsPerPosition, offset, c lipRect); 754 fallbackPos, scalarsPerPosition, offset, c lipRect);
754 } 755 }
755 this->flush(fContext->getTextTarget(), blob, rt, skPaint, paint, clip);
756 } else { 756 } else {
757 SkAutoTUnref<BitmapTextBlob> blob(fCache->createBlob(glyphCount, 1, kGra yTextVASize)); 757 blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize);
758 blob->fViewMatrix = viewMatrix; 758 blob->fViewMatrix = viewMatrix;
759 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa trix, false); 759 SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMa trix, false);
760 this->internalDrawBMPPosText(blob, 0, cache, skPaint, paint.getColor(), viewMatrix, text, 760 this->internalDrawBMPPosText(blob, 0, cache, skPaint, paint.getColor(), viewMatrix, text,
761 byteLength, pos, scalarsPerPosition, offset , clipRect); 761 byteLength, pos, scalarsPerPosition, offset , clipRect);
762 SkGlyphCache::AttachCache(cache); 762 SkGlyphCache::AttachCache(cache);
763 this->flush(fContext->getTextTarget(), blob, rt, skPaint, paint, clip);
764 } 763 }
764 return blob;
765 }
766
767 void GrAtlasTextContext::onDrawText(GrRenderTarget* rt, const GrClip& clip,
768 const GrPaint& paint, const SkPaint& skPaint ,
769 const SkMatrix& viewMatrix,
770 const char text[], size_t byteLength,
771 SkScalar x, SkScalar y, const SkIRect& regio nClipBounds) {
772 SkAutoTUnref<BitmapTextBlob> blob(
773 this->createDrawTextBlob(rt, clip, paint, skPaint, viewMatrix,
774 text, byteLength, x, y, regionClipBounds));
775 this->flush(fContext->getTextTarget(), blob, rt, skPaint, paint, clip);
776 }
777
778 void GrAtlasTextContext::onDrawPosText(GrRenderTarget* rt, const GrClip& clip,
779 const GrPaint& paint, const SkPaint& skPa int,
780 const SkMatrix& viewMatrix,
781 const char text[], size_t byteLength,
782 const SkScalar pos[], int scalarsPerPosit ion,
783 const SkPoint& offset, const SkIRect& reg ionClipBounds) {
784 SkAutoTUnref<BitmapTextBlob> blob(
785 this->createDrawPosTextBlob(rt, clip, paint, skPaint, viewMatrix,
786 text, byteLength,
787 pos, scalarsPerPosition,
788 offset, regionClipBounds));
789
790 this->flush(fContext->getTextTarget(), blob, rt, skPaint, paint, clip);
765 } 791 }
766 792
767 void GrAtlasTextContext::internalDrawBMPText(BitmapTextBlob* blob, int runIndex, 793 void GrAtlasTextContext::internalDrawBMPText(BitmapTextBlob* blob, int runIndex,
768 SkGlyphCache* cache, const SkPaint& skPaint, 794 SkGlyphCache* cache, const SkPaint& skPaint,
769 GrColor color, 795 GrColor color,
770 const SkMatrix& viewMatrix, 796 const SkMatrix& viewMatrix,
771 const char text[], size_t byteLengt h, 797 const char text[], size_t byteLengt h,
772 SkScalar x, SkScalar y, const SkIRe ct& clipRect) { 798 SkScalar x, SkScalar y, const SkIRe ct& clipRect) {
773 SkASSERT(byteLength == 0 || text != NULL); 799 SkASSERT(byteLength == 0 || text != NULL);
774 800
(...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after
2043 textLen, it.pos(), 1, SkPoint::Make(x, y + o ffset.y()), 2069 textLen, it.pos(), 1, SkPoint::Make(x, y + o ffset.y()),
2044 clipBounds); 2070 clipBounds);
2045 break; 2071 break;
2046 case SkTextBlob::kFull_Positioning: 2072 case SkTextBlob::kFull_Positioning:
2047 this->drawPosTextAsPath(runPaint, viewMatrix, (const char*)it.glyphs (), 2073 this->drawPosTextAsPath(runPaint, viewMatrix, (const char*)it.glyphs (),
2048 textLen, it.pos(), 2, SkPoint::Make(x, y), c lipBounds); 2074 textLen, it.pos(), 2, SkPoint::Make(x, y), c lipBounds);
2049 break; 2075 break;
2050 } 2076 }
2051 } 2077 }
2052 2078
2079
2080 inline BitmapTextBatch*
2081 GrAtlasTextContext::createBatch(BitmapTextBlob* cacheBlob, const PerSubRunInfo& info,
2082 int glyphCount, int run, int subRun,
2083 GrColor color, SkScalar transX, SkScalar transY,
2084 const SkPaint& skPaint) {
2085 GrMaskFormat format = info.fMaskFormat;
2086 GrColor subRunColor;
2087 if (kARGB_GrMaskFormat == format) {
2088 uint8_t paintAlpha = skPaint.getAlpha();
2089 subRunColor = SkColorSetARGB(paintAlpha, paintAlpha, paintAlpha, paintAl pha);
2090 } else {
2091 subRunColor = color;
2092 }
2093
2094 BitmapTextBatch* batch;
2095 if (info.fDrawAsDistanceFields) {
2096 SkColor filteredColor;
2097 SkColorFilter* colorFilter = skPaint.getColorFilter();
2098 if (colorFilter) {
2099 filteredColor = colorFilter->filterColor(skPaint.getColor());
2100 } else {
2101 filteredColor = skPaint.getColor();
2102 }
2103 bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.pixelGeometry());
2104 float gamma = fDeviceProperties.gamma();
2105 batch = BitmapTextBatch::Create(format, glyphCount, fContext->getBatchFo ntCache(),
2106 fDistanceAdjustTable, filteredColor,
2107 info.fUseLCDText, useBGR,
2108 gamma);
2109 } else {
2110 batch = BitmapTextBatch::Create(format, glyphCount, fContext->getBatchFo ntCache());
2111 }
2112 BitmapTextBatch::Geometry& geometry = batch->geometry();
2113 geometry.fBlob = SkRef(cacheBlob);
2114 geometry.fRun = run;
2115 geometry.fSubRun = subRun;
2116 geometry.fColor = subRunColor;
2117 geometry.fTransX = transX;
2118 geometry.fTransY = transY;
2119 batch->init();
2120
2121 return batch;
2122 }
2123
2053 inline void GrAtlasTextContext::flushRun(GrDrawTarget* target, GrPipelineBuilder * pipelineBuilder, 2124 inline void GrAtlasTextContext::flushRun(GrDrawTarget* target, GrPipelineBuilder * pipelineBuilder,
2054 BitmapTextBlob* cacheBlob, int run, GrC olor color, 2125 BitmapTextBlob* cacheBlob, int run, GrC olor color,
2055 SkScalar transX, SkScalar transY, const SkPaint& skPaint) { 2126 SkScalar transX, SkScalar transY, const SkPaint& skPaint) {
2056 for (int subRun = 0; subRun < cacheBlob->fRuns[run].fSubRunInfo.count(); sub Run++) { 2127 for (int subRun = 0; subRun < cacheBlob->fRuns[run].fSubRunInfo.count(); sub Run++) {
2057 const PerSubRunInfo& info = cacheBlob->fRuns[run].fSubRunInfo[subRun]; 2128 const PerSubRunInfo& info = cacheBlob->fRuns[run].fSubRunInfo[subRun];
2058 int glyphCount = info.fGlyphEndIndex - info.fGlyphStartIndex; 2129 int glyphCount = info.fGlyphEndIndex - info.fGlyphStartIndex;
2059 if (0 == glyphCount) { 2130 if (0 == glyphCount) {
2060 continue; 2131 continue;
2061 } 2132 }
2062 2133
2063 GrMaskFormat format = info.fMaskFormat; 2134 SkAutoTUnref<BitmapTextBatch> batch(this->createBatch(cacheBlob, info, g lyphCount, run,
2064 GrColor subRunColor; 2135 subRun, color, tra nsX, transY,
2065 if (kARGB_GrMaskFormat == format) { 2136 skPaint));
2066 uint8_t paintAlpha = skPaint.getAlpha();
2067 subRunColor = SkColorSetARGB(paintAlpha, paintAlpha, paintAlpha, pai ntAlpha);
2068 } else {
2069 subRunColor = color;
2070 }
2071
2072 SkAutoTUnref<BitmapTextBatch> batch;
2073 if (info.fDrawAsDistanceFields) {
2074 SkColor filteredColor;
2075 SkColorFilter* colorFilter = skPaint.getColorFilter();
2076 if (colorFilter) {
2077 filteredColor = colorFilter->filterColor(skPaint.getColor());
2078 } else {
2079 filteredColor = skPaint.getColor();
2080 }
2081 bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.pixelGeometry() );
2082 float gamma = fDeviceProperties.gamma();
2083 batch.reset(BitmapTextBatch::Create(format, glyphCount, fContext->ge tBatchFontCache(),
2084 fDistanceAdjustTable, filteredCo lor,
2085 info.fUseLCDText, useBGR,
2086 gamma));
2087 } else {
2088 batch.reset(BitmapTextBatch::Create(format, glyphCount, fContext->ge tBatchFontCache()));
2089 }
2090 BitmapTextBatch::Geometry& geometry = batch->geometry();
2091 geometry.fBlob = SkRef(cacheBlob);
2092 geometry.fRun = run;
2093 geometry.fSubRun = subRun;
2094 geometry.fColor = subRunColor;
2095 geometry.fTransX = transX;
2096 geometry.fTransY = transY;
2097 batch->init();
2098
2099 target->drawBatch(pipelineBuilder, batch); 2137 target->drawBatch(pipelineBuilder, batch);
2100 } 2138 }
2101 } 2139 }
2102 2140
2103 inline void GrAtlasTextContext::flushBigGlyphs(BitmapTextBlob* cacheBlob, GrRend erTarget* rt, 2141 inline void GrAtlasTextContext::flushBigGlyphs(BitmapTextBlob* cacheBlob, GrRend erTarget* rt,
2104 const GrPaint& grPaint, const GrC lip& clip, 2142 const GrPaint& grPaint, const GrC lip& clip,
2105 SkScalar transX, SkScalar transY) { 2143 SkScalar transX, SkScalar transY) {
2106 for (int i = 0; i < cacheBlob->fBigGlyphs.count(); i++) { 2144 for (int i = 0; i < cacheBlob->fBigGlyphs.count(); i++) {
2107 BitmapTextBlob::BigGlyph& bigGlyph = cacheBlob->fBigGlyphs[i]; 2145 BitmapTextBlob::BigGlyph& bigGlyph = cacheBlob->fBigGlyphs[i];
2108 bigGlyph.fVx += SkScalarTruncToInt(transX); 2146 bigGlyph.fVx += SkScalarTruncToInt(transX);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 pipelineBuilder.setFromPaint(grPaint, rt, clip); 2198 pipelineBuilder.setFromPaint(grPaint, rt, clip);
2161 2199
2162 GrColor color = grPaint.getColor(); 2200 GrColor color = grPaint.getColor();
2163 for (int run = 0; run < cacheBlob->fRunCount; run++) { 2201 for (int run = 0; run < cacheBlob->fRunCount; run++) {
2164 this->flushRun(target, &pipelineBuilder, cacheBlob, run, color, 0, 0, sk Paint); 2202 this->flushRun(target, &pipelineBuilder, cacheBlob, run, color, 0, 0, sk Paint);
2165 } 2203 }
2166 2204
2167 // Now flush big glyphs 2205 // Now flush big glyphs
2168 this->flushBigGlyphs(cacheBlob, rt, grPaint, clip, 0, 0); 2206 this->flushBigGlyphs(cacheBlob, rt, grPaint, clip, 0, 0);
2169 } 2207 }
2208
2209 //////////////////////////////////////////////////////////////////////////////// ///////////////////
2210
2211 #ifdef GR_TEST_UTILS
2212
2213 BATCH_TEST_DEFINE(TextBlob) {
2214 static uint32_t gContextID = SK_InvalidGenID;
2215 static GrAtlasTextContext* gTextContext = NULL;
2216 static SkDeviceProperties gDeviceProperties(SkDeviceProperties::kLegacyLCD_I nitType);
2217
2218 if (context->uniqueID() != gContextID) {
2219 gContextID = context->uniqueID();
2220 SkDELETE(gTextContext);
2221 // We don't yet test the fall back to paths in the GrTextContext base cl ass. This is mostly
2222 // because we don't really want to have a gpu device here.
2223 // We enable distance fields by twiddling a knob on the paint
2224 gTextContext = GrAtlasTextContext::Create(context, NULL, gDeviceProperti es, false);
2225 }
2226
2227 // create dummy render target
2228 GrSurfaceDesc desc;
2229 desc.fFlags = kRenderTarget_GrSurfaceFlag;
2230 desc.fWidth = 1024;
2231 desc.fHeight = 1024;
2232 desc.fConfig = kRGBA_8888_GrPixelConfig;
2233 desc.fSampleCnt = 1;
2234 SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(de sc, true, NULL, 0));
2235 SkASSERT(texture);
2236 SkASSERT(NULL != texture->asRenderTarget());
2237 GrRenderTarget* rt = texture->asRenderTarget();
2238
2239 // Setup dummy SkPaint / GrPaint
2240 GrColor color = GrRandomColor(random);
2241 SkMatrix viewMatrix = GrTest::TestMatrix(random);
2242 SkPaint skPaint;
2243 skPaint.setDistanceFieldTextTEMP(random->nextBool());
2244 skPaint.setColor(color);
2245 skPaint.setLCDRenderText(random->nextBool());
2246 skPaint.setAntiAlias(skPaint.isLCDRenderText() ? true : random->nextBool());
2247 skPaint.setSubpixelText(random->nextBool());
2248
2249 GrPaint grPaint;
2250 if (!SkPaint2GrPaint(context, rt, skPaint, viewMatrix, true, &grPaint)) {
2251 SkFAIL("couldn't convert paint\n");
2252 }
2253
2254 const char* text = "The quick brown fox jumps over the lazy dog.";
2255 int textLen = (int)strlen(text);
2256
2257 // Setup clip
2258 GrClip clip;
2259 SkIRect noClip = SkIRect::MakeLargest();
2260
2261 // right now we don't handle textblobs, nor do we handle drawPosText. Since we only
2262 // intend to test the batch with this unit test, that is okay.
2263 SkAutoTUnref<GrAtlasTextContext::BitmapTextBlob> blob(
2264 gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat rix, text,
2265 static_cast<size_t>(textLen), 0, 0, noClip));
2266
2267 SkScalar transX = static_cast<SkScalar>(random->nextU());
2268 SkScalar transY = static_cast<SkScalar>(random->nextU());
2269 const GrAtlasTextContext::BitmapTextBlob::Run::SubRunInfo& info = blob->fRun s[0].fSubRunInfo[0];
2270 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t ransY, skPaint);
2271 }
2272
2273 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrAtlasTextContext.h ('k') | src/gpu/GrBatchTest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698