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

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

Issue 2180503002: Add destination color space to AsFPArgs. Eliminates last XFORMTODO. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 4 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/GrBlurUtils.cpp ('k') | src/gpu/SkGpuDevice_drawTexture.cpp » ('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 2011 Google Inc. 2 * Copyright 2011 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 "SkGpuDevice.h" 8 #include "SkGpuDevice.h"
9 9
10 #include "GrBlurUtils.h" 10 #include "GrBlurUtils.h"
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 358
359 /////////////////////////////////////////////////////////////////////////////// 359 ///////////////////////////////////////////////////////////////////////////////
360 360
361 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) { 361 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) {
362 ASSERT_SINGLE_OWNER 362 ASSERT_SINGLE_OWNER
363 CHECK_SHOULD_DRAW(draw); 363 CHECK_SHOULD_DRAW(draw);
364 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPaint", fContext); 364 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPaint", fContext);
365 365
366 GrPaint grPaint; 366 GrPaint grPaint;
367 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 367 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
368 this->surfaceProps().isGammaCorrect(), &grPaint)) { 368 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
369 &grPaint)) {
369 return; 370 return;
370 } 371 }
371 372
372 fDrawContext->drawPaint(fClip, grPaint, *draw.fMatrix); 373 fDrawContext->drawPaint(fClip, grPaint, *draw.fMatrix);
373 } 374 }
374 375
375 // must be in SkCanvas::PointMode order 376 // must be in SkCanvas::PointMode order
376 static const GrPrimitiveType gPointMode2PrimtiveType[] = { 377 static const GrPrimitiveType gPointMode2PrimtiveType[] = {
377 kPoints_GrPrimitiveType, 378 kPoints_GrPrimitiveType,
378 kLines_GrPrimitiveType, 379 kLines_GrPrimitiveType,
(...skipping 30 matching lines...) Expand all
409 410
410 SkScalar width = paint.getStrokeWidth(); 411 SkScalar width = paint.getStrokeWidth();
411 if (width < 0) { 412 if (width < 0) {
412 return; 413 return;
413 } 414 }
414 415
415 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) { 416 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) {
416 GrStyle style(paint, SkPaint::kStroke_Style); 417 GrStyle style(paint, SkPaint::kStroke_Style);
417 GrPaint grPaint; 418 GrPaint grPaint;
418 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 419 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
419 this->surfaceProps().isGammaCorrect(), &grPaint)) { 420 this->surfaceProps().isGammaCorrect(), fDrawContex t->getColorSpace(),
421 &grPaint)) {
420 return; 422 return;
421 } 423 }
422 SkPath path; 424 SkPath path;
423 path.setIsVolatile(true); 425 path.setIsVolatile(true);
424 path.moveTo(pts[0]); 426 path.moveTo(pts[0]);
425 path.lineTo(pts[1]); 427 path.lineTo(pts[1]);
426 fDrawContext->drawPath(fClip, grPaint, *draw.fMatrix, path, style); 428 fDrawContext->drawPath(fClip, grPaint, *draw.fMatrix, path, style);
427 return; 429 return;
428 } 430 }
429 431
430 // we only handle non-antialiased hairlines and paints without path effects or mask filters, 432 // we only handle non-antialiased hairlines and paints without path effects or mask filters,
431 // else we let the SkDraw call our drawPath() 433 // else we let the SkDraw call our drawPath()
432 if (width > 0 || paint.getPathEffect() || paint.getMaskFilter() || 434 if (width > 0 || paint.getPathEffect() || paint.getMaskFilter() ||
433 (paint.isAntiAlias() && needs_antialiasing(mode, count, pts))) { 435 (paint.isAntiAlias() && needs_antialiasing(mode, count, pts))) {
434 draw.drawPoints(mode, count, pts, paint, true); 436 draw.drawPoints(mode, count, pts, paint, true);
435 return; 437 return;
436 } 438 }
437 439
438 GrPaint grPaint; 440 GrPaint grPaint;
439 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 441 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
440 this->surfaceProps().isGammaCorrect(), &grPaint)) { 442 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
443 &grPaint)) {
441 return; 444 return;
442 } 445 }
443 446
444 fDrawContext->drawVertices(fClip, 447 fDrawContext->drawVertices(fClip,
445 grPaint, 448 grPaint,
446 *draw.fMatrix, 449 *draw.fMatrix,
447 gPointMode2PrimtiveType[mode], 450 gPointMode2PrimtiveType[mode],
448 SkToS32(count), 451 SkToS32(count),
449 (SkPoint*)pts, 452 (SkPoint*)pts,
450 nullptr, 453 nullptr,
(...skipping 17 matching lines...) Expand all
468 path.addRect(rect); 471 path.addRect(rect);
469 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext.get(), 472 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext.get(),
470 fClip, path, paint, 473 fClip, path, paint,
471 *draw.fMatrix, nullptr, 474 *draw.fMatrix, nullptr,
472 draw.fRC->getBounds(), true); 475 draw.fRC->getBounds(), true);
473 return; 476 return;
474 } 477 }
475 478
476 GrPaint grPaint; 479 GrPaint grPaint;
477 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 480 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
478 this->surfaceProps().isGammaCorrect(), &grPaint)) { 481 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
482 &grPaint)) {
479 return; 483 return;
480 } 484 }
481 485
482 GrStyle style(paint); 486 GrStyle style(paint);
483 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &style); 487 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &style);
484 } 488 }
485 489
486 /////////////////////////////////////////////////////////////////////////////// 490 ///////////////////////////////////////////////////////////////////////////////
487 491
488 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect, 492 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect,
489 const SkPaint& paint) { 493 const SkPaint& paint) {
490 ASSERT_SINGLE_OWNER 494 ASSERT_SINGLE_OWNER
491 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext); 495 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext);
492 CHECK_SHOULD_DRAW(draw); 496 CHECK_SHOULD_DRAW(draw);
493 497
494 GrPaint grPaint; 498 GrPaint grPaint;
495 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 499 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
496 this->surfaceProps().isGammaCorrect(), &grPaint)) { 500 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
501 &grPaint)) {
497 return; 502 return;
498 } 503 }
499 504
500 GrStyle style(paint); 505 GrStyle style(paint);
501 if (paint.getMaskFilter()) { 506 if (paint.getMaskFilter()) {
502 // try to hit the fast path for drawing filtered round rects 507 // try to hit the fast path for drawing filtered round rects
503 508
504 SkRRect devRRect; 509 SkRRect devRRect;
505 if (rect.transform(*draw.fMatrix, &devRRect)) { 510 if (rect.transform(*draw.fMatrix, &devRRect)) {
506 if (devRRect.allCornersCircular()) { 511 if (devRRect.allCornersCircular()) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 567
563 if (inner.isEmpty()) { 568 if (inner.isEmpty()) {
564 return this->drawRRect(draw, outer, paint); 569 return this->drawRRect(draw, outer, paint);
565 } 570 }
566 571
567 SkStrokeRec stroke(paint); 572 SkStrokeRec stroke(paint);
568 573
569 if (stroke.isFillStyle() && !paint.getMaskFilter() && !paint.getPathEffect() ) { 574 if (stroke.isFillStyle() && !paint.getMaskFilter() && !paint.getPathEffect() ) {
570 GrPaint grPaint; 575 GrPaint grPaint;
571 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 576 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
572 this->surfaceProps().isGammaCorrect(), &grPaint)) { 577 this->surfaceProps().isGammaCorrect(), fDrawContex t->getColorSpace(),
578 &grPaint)) {
573 return; 579 return;
574 } 580 }
575 581
576 fDrawContext->drawDRRect(fClip, grPaint, *draw.fMatrix, outer, inner); 582 fDrawContext->drawDRRect(fClip, grPaint, *draw.fMatrix, outer, inner);
577 return; 583 return;
578 } 584 }
579 585
580 SkPath path; 586 SkPath path;
581 path.setIsVolatile(true); 587 path.setIsVolatile(true);
582 path.addRRect(outer); 588 path.addRRect(outer);
(...skipping 24 matching lines...) Expand all
607 } 613 }
608 614
609 if (paint.getMaskFilter()) { 615 if (paint.getMaskFilter()) {
610 // The RRect path can handle special case blurring 616 // The RRect path can handle special case blurring
611 SkRRect rr = SkRRect::MakeOval(oval); 617 SkRRect rr = SkRRect::MakeOval(oval);
612 return this->drawRRect(draw, rr, paint); 618 return this->drawRRect(draw, rr, paint);
613 } 619 }
614 620
615 GrPaint grPaint; 621 GrPaint grPaint;
616 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 622 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
617 this->surfaceProps().isGammaCorrect(), &grPaint)) { 623 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
624 &grPaint)) {
618 return; 625 return;
619 } 626 }
620 627
621 fDrawContext->drawOval(fClip, grPaint, *draw.fMatrix, oval, GrStyle(paint)); 628 fDrawContext->drawOval(fClip, grPaint, *draw.fMatrix, oval, GrStyle(paint));
622 } 629 }
623 630
624 #include "SkMaskFilter.h" 631 #include "SkMaskFilter.h"
625 632
626 /////////////////////////////////////////////////////////////////////////////// 633 ///////////////////////////////////////////////////////////////////////////////
627 void SkGpuDevice::drawStrokedLine(const SkPoint points[2], 634 void SkGpuDevice::drawStrokedLine(const SkPoint points[2],
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 mid.fX+halfWidth, mid.fY + 0.5f*length + xtra Length); 671 mid.fX+halfWidth, mid.fY + 0.5f*length + xtra Length);
665 SkMatrix m; 672 SkMatrix m;
666 m.setSinCos(v.fX, -v.fY, mid.fX, mid.fY); 673 m.setSinCos(v.fX, -v.fY, mid.fX, mid.fY);
667 674
668 SkMatrix local = m; 675 SkMatrix local = m;
669 676
670 m.postConcat(*draw.fMatrix); 677 m.postConcat(*draw.fMatrix);
671 678
672 GrPaint grPaint; 679 GrPaint grPaint;
673 if (!SkPaintToGrPaint(this->context(), newPaint, m, 680 if (!SkPaintToGrPaint(this->context(), newPaint, m,
674 this->surfaceProps().isGammaCorrect(), &grPaint)) { 681 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
682 &grPaint)) {
675 return; 683 return;
676 } 684 }
677 685
678 fDrawContext->fillRectWithLocalMatrix(fClip, grPaint, m, rect, local); 686 fDrawContext->fillRectWithLocalMatrix(fClip, grPaint, m, rect, local);
679 } 687 }
680 688
681 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, 689 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath,
682 const SkPaint& paint, const SkMatrix* prePathMatrix, 690 const SkPaint& paint, const SkMatrix* prePathMatrix,
683 bool pathIsMutable) { 691 bool pathIsMutable) {
684 ASSERT_SINGLE_OWNER 692 ASSERT_SINGLE_OWNER
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode()); 1169 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode());
1162 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil eModeY() }; 1170 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil eModeY() };
1163 fp = GrBicubicEffect::Make(texture, std::move(colorSpaceXform), texMatri x, tileModes); 1171 fp = GrBicubicEffect::Make(texture, std::move(colorSpaceXform), texMatri x, tileModes);
1164 } else { 1172 } else {
1165 fp = GrSimpleTextureEffect::Make(texture, std::move(colorSpaceXform), te xMatrix, params); 1173 fp = GrSimpleTextureEffect::Make(texture, std::move(colorSpaceXform), te xMatrix, params);
1166 } 1174 }
1167 1175
1168 GrPaint grPaint; 1176 GrPaint grPaint;
1169 if (!SkPaintToGrPaintWithTexture(this->context(), paint, viewMatrix, std::mo ve(fp), 1177 if (!SkPaintToGrPaintWithTexture(this->context(), paint, viewMatrix, std::mo ve(fp),
1170 kAlpha_8_SkColorType == bitmap.colorType(), 1178 kAlpha_8_SkColorType == bitmap.colorType(),
1171 this->surfaceProps().isGammaCorrect(), &grP aint)) { 1179 this->surfaceProps().isGammaCorrect(),
1180 fDrawContext->getColorSpace(), &grPaint)) {
1172 return; 1181 return;
1173 } 1182 }
1174 1183
1175 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) { 1184 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) {
1176 // We don't have local coords in this case and have previously set the t ransform 1185 // We don't have local coords in this case and have previously set the t ransform
1177 // matrices directly on the texture processor. 1186 // matrices directly on the texture processor.
1178 fDrawContext->drawRect(fClip, grPaint, viewMatrix, dstRect); 1187 fDrawContext->drawRect(fClip, grPaint, viewMatrix, dstRect);
1179 } else { 1188 } else {
1180 fDrawContext->fillRectToRect(fClip, grPaint, viewMatrix, dstRect, paintR ect); 1189 fDrawContext->fillRectToRect(fClip, grPaint, viewMatrix, dstRect, paintR ect);
1181 } 1190 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 1261
1253 GrPaint grPaint; 1262 GrPaint grPaint;
1254 sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(texture.get(), nul lptr, 1263 sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(texture.get(), nul lptr,
1255 SkMatrix::I())); 1264 SkMatrix::I()));
1256 if (GrPixelConfigIsAlphaOnly(texture->config())) { 1265 if (GrPixelConfigIsAlphaOnly(texture->config())) {
1257 fp = GrFragmentProcessor::MulOutputByInputUnpremulColor(std::move(fp)); 1266 fp = GrFragmentProcessor::MulOutputByInputUnpremulColor(std::move(fp));
1258 } else { 1267 } else {
1259 fp = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp)); 1268 fp = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp));
1260 } 1269 }
1261 if (!SkPaintToGrPaintReplaceShader(this->context(), tmpUnfiltered, std::move (fp), 1270 if (!SkPaintToGrPaintReplaceShader(this->context(), tmpUnfiltered, std::move (fp),
1262 this->surfaceProps().isGammaCorrect(), &g rPaint)) { 1271 this->surfaceProps().isGammaCorrect(),
1272 fDrawContext->getColorSpace(), &grPaint)) {
1263 return; 1273 return;
1264 } 1274 }
1265 1275
1266 const SkIRect& subset = result->subset(); 1276 const SkIRect& subset = result->subset();
1267 1277
1268 fDrawContext->fillRectToRect(fClip, 1278 fDrawContext->fillRectToRect(fClip,
1269 grPaint, 1279 grPaint,
1270 SkMatrix::I(), 1280 SkMatrix::I(),
1271 SkRect::Make(SkIRect::MakeXYWH(left + offset.fX , top + offset.fY, 1281 SkRect::Make(SkIRect::MakeXYWH(left + offset.fX , top + offset.fY,
1272 subset.width(), subset.height())), 1282 subset.width(), subset.height())),
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 bool gammaCorrect = this->surfaceProps().isGammaCorrect(); 1550 bool gammaCorrect = this->surfaceProps().isGammaCorrect();
1541 SkSourceGammaTreatment gammaTreatment = gammaCorrect 1551 SkSourceGammaTreatment gammaTreatment = gammaCorrect
1542 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; 1552 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore;
1543 sk_sp<GrFragmentProcessor> fp( 1553 sk_sp<GrFragmentProcessor> fp(
1544 producer->createFragmentProcessor(SkMatrix::I(), 1554 producer->createFragmentProcessor(SkMatrix::I(),
1545 SkRect::MakeIWH(producer->width(), pro ducer->height()), 1555 SkRect::MakeIWH(producer->width(), pro ducer->height()),
1546 GrTextureProducer::kNo_FilterConstrain t, true, 1556 GrTextureProducer::kNo_FilterConstrain t, true,
1547 &kMode, fDrawContext->getColorSpace(), gammaTreatment)); 1557 &kMode, fDrawContext->getColorSpace(), gammaTreatment));
1548 GrPaint grPaint; 1558 GrPaint grPaint;
1549 if (!SkPaintToGrPaintWithTexture(this->context(), paint, *draw.fMatrix, std: :move(fp), 1559 if (!SkPaintToGrPaintWithTexture(this->context(), paint, *draw.fMatrix, std: :move(fp),
1550 producer->isAlphaOnly(), gammaCorrect, &grP aint)) { 1560 producer->isAlphaOnly(), gammaCorrect,
1561 fDrawContext->getColorSpace(), &grPaint)) {
1551 return; 1562 return;
1552 } 1563 }
1553 1564
1554 fDrawContext->drawImageNine(fClip, grPaint, *draw.fMatrix, producer->width() , 1565 fDrawContext->drawImageNine(fClip, grPaint, *draw.fMatrix, producer->width() ,
1555 producer->height(), center, dst); 1566 producer->height(), center, dst);
1556 } 1567 }
1557 1568
1558 void SkGpuDevice::drawImageNine(const SkDraw& draw, const SkImage* image, 1569 void SkGpuDevice::drawImageNine(const SkDraw& draw, const SkImage* image,
1559 const SkIRect& center, const SkRect& dst, const SkPaint& paint) { 1570 const SkIRect& center, const SkRect& dst, const SkPaint& paint) {
1560 ASSERT_SINGLE_OWNER 1571 ASSERT_SINGLE_OWNER
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1608 1619
1609 texs = nullptr; 1620 texs = nullptr;
1610 1621
1611 SkPaint copy(paint); 1622 SkPaint copy(paint);
1612 copy.setStyle(SkPaint::kStroke_Style); 1623 copy.setStyle(SkPaint::kStroke_Style);
1613 copy.setStrokeWidth(0); 1624 copy.setStrokeWidth(0);
1614 1625
1615 GrPaint grPaint; 1626 GrPaint grPaint;
1616 // we ignore the shader if texs is null. 1627 // we ignore the shader if texs is null.
1617 if (!SkPaintToGrPaintNoShader(this->context(), copy, 1628 if (!SkPaintToGrPaintNoShader(this->context(), copy,
1618 this->surfaceProps().isGammaCorrect(), &gr Paint)) { 1629 this->surfaceProps().isGammaCorrect(),
1630 fDrawContext->getColorSpace(), &grPaint)) {
1619 return; 1631 return;
1620 } 1632 }
1621 1633
1622 int triangleCount = 0; 1634 int triangleCount = 0;
1623 int n = (nullptr == indices) ? vertexCount : indexCount; 1635 int n = (nullptr == indices) ? vertexCount : indexCount;
1624 switch (vmode) { 1636 switch (vmode) {
1625 case SkCanvas::kTriangles_VertexMode: 1637 case SkCanvas::kTriangles_VertexMode:
1626 triangleCount = n / 3; 1638 triangleCount = n / 3;
1627 break; 1639 break;
1628 case SkCanvas::kTriangleStrip_VertexMode: 1640 case SkCanvas::kTriangleStrip_VertexMode:
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 SkXfermode::Mode colorMode; 1693 SkXfermode::Mode colorMode;
1682 if (xmode) { 1694 if (xmode) {
1683 if (!xmode->asMode(&colorMode)) { 1695 if (!xmode->asMode(&colorMode)) {
1684 return; 1696 return;
1685 } 1697 }
1686 } else { 1698 } else {
1687 colorMode = SkXfermode::kModulate_Mode; 1699 colorMode = SkXfermode::kModulate_Mode;
1688 } 1700 }
1689 if (!SkPaintToGrPaintWithXfermode(this->context(), paint, *draw.fMat rix, colorMode, 1701 if (!SkPaintToGrPaintWithXfermode(this->context(), paint, *draw.fMat rix, colorMode,
1690 false, this->surfaceProps().isGamm aCorrect(), 1702 false, this->surfaceProps().isGamm aCorrect(),
1691 &grPaint)) { 1703 fDrawContext->getColorSpace(), &gr Paint)) {
1692 return; 1704 return;
1693 } 1705 }
1694 } else { 1706 } else {
1695 // We have a shader, but no colors to blend it against. 1707 // We have a shader, but no colors to blend it against.
1696 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 1708 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
1697 this->surfaceProps().isGammaCorrect(), &grPain t)) { 1709 this->surfaceProps().isGammaCorrect(),
1710 fDrawContext->getColorSpace(), &grPaint)) {
1698 return; 1711 return;
1699 } 1712 }
1700 } 1713 }
1701 } else { 1714 } else {
1702 if (colors) { 1715 if (colors) {
1703 // We have colors, but either have no shader or no texture coords (w hich implies that 1716 // We have colors, but either have no shader or no texture coords (w hich implies that
1704 // we should ignore the shader). 1717 // we should ignore the shader).
1705 if (!SkPaintToGrPaintWithPrimitiveColor(this->context(), paint, 1718 if (!SkPaintToGrPaintWithPrimitiveColor(this->context(), paint,
1706 this->surfaceProps().isGamma Correct(), 1719 this->surfaceProps().isGamma Correct(),
1707 &grPaint)) { 1720 fDrawContext->getColorSpace( ), &grPaint)) {
1708 return; 1721 return;
1709 } 1722 }
1710 } else { 1723 } else {
1711 // No colors and no shaders. Just draw with the paint color. 1724 // No colors and no shaders. Just draw with the paint color.
1712 if (!SkPaintToGrPaintNoShader(this->context(), paint, 1725 if (!SkPaintToGrPaintNoShader(this->context(), paint,
1713 this->surfaceProps().isGammaCorrect(), &grPaint)) { 1726 this->surfaceProps().isGammaCorrect(),
1727 fDrawContext->getColorSpace(), &grPain t)) {
1714 return; 1728 return;
1715 } 1729 }
1716 } 1730 }
1717 } 1731 }
1718 1732
1719 fDrawContext->drawVertices(fClip, 1733 fDrawContext->drawVertices(fClip,
1720 grPaint, 1734 grPaint,
1721 *draw.fMatrix, 1735 *draw.fMatrix,
1722 primType, 1736 primType,
1723 vertexCount, 1737 vertexCount,
(...skipping 17 matching lines...) Expand all
1741 1755
1742 CHECK_SHOULD_DRAW(draw); 1756 CHECK_SHOULD_DRAW(draw);
1743 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext); 1757 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext);
1744 1758
1745 SkPaint p(paint); 1759 SkPaint p(paint);
1746 p.setShader(atlas->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_Ti leMode)); 1760 p.setShader(atlas->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_Ti leMode));
1747 1761
1748 GrPaint grPaint; 1762 GrPaint grPaint;
1749 if (colors) { 1763 if (colors) {
1750 if (!SkPaintToGrPaintWithXfermode(this->context(), p, *draw.fMatrix, mod e, true, 1764 if (!SkPaintToGrPaintWithXfermode(this->context(), p, *draw.fMatrix, mod e, true,
1751 this->surfaceProps().isGammaCorrect(), &grPaint)) { 1765 this->surfaceProps().isGammaCorrect(),
1766 fDrawContext->getColorSpace(), &grPain t)) {
1752 return; 1767 return;
1753 } 1768 }
1754 } else { 1769 } else {
1755 if (!SkPaintToGrPaint(this->context(), p, *draw.fMatrix, 1770 if (!SkPaintToGrPaint(this->context(), p, *draw.fMatrix,
1756 this->surfaceProps().isGammaCorrect(), &grPaint)) { 1771 this->surfaceProps().isGammaCorrect(),
1772 fDrawContext->getColorSpace(), &grPaint)) {
1757 return; 1773 return;
1758 } 1774 }
1759 } 1775 }
1760 1776
1761 SkDEBUGCODE(this->validate();) 1777 SkDEBUGCODE(this->validate();)
1762 fDrawContext->drawAtlas(fClip, grPaint, *draw.fMatrix, count, xform, texRect , colors); 1778 fDrawContext->drawAtlas(fClip, grPaint, *draw.fMatrix, count, xform, texRect , colors);
1763 } 1779 }
1764 1780
1765 /////////////////////////////////////////////////////////////////////////////// 1781 ///////////////////////////////////////////////////////////////////////////////
1766 1782
1767 void SkGpuDevice::drawText(const SkDraw& draw, const void* text, 1783 void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
1768 size_t byteLength, SkScalar x, SkScalar y, 1784 size_t byteLength, SkScalar x, SkScalar y,
1769 const SkPaint& paint) { 1785 const SkPaint& paint) {
1770 ASSERT_SINGLE_OWNER 1786 ASSERT_SINGLE_OWNER
1771 CHECK_SHOULD_DRAW(draw); 1787 CHECK_SHOULD_DRAW(draw);
1772 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext); 1788 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext);
1773 1789
1774 GrPaint grPaint; 1790 GrPaint grPaint;
1775 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 1791 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
1776 this->surfaceProps().isGammaCorrect(), &grPaint)) { 1792 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
1793 &grPaint)) {
1777 return; 1794 return;
1778 } 1795 }
1779 1796
1780 SkDEBUGCODE(this->validate();) 1797 SkDEBUGCODE(this->validate();)
1781 1798
1782 fDrawContext->drawText(fClip, grPaint, paint, *draw.fMatrix, 1799 fDrawContext->drawText(fClip, grPaint, paint, *draw.fMatrix,
1783 (const char *)text, byteLength, x, y, draw.fRC->getBo unds()); 1800 (const char *)text, byteLength, x, y, draw.fRC->getBo unds());
1784 } 1801 }
1785 1802
1786 void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL ength, 1803 void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL ength,
1787 const SkScalar pos[], int scalarsPerPos, 1804 const SkScalar pos[], int scalarsPerPos,
1788 const SkPoint& offset, const SkPaint& paint) { 1805 const SkPoint& offset, const SkPaint& paint) {
1789 ASSERT_SINGLE_OWNER 1806 ASSERT_SINGLE_OWNER
1790 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPosText", fContext); 1807 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPosText", fContext);
1791 CHECK_SHOULD_DRAW(draw); 1808 CHECK_SHOULD_DRAW(draw);
1792 1809
1793 GrPaint grPaint; 1810 GrPaint grPaint;
1794 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 1811 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix,
1795 this->surfaceProps().isGammaCorrect(), &grPaint)) { 1812 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
1813 &grPaint)) {
1796 return; 1814 return;
1797 } 1815 }
1798 1816
1799 SkDEBUGCODE(this->validate();) 1817 SkDEBUGCODE(this->validate();)
1800 1818
1801 fDrawContext->drawPosText(fClip, grPaint, paint, *draw.fMatrix, 1819 fDrawContext->drawPosText(fClip, grPaint, paint, *draw.fMatrix,
1802 (const char *)text, byteLength, pos, scalarsPerPos , offset, 1820 (const char *)text, byteLength, pos, scalarsPerPos , offset,
1803 draw.fRC->getBounds()); 1821 draw.fRC->getBounds());
1804 } 1822 }
1805 1823
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1870 } 1888 }
1871 1889
1872 SkImageFilterCache* SkGpuDevice::getImageFilterCache() { 1890 SkImageFilterCache* SkGpuDevice::getImageFilterCache() {
1873 ASSERT_SINGLE_OWNER 1891 ASSERT_SINGLE_OWNER
1874 // We always return a transient cache, so it is freed after each 1892 // We always return a transient cache, so it is freed after each
1875 // filter traversal. 1893 // filter traversal.
1876 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize); 1894 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize);
1877 } 1895 }
1878 1896
1879 #endif 1897 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrBlurUtils.cpp ('k') | src/gpu/SkGpuDevice_drawTexture.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698