| 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 "GrBatch.h" |     9 #include "GrBatch.h" | 
|    10 #include "GrBatchFontCache.h" |    10 #include "GrBatchFontCache.h" | 
| (...skipping 1519 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1530         SkAutoTUnref<const GrGeometryProcessor> gp; |  1530         SkAutoTUnref<const GrGeometryProcessor> gp; | 
|  1531         if (fUseDistanceFields) { |  1531         if (fUseDistanceFields) { | 
|  1532             gp.reset(this->setupDfProcessor(this->viewMatrix(), fFilteredColor, 
      this->color(), |  1532             gp.reset(this->setupDfProcessor(this->viewMatrix(), fFilteredColor, 
      this->color(), | 
|  1533                                             texture)); |  1533                                             texture)); | 
|  1534         } else { |  1534         } else { | 
|  1535             GrTextureParams params(SkShader::kClamp_TileMode, GrTextureParams::k
      None_FilterMode); |  1535             GrTextureParams params(SkShader::kClamp_TileMode, GrTextureParams::k
      None_FilterMode); | 
|  1536             gp.reset(GrBitmapTextGeoProc::Create(this->color(), |  1536             gp.reset(GrBitmapTextGeoProc::Create(this->color(), | 
|  1537                                                  texture, |  1537                                                  texture, | 
|  1538                                                  params, |  1538                                                  params, | 
|  1539                                                  fMaskFormat, |  1539                                                  fMaskFormat, | 
|  1540                                                  localMatrix)); |  1540                                                  localMatrix, | 
 |  1541                                                  this->usesLocalCoords())); | 
|  1541         } |  1542         } | 
|  1542  |  1543  | 
|  1543         FlushInfo flushInfo; |  1544         FlushInfo flushInfo; | 
|  1544         flushInfo.fGlyphsToFlush = 0; |  1545         flushInfo.fGlyphsToFlush = 0; | 
|  1545         size_t vertexStride = gp->getVertexStride(); |  1546         size_t vertexStride = gp->getVertexStride(); | 
|  1546         SkASSERT(vertexStride == (fUseDistanceFields ? |  1547         SkASSERT(vertexStride == (fUseDistanceFields ? | 
|  1547                                   get_vertex_stride_df(fMaskFormat, fUseLCDText)
       : |  1548                                   get_vertex_stride_df(fMaskFormat, fUseLCDText)
       : | 
|  1548                                   get_vertex_stride(fMaskFormat))); |  1549                                   get_vertex_stride(fMaskFormat))); | 
|  1549  |  1550  | 
|  1550         this->initDraw(batchTarget, gp, pipeline); |  1551         batchTarget->initDraw(gp, pipeline); | 
|  1551  |  1552  | 
|  1552         int glyphCount = this->numGlyphs(); |  1553         int glyphCount = this->numGlyphs(); | 
|  1553         int instanceCount = fInstanceCount; |  1554         int instanceCount = fInstanceCount; | 
|  1554         const GrVertexBuffer* vertexBuffer; |  1555         const GrVertexBuffer* vertexBuffer; | 
|  1555  |  1556  | 
|  1556         void* vertices = batchTarget->makeVertSpace(vertexStride, |  1557         void* vertices = batchTarget->makeVertSpace(vertexStride, | 
|  1557                                                     glyphCount * kVerticesPerGly
      ph, |  1558                                                     glyphCount * kVerticesPerGly
      ph, | 
|  1558                                                     &vertexBuffer, |  1559                                                     &vertexBuffer, | 
|  1559                                                     &flushInfo.fVertexOffset); |  1560                                                     &flushInfo.fVertexOffset); | 
|  1560         flushInfo.fVertexBuffer.reset(SkRef(vertexBuffer)); |  1561         flushInfo.fVertexBuffer.reset(SkRef(vertexBuffer)); | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1650                             glyph = blob->fGlyphs[glyphOffset]; |  1651                             glyph = blob->fGlyphs[glyphOffset]; | 
|  1651                             blob->fGlyphs[glyphOffset] = strike->getGlyph(glyph-
      >fPackedID, |  1652                             blob->fGlyphs[glyphOffset] = strike->getGlyph(glyph-
      >fPackedID, | 
|  1652                                                                           scaler
      ); |  1653                                                                           scaler
      ); | 
|  1653                         } |  1654                         } | 
|  1654                         glyph = blob->fGlyphs[glyphOffset]; |  1655                         glyph = blob->fGlyphs[glyphOffset]; | 
|  1655                         SkASSERT(glyph); |  1656                         SkASSERT(glyph); | 
|  1656  |  1657  | 
|  1657                         if (!fFontCache->hasGlyph(glyph) && |  1658                         if (!fFontCache->hasGlyph(glyph) && | 
|  1658                             !strike->addGlyphToAtlas(batchTarget, glyph, scaler)
      ) { |  1659                             !strike->addGlyphToAtlas(batchTarget, glyph, scaler)
      ) { | 
|  1659                             this->flush(batchTarget, &flushInfo); |  1660                             this->flush(batchTarget, &flushInfo); | 
|  1660                             this->initDraw(batchTarget, gp, pipeline); |  1661                             batchTarget->initDraw(gp, pipeline); | 
|  1661                             brokenRun = glyphIdx > 0; |  1662                             brokenRun = glyphIdx > 0; | 
|  1662  |  1663  | 
|  1663                             SkDEBUGCODE(bool success =) strike->addGlyphToAtlas(
      batchTarget, |  1664                             SkDEBUGCODE(bool success =) strike->addGlyphToAtlas(
      batchTarget, | 
|  1664                                                                                 
      glyph, |  1665                                                                                 
      glyph, | 
|  1665                                                                                 
      scaler); |  1666                                                                                 
      scaler); | 
|  1666                             SkASSERT(success); |  1667                             SkASSERT(success); | 
|  1667                         } |  1668                         } | 
|  1668                         fFontCache->addGlyphToBulkAndSetUseToken(&info.fBulkUseT
      oken, glyph, |  1669                         fFontCache->addGlyphToBulkAndSetUseToken(&info.fBulkUseT
      oken, glyph, | 
|  1669                                                                  batchTarget->cu
      rrentToken()); |  1670                                                                  batchTarget->cu
      rrentToken()); | 
|  1670  |  1671  | 
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1842     void regeneratePositions(intptr_t vertex, size_t vertexStride, SkScalar tran
      sX, |  1843     void regeneratePositions(intptr_t vertex, size_t vertexStride, SkScalar tran
      sX, | 
|  1843                              SkScalar transY) { |  1844                              SkScalar transY) { | 
|  1844         for (int i = 0; i < kVerticesPerGlyph; i++) { |  1845         for (int i = 0; i < kVerticesPerGlyph; i++) { | 
|  1845             SkPoint* point = reinterpret_cast<SkPoint*>(vertex); |  1846             SkPoint* point = reinterpret_cast<SkPoint*>(vertex); | 
|  1846             point->fX += transX; |  1847             point->fX += transX; | 
|  1847             point->fY += transY; |  1848             point->fY += transY; | 
|  1848             vertex += vertexStride; |  1849             vertex += vertexStride; | 
|  1849         } |  1850         } | 
|  1850     } |  1851     } | 
|  1851  |  1852  | 
|  1852     void initDraw(GrBatchTarget* batchTarget, |  | 
|  1853                   const GrGeometryProcessor* gp, |  | 
|  1854                   const GrPipeline* pipeline) { |  | 
|  1855         batchTarget->initDraw(gp, pipeline); |  | 
|  1856  |  | 
|  1857         // TODO remove this when batch is everywhere |  | 
|  1858         GrPipelineInfo init; |  | 
|  1859         init.fColorIgnored = fBatch.fColorIgnored; |  | 
|  1860         init.fOverrideColor = GrColor_ILLEGAL; |  | 
|  1861         init.fCoverageIgnored = fBatch.fCoverageIgnored; |  | 
|  1862         init.fUsesLocalCoords = this->usesLocalCoords(); |  | 
|  1863         gp->initBatchTracker(batchTarget->currentBatchTracker(), init); |  | 
|  1864     } |  | 
|  1865  |  | 
|  1866     void flush(GrBatchTarget* batchTarget, FlushInfo* flushInfo) { |  1853     void flush(GrBatchTarget* batchTarget, FlushInfo* flushInfo) { | 
|  1867         GrVertices vertices; |  1854         GrVertices vertices; | 
|  1868         int maxGlyphsPerDraw = flushInfo->fIndexBuffer->maxQuads(); |  1855         int maxGlyphsPerDraw = flushInfo->fIndexBuffer->maxQuads(); | 
|  1869         vertices.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuf
      fer, |  1856         vertices.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuf
      fer, | 
|  1870                                flushInfo->fIndexBuffer, flushInfo->fVertexOffset
      , |  1857                                flushInfo->fIndexBuffer, flushInfo->fVertexOffset
      , | 
|  1871                                kVerticesPerGlyph, kIndicesPerGlyph, flushInfo->f
      GlyphsToFlush, |  1858                                kVerticesPerGlyph, kIndicesPerGlyph, flushInfo->f
      GlyphsToFlush, | 
|  1872                                maxGlyphsPerDraw); |  1859                                maxGlyphsPerDraw); | 
|  1873         batchTarget->draw(vertices); |  1860         batchTarget->draw(vertices); | 
|  1874         flushInfo->fVertexOffset += kVerticesPerGlyph * flushInfo->fGlyphsToFlus
      h; |  1861         flushInfo->fVertexOffset += kVerticesPerGlyph * flushInfo->fGlyphsToFlus
      h; | 
|  1875         flushInfo->fGlyphsToFlush = 0; |  1862         flushInfo->fGlyphsToFlush = 0; | 
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1985             GrDistanceFieldLCDTextGeoProc::DistanceAdjust widthAdjust = |  1972             GrDistanceFieldLCDTextGeoProc::DistanceAdjust widthAdjust = | 
|  1986                 GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make(redCorrectio
      n, |  1973                 GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make(redCorrectio
      n, | 
|  1987                                                                     greenCorrect
      ion, |  1974                                                                     greenCorrect
      ion, | 
|  1988                                                                     blueCorrecti
      on); |  1975                                                                     blueCorrecti
      on); | 
|  1989  |  1976  | 
|  1990             return GrDistanceFieldLCDTextGeoProc::Create(color, |  1977             return GrDistanceFieldLCDTextGeoProc::Create(color, | 
|  1991                                                          viewMatrix, |  1978                                                          viewMatrix, | 
|  1992                                                          texture, |  1979                                                          texture, | 
|  1993                                                          params, |  1980                                                          params, | 
|  1994                                                          widthAdjust, |  1981                                                          widthAdjust, | 
|  1995                                                          flags); |  1982                                                          flags, | 
 |  1983                                                          this->usesLocalCoords()
      ); | 
|  1996         } else { |  1984         } else { | 
|  1997             flags |= kColorAttr_DistanceFieldEffectFlag; |  1985             flags |= kColorAttr_DistanceFieldEffectFlag; | 
|  1998 #ifdef SK_GAMMA_APPLY_TO_A8 |  1986 #ifdef SK_GAMMA_APPLY_TO_A8 | 
|  1999             U8CPU lum = SkColorSpaceLuminance::computeLuminance(fGamma, filtered
      Color); |  1987             U8CPU lum = SkColorSpaceLuminance::computeLuminance(fGamma, filtered
      Color); | 
|  2000             float correction = (*fDistanceAdjustTable)[lum >> kDistanceAdjustLum
      Shift]; |  1988             float correction = (*fDistanceAdjustTable)[lum >> kDistanceAdjustLum
      Shift]; | 
|  2001             return GrDistanceFieldA8TextGeoProc::Create(color, |  1989             return GrDistanceFieldA8TextGeoProc::Create(color, | 
|  2002                                                         viewMatrix, |  1990                                                         viewMatrix, | 
|  2003                                                         texture, |  1991                                                         texture, | 
|  2004                                                         params, |  1992                                                         params, | 
|  2005                                                         correction, |  1993                                                         correction, | 
|  2006                                                         flags); |  1994                                                         flags, | 
 |  1995                                                         this->usesLocalCoords())
      ; | 
|  2007 #else |  1996 #else | 
|  2008             return GrDistanceFieldA8TextGeoProc::Create(color, |  1997             return GrDistanceFieldA8TextGeoProc::Create(color, | 
|  2009                                                         viewMatrix, |  1998                                                         viewMatrix, | 
|  2010                                                         texture, |  1999                                                         texture, | 
|  2011                                                         params, |  2000                                                         params, | 
|  2012                                                         flags); |  2001                                                         flags, | 
 |  2002                                                         this->usesLocalCoords())
      ; | 
|  2013 #endif |  2003 #endif | 
|  2014         } |  2004         } | 
|  2015  |  2005  | 
|  2016     } |  2006     } | 
|  2017  |  2007  | 
|  2018     struct BatchTracker { |  2008     struct BatchTracker { | 
|  2019         GrColor fColor; |  2009         GrColor fColor; | 
|  2020         SkMatrix fViewMatrix; |  2010         SkMatrix fViewMatrix; | 
|  2021         bool fUsesLocalCoords; |  2011         bool fUsesLocalCoords; | 
|  2022         bool fColorIgnored; |  2012         bool fColorIgnored; | 
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2272             gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat
      rix, text, |  2262             gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat
      rix, text, | 
|  2273                                              static_cast<size_t>(textLen), 0, 0,
       noClip)); |  2263                                              static_cast<size_t>(textLen), 0, 0,
       noClip)); | 
|  2274  |  2264  | 
|  2275     SkScalar transX = static_cast<SkScalar>(random->nextU()); |  2265     SkScalar transX = static_cast<SkScalar>(random->nextU()); | 
|  2276     SkScalar transY = static_cast<SkScalar>(random->nextU()); |  2266     SkScalar transY = static_cast<SkScalar>(random->nextU()); | 
|  2277     const GrAtlasTextContext::BitmapTextBlob::Run::SubRunInfo& info = blob->fRun
      s[0].fSubRunInfo[0]; |  2267     const GrAtlasTextContext::BitmapTextBlob::Run::SubRunInfo& info = blob->fRun
      s[0].fSubRunInfo[0]; | 
|  2278     return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
      ransY, skPaint); |  2268     return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
      ransY, skPaint); | 
|  2279 } |  2269 } | 
|  2280  |  2270  | 
|  2281 #endif |  2271 #endif | 
| OLD | NEW |