| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 #include "GrDistanceFieldTextContext.h" | 8 #include "GrDistanceFieldTextContext.h" |
| 9 #include "GrAtlas.h" | 9 #include "GrAtlas.h" |
| 10 #include "SkColorFilter.h" | 10 #include "SkColorFilter.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 static const int kMediumDFFontLimit = 64; | 37 static const int kMediumDFFontLimit = 64; |
| 38 static const int kLargeDFFontSize = 128; | 38 static const int kLargeDFFontSize = 128; |
| 39 | 39 |
| 40 namespace { | 40 namespace { |
| 41 // position + texture coord | 41 // position + texture coord |
| 42 extern const GrVertexAttrib gTextVertexAttribs[] = { | 42 extern const GrVertexAttrib gTextVertexAttribs[] = { |
| 43 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBindin
g}, | 43 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBindin
g}, |
| 44 {kVec2f_GrVertexAttribType, sizeof(SkPoint) , kEffect_GrVertexAttribBinding} | 44 {kVec2f_GrVertexAttribType, sizeof(SkPoint) , kEffect_GrVertexAttribBinding} |
| 45 }; | 45 }; |
| 46 | 46 |
| 47 static const size_t kTextVASize = 2 * sizeof(SkPoint); | |
| 48 | |
| 49 // position + color + texture coord | 47 // position + color + texture coord |
| 50 extern const GrVertexAttrib gTextVertexWithColorAttribs[] = { | 48 extern const GrVertexAttrib gTextVertexWithColorAttribs[] = { |
| 51 {kVec2f_GrVertexAttribType, 0, kPosition_Gr
VertexAttribBinding}, | 49 {kVec2f_GrVertexAttribType, 0, kPosition_Gr
VertexAttribBinding}, |
| 52 {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVer
texAttribBinding}, | 50 {kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVer
texAttribBinding}, |
| 53 {kVec2f_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kEffect_GrVe
rtexAttribBinding} | 51 {kVec2f_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kEffect_GrVe
rtexAttribBinding} |
| 54 }; | 52 }; |
| 55 | 53 |
| 56 static const size_t kTextVAColorSize = 2 * sizeof(SkPoint) + sizeof(GrColor); | |
| 57 | |
| 58 }; | 54 }; |
| 59 | 55 |
| 60 GrDistanceFieldTextContext::GrDistanceFieldTextContext(GrContext* context, | 56 GrDistanceFieldTextContext::GrDistanceFieldTextContext(GrContext* context, |
| 61 const SkDeviceProperties&
properties, | 57 const SkDeviceProperties&
properties, |
| 62 bool enable) | 58 bool enable) |
| 63 : GrTextContext(context, pro
perties) | 59 : GrTextContext(context, pro
perties) |
| 64 , fStrike(NULL) | 60 , fStrike(NULL) |
| 65 #if SK_FORCE_DISTANCEFIELD_FONTS | 61 #if SK_FORCE_DISTANCEFIELD_FONTS |
| 66 , fEnableDFRendering(true) | 62 , fEnableDFRendering(true) |
| 67 #else | 63 #else |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 r.fLeft = sx; | 348 r.fLeft = sx; |
| 353 r.fTop = sy; | 349 r.fTop = sy; |
| 354 r.fRight = sx + width; | 350 r.fRight = sx + width; |
| 355 r.fBottom = sy + height; | 351 r.fBottom = sy + height; |
| 356 | 352 |
| 357 fVertexBounds.growToInclude(r); | 353 fVertexBounds.growToInclude(r); |
| 358 | 354 |
| 359 size_t vertSize = fUseLCDText ? (2 * sizeof(SkPoint)) | 355 size_t vertSize = fUseLCDText ? (2 * sizeof(SkPoint)) |
| 360 : (2 * sizeof(SkPoint) + sizeof(GrColor)); | 356 : (2 * sizeof(SkPoint) + sizeof(GrColor)); |
| 361 | 357 |
| 362 SkASSERT(vertSize == fDrawTarget->getDrawState().getVertexStride()); | 358 SkASSERT(vertSize == fDrawTarget->getDrawState().getVertexSize()); |
| 363 | 359 |
| 364 SkPoint* positions = reinterpret_cast<SkPoint*>( | 360 SkPoint* positions = reinterpret_cast<SkPoint*>( |
| 365 reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex); | 361 reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex); |
| 366 positions->setRectFan(r.fLeft, r.fTop, r.fRight, r.fBottom, vertSize); | 362 positions->setRectFan(r.fLeft, r.fTop, r.fRight, r.fBottom, vertSize); |
| 367 | 363 |
| 368 // The texture coords are last in both the with and without color vertex lay
outs. | 364 // The texture coords are last in both the with and without color vertex lay
outs. |
| 369 SkPoint* textureCoords = reinterpret_cast<SkPoint*>( | 365 SkPoint* textureCoords = reinterpret_cast<SkPoint*>( |
| 370 reinterpret_cast<intptr_t>(positions) + vertSize - sizeof(SkPoint))
; | 366 reinterpret_cast<intptr_t>(positions) + vertSize - sizeof(SkPoint))
; |
| 371 textureCoords->setRectFan(SkFixedToFloat(texture->normalizeFixedX(tx)), | 367 textureCoords->setRectFan(SkFixedToFloat(texture->normalizeFixedX(tx)), |
| 372 SkFixedToFloat(texture->normalizeFixedY(ty)), | 368 SkFixedToFloat(texture->normalizeFixedY(ty)), |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 0, 0, width, height, | 456 0, 0, width, height, |
| 461 (*gammaTexture)->config(), data.get(), 0, | 457 (*gammaTexture)->config(), data.get(), 0, |
| 462 GrContext::kDontFlush_PixelOpsFlag); | 458 GrContext::kDontFlush_PixelOpsFlag); |
| 463 } | 459 } |
| 464 } | 460 } |
| 465 | 461 |
| 466 void GrDistanceFieldTextContext::allocateVertices(const char text[], size_t byte
Length) { | 462 void GrDistanceFieldTextContext::allocateVertices(const char text[], size_t byte
Length) { |
| 467 SkASSERT(NULL == fVertices); | 463 SkASSERT(NULL == fVertices); |
| 468 if (!fUseLCDText) { | 464 if (!fUseLCDText) { |
| 469 fDrawTarget->drawState()->setVertexAttribs<gTextVertexWithColorAttribs>( | 465 fDrawTarget->drawState()->setVertexAttribs<gTextVertexWithColorAttribs>( |
| 470 SK_ARRAY_COUNT(gTextVertexWi
thColorAttribs), | 466 SK_ARRAY_COUNT(gTextVertexWi
thColorAttribs)); |
| 471 kTextVAColorSize); | |
| 472 } else { | 467 } else { |
| 473 fDrawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>( | 468 fDrawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>( |
| 474 SK_ARRAY_COUNT(gTextVertexAt
tribs), | 469 SK_ARRAY_COUNT(gTextVertexAt
tribs)); |
| 475 kTextVASize); | |
| 476 } | 470 } |
| 477 fVertexCount = 4*fSkPaint.textToGlyphs(text, byteLength, NULL); | 471 fVertexCount = 4*fSkPaint.textToGlyphs(text, byteLength, NULL); |
| 478 bool success = fDrawTarget->reserveVertexAndIndexSpace(fVertexCount, | 472 bool success = fDrawTarget->reserveVertexAndIndexSpace(fVertexCount, |
| 479 0, | 473 0, |
| 480 &fVertices, | 474 &fVertices, |
| 481 NULL); | 475 NULL); |
| 482 GrAlwaysAssert(success); | 476 GrAlwaysAssert(success); |
| 483 } | 477 } |
| 484 | 478 |
| 485 void GrDistanceFieldTextContext::drawText(const GrPaint& paint, const SkPaint& s
kPaint, | 479 void GrDistanceFieldTextContext::drawText(const GrPaint& paint, const SkPaint& s
kPaint, |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 SkScalarToFixed(x) - (glyph.fAdvanceX >> a
lignShift), | 628 SkScalarToFixed(x) - (glyph.fAdvanceX >> a
lignShift), |
| 635 SkScalarToFixed(y) - (glyph.fAdvanceY >> a
lignShift), | 629 SkScalarToFixed(y) - (glyph.fAdvanceY >> a
lignShift), |
| 636 fontScaler); | 630 fontScaler); |
| 637 } | 631 } |
| 638 pos += scalarsPerPosition; | 632 pos += scalarsPerPosition; |
| 639 } | 633 } |
| 640 } | 634 } |
| 641 | 635 |
| 642 this->finish(); | 636 this->finish(); |
| 643 } | 637 } |
| OLD | NEW |