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

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

Issue 2182603003: Just pass the draw context to paint conversion (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase Created 4 years, 5 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
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 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 } 302 }
303 303
304 /////////////////////////////////////////////////////////////////////////////// 304 ///////////////////////////////////////////////////////////////////////////////
305 305
306 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) { 306 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) {
307 ASSERT_SINGLE_OWNER 307 ASSERT_SINGLE_OWNER
308 CHECK_SHOULD_DRAW(draw); 308 CHECK_SHOULD_DRAW(draw);
309 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPaint", fContext); 309 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPaint", fContext);
310 310
311 GrPaint grPaint; 311 GrPaint grPaint;
312 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 312 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
313 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
314 &grPaint)) {
315 return; 313 return;
316 } 314 }
317 315
318 fDrawContext->drawPaint(fClip, grPaint, *draw.fMatrix); 316 fDrawContext->drawPaint(fClip, grPaint, *draw.fMatrix);
319 } 317 }
320 318
321 // must be in SkCanvas::PointMode order 319 // must be in SkCanvas::PointMode order
322 static const GrPrimitiveType gPointMode2PrimtiveType[] = { 320 static const GrPrimitiveType gPointMode2PrimtiveType[] = {
323 kPoints_GrPrimitiveType, 321 kPoints_GrPrimitiveType,
324 kLines_GrPrimitiveType, 322 kLines_GrPrimitiveType,
(...skipping 29 matching lines...) Expand all
354 CHECK_SHOULD_DRAW(draw); 352 CHECK_SHOULD_DRAW(draw);
355 353
356 SkScalar width = paint.getStrokeWidth(); 354 SkScalar width = paint.getStrokeWidth();
357 if (width < 0) { 355 if (width < 0) {
358 return; 356 return;
359 } 357 }
360 358
361 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) { 359 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) {
362 GrStyle style(paint, SkPaint::kStroke_Style); 360 GrStyle style(paint, SkPaint::kStroke_Style);
363 GrPaint grPaint; 361 GrPaint grPaint;
364 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 362 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw. fMatrix,
365 this->surfaceProps().isGammaCorrect(), fDrawContex t->getColorSpace(),
366 &grPaint)) { 363 &grPaint)) {
367 return; 364 return;
368 } 365 }
369 SkPath path; 366 SkPath path;
370 path.setIsVolatile(true); 367 path.setIsVolatile(true);
371 path.moveTo(pts[0]); 368 path.moveTo(pts[0]);
372 path.lineTo(pts[1]); 369 path.lineTo(pts[1]);
373 fDrawContext->drawPath(fClip, grPaint, *draw.fMatrix, path, style); 370 fDrawContext->drawPath(fClip, grPaint, *draw.fMatrix, path, style);
374 return; 371 return;
375 } 372 }
376 373
377 // we only handle non-antialiased hairlines and paints without path effects or mask filters, 374 // we only handle non-antialiased hairlines and paints without path effects or mask filters,
378 // else we let the SkDraw call our drawPath() 375 // else we let the SkDraw call our drawPath()
379 if (width > 0 || paint.getPathEffect() || paint.getMaskFilter() || 376 if (width > 0 || paint.getPathEffect() || paint.getMaskFilter() ||
380 (paint.isAntiAlias() && needs_antialiasing(mode, count, pts))) { 377 (paint.isAntiAlias() && needs_antialiasing(mode, count, pts))) {
381 draw.drawPoints(mode, count, pts, paint, true); 378 draw.drawPoints(mode, count, pts, paint, true);
382 return; 379 return;
383 } 380 }
384 381
385 GrPaint grPaint; 382 GrPaint grPaint;
386 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 383 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
387 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
388 &grPaint)) {
389 return; 384 return;
390 } 385 }
391 386
392 fDrawContext->drawVertices(fClip, 387 fDrawContext->drawVertices(fClip,
393 grPaint, 388 grPaint,
394 *draw.fMatrix, 389 *draw.fMatrix,
395 gPointMode2PrimtiveType[mode], 390 gPointMode2PrimtiveType[mode],
396 SkToS32(count), 391 SkToS32(count),
397 (SkPoint*)pts, 392 (SkPoint*)pts,
398 nullptr, 393 nullptr,
(...skipping 16 matching lines...) Expand all
415 path.setIsVolatile(true); 410 path.setIsVolatile(true);
416 path.addRect(rect); 411 path.addRect(rect);
417 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext.get(), 412 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext.get(),
418 fClip, path, paint, 413 fClip, path, paint,
419 *draw.fMatrix, nullptr, 414 *draw.fMatrix, nullptr,
420 draw.fRC->getBounds(), true); 415 draw.fRC->getBounds(), true);
421 return; 416 return;
422 } 417 }
423 418
424 GrPaint grPaint; 419 GrPaint grPaint;
425 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 420 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
426 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
427 &grPaint)) {
428 return; 421 return;
429 } 422 }
430 423
431 GrStyle style(paint); 424 GrStyle style(paint);
432 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &style); 425 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &style);
433 } 426 }
434 427
435 /////////////////////////////////////////////////////////////////////////////// 428 ///////////////////////////////////////////////////////////////////////////////
436 429
437 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect, 430 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect,
438 const SkPaint& paint) { 431 const SkPaint& paint) {
439 ASSERT_SINGLE_OWNER 432 ASSERT_SINGLE_OWNER
440 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext); 433 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext);
441 CHECK_SHOULD_DRAW(draw); 434 CHECK_SHOULD_DRAW(draw);
442 435
443 GrPaint grPaint; 436 GrPaint grPaint;
444 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 437 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
445 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
446 &grPaint)) {
447 return; 438 return;
448 } 439 }
449 440
450 GrStyle style(paint); 441 GrStyle style(paint);
451 if (paint.getMaskFilter()) { 442 if (paint.getMaskFilter()) {
452 // try to hit the fast path for drawing filtered round rects 443 // try to hit the fast path for drawing filtered round rects
453 444
454 SkRRect devRRect; 445 SkRRect devRRect;
455 if (rect.transform(*draw.fMatrix, &devRRect)) { 446 if (rect.transform(*draw.fMatrix, &devRRect)) {
456 if (devRRect.allCornersCircular()) { 447 if (devRRect.allCornersCircular()) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 } 502 }
512 503
513 if (inner.isEmpty()) { 504 if (inner.isEmpty()) {
514 return this->drawRRect(draw, outer, paint); 505 return this->drawRRect(draw, outer, paint);
515 } 506 }
516 507
517 SkStrokeRec stroke(paint); 508 SkStrokeRec stroke(paint);
518 509
519 if (stroke.isFillStyle() && !paint.getMaskFilter() && !paint.getPathEffect() ) { 510 if (stroke.isFillStyle() && !paint.getMaskFilter() && !paint.getPathEffect() ) {
520 GrPaint grPaint; 511 GrPaint grPaint;
521 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 512 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw. fMatrix,
522 this->surfaceProps().isGammaCorrect(), fDrawContex t->getColorSpace(),
523 &grPaint)) { 513 &grPaint)) {
524 return; 514 return;
525 } 515 }
526 516
527 fDrawContext->drawDRRect(fClip, grPaint, *draw.fMatrix, outer, inner); 517 fDrawContext->drawDRRect(fClip, grPaint, *draw.fMatrix, outer, inner);
528 return; 518 return;
529 } 519 }
530 520
531 SkPath path; 521 SkPath path;
532 path.setIsVolatile(true); 522 path.setIsVolatile(true);
(...skipping 24 matching lines...) Expand all
557 return; 547 return;
558 } 548 }
559 549
560 if (paint.getMaskFilter()) { 550 if (paint.getMaskFilter()) {
561 // The RRect path can handle special case blurring 551 // The RRect path can handle special case blurring
562 SkRRect rr = SkRRect::MakeOval(oval); 552 SkRRect rr = SkRRect::MakeOval(oval);
563 return this->drawRRect(draw, rr, paint); 553 return this->drawRRect(draw, rr, paint);
564 } 554 }
565 555
566 GrPaint grPaint; 556 GrPaint grPaint;
567 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 557 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
568 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
569 &grPaint)) {
570 return; 558 return;
571 } 559 }
572 560
573 fDrawContext->drawOval(fClip, grPaint, *draw.fMatrix, oval, GrStyle(paint)); 561 fDrawContext->drawOval(fClip, grPaint, *draw.fMatrix, oval, GrStyle(paint));
574 } 562 }
575 563
576 #include "SkMaskFilter.h" 564 #include "SkMaskFilter.h"
577 565
578 /////////////////////////////////////////////////////////////////////////////// 566 ///////////////////////////////////////////////////////////////////////////////
579 void SkGpuDevice::drawStrokedLine(const SkPoint points[2], 567 void SkGpuDevice::drawStrokedLine(const SkPoint points[2],
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 SkRect rect = SkRect::MakeLTRB(mid.fX-halfWidth, mid.fY - 0.5f*length - xtra Length, 603 SkRect rect = SkRect::MakeLTRB(mid.fX-halfWidth, mid.fY - 0.5f*length - xtra Length,
616 mid.fX+halfWidth, mid.fY + 0.5f*length + xtra Length); 604 mid.fX+halfWidth, mid.fY + 0.5f*length + xtra Length);
617 SkMatrix m; 605 SkMatrix m;
618 m.setSinCos(v.fX, -v.fY, mid.fX, mid.fY); 606 m.setSinCos(v.fX, -v.fY, mid.fX, mid.fY);
619 607
620 SkMatrix local = m; 608 SkMatrix local = m;
621 609
622 m.postConcat(*draw.fMatrix); 610 m.postConcat(*draw.fMatrix);
623 611
624 GrPaint grPaint; 612 GrPaint grPaint;
625 if (!SkPaintToGrPaint(this->context(), newPaint, m, 613 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), newPaint, m, &grP aint)) {
626 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
627 &grPaint)) {
628 return; 614 return;
629 } 615 }
630 616
631 fDrawContext->fillRectWithLocalMatrix(fClip, grPaint, m, rect, local); 617 fDrawContext->fillRectWithLocalMatrix(fClip, grPaint, m, rect, local);
632 } 618 }
633 619
634 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, 620 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath,
635 const SkPaint& paint, const SkMatrix* prePathMatrix, 621 const SkPaint& paint, const SkMatrix* prePathMatrix,
636 bool pathIsMutable) { 622 bool pathIsMutable) {
637 ASSERT_SINGLE_OWNER 623 ASSERT_SINGLE_OWNER
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 SkCanvas::SrcRectConstraint constraint, 1015 SkCanvas::SrcRectConstraint constraint,
1030 bool bicubic, 1016 bool bicubic,
1031 bool needsTextureDomain) { 1017 bool needsTextureDomain) {
1032 // We should have already handled bitmaps larger than the max texture size. 1018 // We should have already handled bitmaps larger than the max texture size.
1033 SkASSERT(bitmap.width() <= fContext->caps()->maxTextureSize() && 1019 SkASSERT(bitmap.width() <= fContext->caps()->maxTextureSize() &&
1034 bitmap.height() <= fContext->caps()->maxTextureSize()); 1020 bitmap.height() <= fContext->caps()->maxTextureSize());
1035 // We should be respecting the max tile size by the time we get here. 1021 // We should be respecting the max tile size by the time we get here.
1036 SkASSERT(bitmap.width() <= fContext->caps()->maxTileSize() && 1022 SkASSERT(bitmap.width() <= fContext->caps()->maxTileSize() &&
1037 bitmap.height() <= fContext->caps()->maxTileSize()); 1023 bitmap.height() <= fContext->caps()->maxTileSize());
1038 1024
1039 SkSourceGammaTreatment gammaTreatment = this->surfaceProps().isGammaCorrect( ) 1025 sk_sp<GrTexture> texture = GrMakeCachedBitmapTexture(fContext, bitmap, param s,
1040 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; 1026 fDrawContext->sourceGam maTreatment());
1041 sk_sp<GrTexture> texture = GrMakeCachedBitmapTexture(fContext, bitmap, param s, gammaTreatment);
1042 if (nullptr == texture) { 1027 if (nullptr == texture) {
1043 return; 1028 return;
1044 } 1029 }
1045 1030
1046 sk_sp<GrColorSpaceXform> colorSpaceXform = 1031 sk_sp<GrColorSpaceXform> colorSpaceXform =
1047 GrColorSpaceXform::Make(bitmap.colorSpace(), fDrawContext->getColorSpace ()); 1032 GrColorSpaceXform::Make(bitmap.colorSpace(), fDrawContext->getColorSpace ());
1048 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() }; 1033 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() };
1049 SkRect paintRect; 1034 SkRect paintRect;
1050 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width())); 1035 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width()));
1051 SkScalar hInv = SkScalarInvert(SkIntToScalar(texture->height())); 1036 SkScalar hInv = SkScalarInvert(SkIntToScalar(texture->height()));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 } 1083 }
1099 } else if (bicubic) { 1084 } else if (bicubic) {
1100 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode()); 1085 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode());
1101 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil eModeY() }; 1086 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil eModeY() };
1102 fp = GrBicubicEffect::Make(texture.get(), std::move(colorSpaceXform), te xMatrix, tileModes); 1087 fp = GrBicubicEffect::Make(texture.get(), std::move(colorSpaceXform), te xMatrix, tileModes);
1103 } else { 1088 } else {
1104 fp = GrSimpleTextureEffect::Make(texture.get(), std::move(colorSpaceXfor m), texMatrix, params); 1089 fp = GrSimpleTextureEffect::Make(texture.get(), std::move(colorSpaceXfor m), texMatrix, params);
1105 } 1090 }
1106 1091
1107 GrPaint grPaint; 1092 GrPaint grPaint;
1108 if (!SkPaintToGrPaintWithTexture(this->context(), paint, viewMatrix, std::mo ve(fp), 1093 if (!SkPaintToGrPaintWithTexture(this->context(), fDrawContext.get(), paint, viewMatrix,
1109 kAlpha_8_SkColorType == bitmap.colorType(), 1094 std::move(fp), kAlpha_8_SkColorType == bitm ap.colorType(),
1110 this->surfaceProps().isGammaCorrect(), 1095 &grPaint)) {
1111 fDrawContext->getColorSpace(), &grPaint)) {
1112 return; 1096 return;
1113 } 1097 }
1114 1098
1115 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) { 1099 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) {
1116 // We don't have local coords in this case and have previously set the t ransform 1100 // We don't have local coords in this case and have previously set the t ransform
1117 // matrices directly on the texture processor. 1101 // matrices directly on the texture processor.
1118 fDrawContext->drawRect(fClip, grPaint, viewMatrix, dstRect); 1102 fDrawContext->drawRect(fClip, grPaint, viewMatrix, dstRect);
1119 } else { 1103 } else {
1120 fDrawContext->fillRectToRect(fClip, grPaint, viewMatrix, dstRect, paintR ect); 1104 fDrawContext->fillRectToRect(fClip, grPaint, viewMatrix, dstRect, paintR ect);
1121 } 1105 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 tmpUnfiltered.setImageFilter(nullptr); 1175 tmpUnfiltered.setImageFilter(nullptr);
1192 1176
1193 GrPaint grPaint; 1177 GrPaint grPaint;
1194 sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(texture.get(), nul lptr, 1178 sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(texture.get(), nul lptr,
1195 SkMatrix::I())); 1179 SkMatrix::I()));
1196 if (GrPixelConfigIsAlphaOnly(texture->config())) { 1180 if (GrPixelConfigIsAlphaOnly(texture->config())) {
1197 fp = GrFragmentProcessor::MulOutputByInputUnpremulColor(std::move(fp)); 1181 fp = GrFragmentProcessor::MulOutputByInputUnpremulColor(std::move(fp));
1198 } else { 1182 } else {
1199 fp = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp)); 1183 fp = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp));
1200 } 1184 }
1201 if (!SkPaintToGrPaintReplaceShader(this->context(), tmpUnfiltered, std::move (fp), 1185 if (!SkPaintToGrPaintReplaceShader(this->context(), fDrawContext.get(), tmpU nfiltered,
1202 this->surfaceProps().isGammaCorrect(), 1186 std::move(fp), &grPaint)) {
1203 fDrawContext->getColorSpace(), &grPaint)) {
1204 return; 1187 return;
1205 } 1188 }
1206 1189
1207 const SkIRect& subset = result->subset(); 1190 const SkIRect& subset = result->subset();
1208 1191
1209 fDrawContext->fillRectToRect(fClip, 1192 fDrawContext->fillRectToRect(fClip,
1210 grPaint, 1193 grPaint,
1211 SkMatrix::I(), 1194 SkMatrix::I(),
1212 SkRect::Make(SkIRect::MakeXYWH(left + offset.fX , top + offset.fY, 1195 SkRect::Make(SkIRect::MakeXYWH(left + offset.fX , top + offset.fY,
1213 subset.width(), subset.height())), 1196 subset.width(), subset.height())),
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 1447
1465 SkRect srcR, dstR; 1448 SkRect srcR, dstR;
1466 while (iter.next(&srcR, &dstR)) { 1449 while (iter.next(&srcR, &dstR)) {
1467 this->drawTextureProducer(producer, &srcR, &dstR, SkCanvas::kStrict_ SrcRectConstraint, 1450 this->drawTextureProducer(producer, &srcR, &dstR, SkCanvas::kStrict_ SrcRectConstraint,
1468 *draw.fMatrix, fClip, paint); 1451 *draw.fMatrix, fClip, paint);
1469 } 1452 }
1470 return; 1453 return;
1471 } 1454 }
1472 1455
1473 static const GrTextureParams::FilterMode kMode = GrTextureParams::kNone_Filt erMode; 1456 static const GrTextureParams::FilterMode kMode = GrTextureParams::kNone_Filt erMode;
1474 bool gammaCorrect = this->surfaceProps().isGammaCorrect();
1475 SkSourceGammaTreatment gammaTreatment = gammaCorrect
1476 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore;
1477 sk_sp<GrFragmentProcessor> fp( 1457 sk_sp<GrFragmentProcessor> fp(
1478 producer->createFragmentProcessor(SkMatrix::I(), 1458 producer->createFragmentProcessor(SkMatrix::I(),
1479 SkRect::MakeIWH(producer->width(), pro ducer->height()), 1459 SkRect::MakeIWH(producer->width(), pro ducer->height()),
1480 GrTextureProducer::kNo_FilterConstrain t, true, 1460 GrTextureProducer::kNo_FilterConstrain t, true,
1481 &kMode, fDrawContext->getColorSpace(), gammaTreatment)); 1461 &kMode, fDrawContext->getColorSpace(),
1462 fDrawContext->sourceGammaTreatment())) ;
1482 GrPaint grPaint; 1463 GrPaint grPaint;
1483 if (!SkPaintToGrPaintWithTexture(this->context(), paint, *draw.fMatrix, std: :move(fp), 1464 if (!SkPaintToGrPaintWithTexture(this->context(), fDrawContext.get(), paint, *draw.fMatrix,
1484 producer->isAlphaOnly(), gammaCorrect, 1465 std::move(fp), producer->isAlphaOnly(), &gr Paint)) {
1485 fDrawContext->getColorSpace(), &grPaint)) {
1486 return; 1466 return;
1487 } 1467 }
1488 1468
1489 fDrawContext->drawImageNine(fClip, grPaint, *draw.fMatrix, producer->width() , 1469 fDrawContext->drawImageNine(fClip, grPaint, *draw.fMatrix, producer->width() ,
1490 producer->height(), center, dst); 1470 producer->height(), center, dst);
1491 } 1471 }
1492 1472
1493 void SkGpuDevice::drawImageNine(const SkDraw& draw, const SkImage* image, 1473 void SkGpuDevice::drawImageNine(const SkDraw& draw, const SkImage* image,
1494 const SkIRect& center, const SkRect& dst, const SkPaint& paint) { 1474 const SkIRect& center, const SkRect& dst, const SkPaint& paint) {
1495 ASSERT_SINGLE_OWNER 1475 ASSERT_SINGLE_OWNER
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 if ((nullptr == texs || nullptr == paint.getShader()) && nullptr == colors) { 1517 if ((nullptr == texs || nullptr == paint.getShader()) && nullptr == colors) {
1538 1518
1539 texs = nullptr; 1519 texs = nullptr;
1540 1520
1541 SkPaint copy(paint); 1521 SkPaint copy(paint);
1542 copy.setStyle(SkPaint::kStroke_Style); 1522 copy.setStyle(SkPaint::kStroke_Style);
1543 copy.setStrokeWidth(0); 1523 copy.setStrokeWidth(0);
1544 1524
1545 GrPaint grPaint; 1525 GrPaint grPaint;
1546 // we ignore the shader if texs is null. 1526 // we ignore the shader if texs is null.
1547 if (!SkPaintToGrPaintNoShader(this->context(), copy, 1527 if (!SkPaintToGrPaintNoShader(this->context(), fDrawContext.get(), copy, &grPaint)) {
1548 this->surfaceProps().isGammaCorrect(),
1549 fDrawContext->getColorSpace(), &grPaint)) {
1550 return; 1528 return;
1551 } 1529 }
1552 1530
1553 int triangleCount = 0; 1531 int triangleCount = 0;
1554 int n = (nullptr == indices) ? vertexCount : indexCount; 1532 int n = (nullptr == indices) ? vertexCount : indexCount;
1555 switch (vmode) { 1533 switch (vmode) {
1556 case SkCanvas::kTriangles_VertexMode: 1534 case SkCanvas::kTriangles_VertexMode:
1557 triangleCount = n / 3; 1535 triangleCount = n / 3;
1558 break; 1536 break;
1559 case SkCanvas::kTriangleStrip_VertexMode: 1537 case SkCanvas::kTriangleStrip_VertexMode:
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1610 // When there are texs and colors the shader and colors are combined using xmode. A null 1588 // When there are texs and colors the shader and colors are combined using xmode. A null
1611 // xmode is defined to mean modulate. 1589 // xmode is defined to mean modulate.
1612 SkXfermode::Mode colorMode; 1590 SkXfermode::Mode colorMode;
1613 if (xmode) { 1591 if (xmode) {
1614 if (!xmode->asMode(&colorMode)) { 1592 if (!xmode->asMode(&colorMode)) {
1615 return; 1593 return;
1616 } 1594 }
1617 } else { 1595 } else {
1618 colorMode = SkXfermode::kModulate_Mode; 1596 colorMode = SkXfermode::kModulate_Mode;
1619 } 1597 }
1620 if (!SkPaintToGrPaintWithXfermode(this->context(), paint, *draw.fMat rix, colorMode, 1598 if (!SkPaintToGrPaintWithXfermode(this->context(), fDrawContext.get( ), paint,
1621 false, this->surfaceProps().isGamm aCorrect(), 1599 *draw.fMatrix, colorMode, false, & grPaint)) {
1622 fDrawContext->getColorSpace(), &gr Paint)) {
1623 return; 1600 return;
1624 } 1601 }
1625 } else { 1602 } else {
1626 // We have a shader, but no colors to blend it against. 1603 // We have a shader, but no colors to blend it against.
1627 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 1604 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *d raw.fMatrix,
1628 this->surfaceProps().isGammaCorrect(), 1605 &grPaint)) {
1629 fDrawContext->getColorSpace(), &grPaint)) {
1630 return; 1606 return;
1631 } 1607 }
1632 } 1608 }
1633 } else { 1609 } else {
1634 if (colors) { 1610 if (colors) {
1635 // We have colors, but either have no shader or no texture coords (w hich implies that 1611 // We have colors, but either have no shader or no texture coords (w hich implies that
1636 // we should ignore the shader). 1612 // we should ignore the shader).
1637 if (!SkPaintToGrPaintWithPrimitiveColor(this->context(), paint, 1613 if (!SkPaintToGrPaintWithPrimitiveColor(this->context(), fDrawContex t.get(), paint,
1638 this->surfaceProps().isGamma Correct(), 1614 &grPaint)) {
1639 fDrawContext->getColorSpace( ), &grPaint)) {
1640 return; 1615 return;
1641 } 1616 }
1642 } else { 1617 } else {
1643 // No colors and no shaders. Just draw with the paint color. 1618 // No colors and no shaders. Just draw with the paint color.
1644 if (!SkPaintToGrPaintNoShader(this->context(), paint, 1619 if (!SkPaintToGrPaintNoShader(this->context(), fDrawContext.get(), p aint, &grPaint)) {
1645 this->surfaceProps().isGammaCorrect(),
1646 fDrawContext->getColorSpace(), &grPain t)) {
1647 return; 1620 return;
1648 } 1621 }
1649 } 1622 }
1650 } 1623 }
1651 1624
1652 fDrawContext->drawVertices(fClip, 1625 fDrawContext->drawVertices(fClip,
1653 grPaint, 1626 grPaint,
1654 *draw.fMatrix, 1627 *draw.fMatrix,
1655 primType, 1628 primType,
1656 vertexCount, 1629 vertexCount,
(...skipping 16 matching lines...) Expand all
1673 } 1646 }
1674 1647
1675 CHECK_SHOULD_DRAW(draw); 1648 CHECK_SHOULD_DRAW(draw);
1676 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext); 1649 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext);
1677 1650
1678 SkPaint p(paint); 1651 SkPaint p(paint);
1679 p.setShader(atlas->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_Ti leMode)); 1652 p.setShader(atlas->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_Ti leMode));
1680 1653
1681 GrPaint grPaint; 1654 GrPaint grPaint;
1682 if (colors) { 1655 if (colors) {
1683 if (!SkPaintToGrPaintWithXfermode(this->context(), p, *draw.fMatrix, mod e, true, 1656 if (!SkPaintToGrPaintWithXfermode(this->context(), fDrawContext.get(), p , *draw.fMatrix,
1684 this->surfaceProps().isGammaCorrect(), 1657 mode, true, &grPaint)) {
1685 fDrawContext->getColorSpace(), &grPain t)) {
1686 return; 1658 return;
1687 } 1659 }
1688 } else { 1660 } else {
1689 if (!SkPaintToGrPaint(this->context(), p, *draw.fMatrix, 1661 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), p, *draw.fMat rix, &grPaint)) {
1690 this->surfaceProps().isGammaCorrect(),
1691 fDrawContext->getColorSpace(), &grPaint)) {
1692 return; 1662 return;
1693 } 1663 }
1694 } 1664 }
1695 1665
1696 SkDEBUGCODE(this->validate();) 1666 SkDEBUGCODE(this->validate();)
1697 fDrawContext->drawAtlas(fClip, grPaint, *draw.fMatrix, count, xform, texRect , colors); 1667 fDrawContext->drawAtlas(fClip, grPaint, *draw.fMatrix, count, xform, texRect , colors);
1698 } 1668 }
1699 1669
1700 /////////////////////////////////////////////////////////////////////////////// 1670 ///////////////////////////////////////////////////////////////////////////////
1701 1671
1702 void SkGpuDevice::drawText(const SkDraw& draw, const void* text, 1672 void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
1703 size_t byteLength, SkScalar x, SkScalar y, 1673 size_t byteLength, SkScalar x, SkScalar y,
1704 const SkPaint& paint) { 1674 const SkPaint& paint) {
1705 ASSERT_SINGLE_OWNER 1675 ASSERT_SINGLE_OWNER
1706 CHECK_SHOULD_DRAW(draw); 1676 CHECK_SHOULD_DRAW(draw);
1707 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext); 1677 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawText", fContext);
1708 1678
1709 GrPaint grPaint; 1679 GrPaint grPaint;
1710 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 1680 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
1711 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
1712 &grPaint)) {
1713 return; 1681 return;
1714 } 1682 }
1715 1683
1716 SkDEBUGCODE(this->validate();) 1684 SkDEBUGCODE(this->validate();)
1717 1685
1718 fDrawContext->drawText(fClip, grPaint, paint, *draw.fMatrix, 1686 fDrawContext->drawText(fClip, grPaint, paint, *draw.fMatrix,
1719 (const char *)text, byteLength, x, y, draw.fRC->getBo unds()); 1687 (const char *)text, byteLength, x, y, draw.fRC->getBo unds());
1720 } 1688 }
1721 1689
1722 void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL ength, 1690 void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL ength,
1723 const SkScalar pos[], int scalarsPerPos, 1691 const SkScalar pos[], int scalarsPerPos,
1724 const SkPoint& offset, const SkPaint& paint) { 1692 const SkPoint& offset, const SkPaint& paint) {
1725 ASSERT_SINGLE_OWNER 1693 ASSERT_SINGLE_OWNER
1726 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPosText", fContext); 1694 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPosText", fContext);
1727 CHECK_SHOULD_DRAW(draw); 1695 CHECK_SHOULD_DRAW(draw);
1728 1696
1729 GrPaint grPaint; 1697 GrPaint grPaint;
1730 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, 1698 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat rix, &grPaint)) {
1731 this->surfaceProps().isGammaCorrect(), fDrawContext->g etColorSpace(),
1732 &grPaint)) {
1733 return; 1699 return;
1734 } 1700 }
1735 1701
1736 SkDEBUGCODE(this->validate();) 1702 SkDEBUGCODE(this->validate();)
1737 1703
1738 fDrawContext->drawPosText(fClip, grPaint, paint, *draw.fMatrix, 1704 fDrawContext->drawPosText(fClip, grPaint, paint, *draw.fMatrix,
1739 (const char *)text, byteLength, pos, scalarsPerPos , offset, 1705 (const char *)text, byteLength, pos, scalarsPerPos , offset,
1740 draw.fRC->getBounds()); 1706 draw.fRC->getBounds());
1741 } 1707 }
1742 1708
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 } 1773 }
1808 1774
1809 SkImageFilterCache* SkGpuDevice::getImageFilterCache() { 1775 SkImageFilterCache* SkGpuDevice::getImageFilterCache() {
1810 ASSERT_SINGLE_OWNER 1776 ASSERT_SINGLE_OWNER
1811 // We always return a transient cache, so it is freed after each 1777 // We always return a transient cache, so it is freed after each
1812 // filter traversal. 1778 // filter traversal.
1813 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize); 1779 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize);
1814 } 1780 }
1815 1781
1816 #endif 1782 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698