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

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

Issue 1404823005: GrDrawContext now holds GrRenderTarget pointer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix overlength line Created 5 years, 2 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/GrYUVProvider.cpp ('k') | src/gpu/SkGr.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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 fOpaque = SkToBool(flags & kIsOpaque_Flag); 191 fOpaque = SkToBool(flags & kIsOpaque_Flag);
192 192
193 fRenderTarget = SkRef(rt); 193 fRenderTarget = SkRef(rt);
194 194
195 SkAlphaType at = fOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; 195 SkAlphaType at = fOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
196 SkImageInfo info = rt->surfacePriv().info(at).makeWH(width, height); 196 SkImageInfo info = rt->surfacePriv().info(at).makeWH(width, height);
197 SkPixelRef* pr = new SkGrPixelRef(info, rt); 197 SkPixelRef* pr = new SkGrPixelRef(info, rt);
198 fLegacyBitmap.setInfo(info); 198 fLegacyBitmap.setInfo(info);
199 fLegacyBitmap.setPixelRef(pr)->unref(); 199 fLegacyBitmap.setPixelRef(pr)->unref();
200 200
201 fDrawContext.reset(fContext->drawContext(&this->surfaceProps())); 201 fDrawContext.reset(fContext->drawContext(rt, &this->surfaceProps()));
202 } 202 }
203 203
204 GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B udgeted budgeted, 204 GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B udgeted budgeted,
205 const SkImageInfo& origInfo, int sampleCount) { 205 const SkImageInfo& origInfo, int sampleCount) {
206 if (kUnknown_SkColorType == origInfo.colorType() || 206 if (kUnknown_SkColorType == origInfo.colorType() ||
207 origInfo.width() < 0 || origInfo.height() < 0) { 207 origInfo.width() < 0 || origInfo.height() < 0) {
208 return nullptr; 208 return nullptr;
209 } 209 }
210 210
211 if (!context) { 211 if (!context) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 329
330 GrRenderTarget* SkGpuDevice::accessRenderTarget() { 330 GrRenderTarget* SkGpuDevice::accessRenderTarget() {
331 DO_DEFERRED_CLEAR(); 331 DO_DEFERRED_CLEAR();
332 return fRenderTarget; 332 return fRenderTarget;
333 } 333 }
334 334
335 void SkGpuDevice::clearAll() { 335 void SkGpuDevice::clearAll() {
336 GrColor color = 0; 336 GrColor color = 0;
337 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::clearAll", fContext); 337 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::clearAll", fContext);
338 SkIRect rect = SkIRect::MakeWH(this->width(), this->height()); 338 SkIRect rect = SkIRect::MakeWH(this->width(), this->height());
339 fDrawContext->clear(fRenderTarget, &rect, color, true); 339 fDrawContext->clear(&rect, color, true);
340 fNeedClear = false; 340 fNeedClear = false;
341 } 341 }
342 342
343 void SkGpuDevice::replaceRenderTarget(bool shouldRetainContent) { 343 void SkGpuDevice::replaceRenderTarget(bool shouldRetainContent) {
344 // Caller must have accessed the render target, because it knows the rt must be replaced. 344 // Caller must have accessed the render target, because it knows the rt must be replaced.
345 SkASSERT(!fNeedClear); 345 SkASSERT(!fNeedClear);
346 346
347 SkSurface::Budgeted budgeted = 347 SkSurface::Budgeted budgeted =
348 fRenderTarget->resourcePriv().isBudgeted() ? SkSurface::kYes_Budgete d 348 fRenderTarget->resourcePriv().isBudgeted() ? SkSurface::kYes_Budgete d
349 : SkSurface::kNo_Budgeted ; 349 : SkSurface::kNo_Budgeted ;
(...skipping 18 matching lines...) Expand all
368 fRenderTarget = newRT.detach(); 368 fRenderTarget = newRT.detach();
369 369
370 #ifdef SK_DEBUG 370 #ifdef SK_DEBUG
371 SkImageInfo info = fRenderTarget->surfacePriv().info(fOpaque ? kOpaque_SkAlp haType : 371 SkImageInfo info = fRenderTarget->surfacePriv().info(fOpaque ? kOpaque_SkAlp haType :
372 kPremul_SkAlp haType); 372 kPremul_SkAlp haType);
373 SkASSERT(info == fLegacyBitmap.info()); 373 SkASSERT(info == fLegacyBitmap.info());
374 #endif 374 #endif
375 SkPixelRef* pr = new SkGrPixelRef(fLegacyBitmap.info(), fRenderTarget); 375 SkPixelRef* pr = new SkGrPixelRef(fLegacyBitmap.info(), fRenderTarget);
376 fLegacyBitmap.setPixelRef(pr)->unref(); 376 fLegacyBitmap.setPixelRef(pr)->unref();
377 377
378 fDrawContext.reset(fRenderTarget->getContext()->drawContext(&this->surfacePr ops())); 378 fDrawContext.reset(fRenderTarget->getContext()->drawContext(fRenderTarget,
379 &this->surfacePr ops()));
379 } 380 }
380 381
381 /////////////////////////////////////////////////////////////////////////////// 382 ///////////////////////////////////////////////////////////////////////////////
382 383
383 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) { 384 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) {
384 CHECK_SHOULD_DRAW(draw); 385 CHECK_SHOULD_DRAW(draw);
385 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPaint", fContext); 386 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPaint", fContext);
386 387
387 GrPaint grPaint; 388 GrPaint grPaint;
388 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 389 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
389 return; 390 return;
390 } 391 }
391 392
392 fDrawContext->drawPaint(fRenderTarget, fClip, grPaint, *draw.fMatrix); 393 fDrawContext->drawPaint(fClip, grPaint, *draw.fMatrix);
393 } 394 }
394 395
395 // must be in SkCanvas::PointMode order 396 // must be in SkCanvas::PointMode order
396 static const GrPrimitiveType gPointMode2PrimtiveType[] = { 397 static const GrPrimitiveType gPointMode2PrimtiveType[] = {
397 kPoints_GrPrimitiveType, 398 kPoints_GrPrimitiveType,
398 kLines_GrPrimitiveType, 399 kLines_GrPrimitiveType,
399 kLineStrip_GrPrimitiveType 400 kLineStrip_GrPrimitiveType
400 }; 401 };
401 402
402 // suppress antialiasing on axis-aligned integer-coordinate lines 403 // suppress antialiasing on axis-aligned integer-coordinate lines
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) { 435 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) {
435 GrStrokeInfo strokeInfo(paint, SkPaint::kStroke_Style); 436 GrStrokeInfo strokeInfo(paint, SkPaint::kStroke_Style);
436 GrPaint grPaint; 437 GrPaint grPaint;
437 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 438 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
438 return; 439 return;
439 } 440 }
440 SkPath path; 441 SkPath path;
441 path.setIsVolatile(true); 442 path.setIsVolatile(true);
442 path.moveTo(pts[0]); 443 path.moveTo(pts[0]);
443 path.lineTo(pts[1]); 444 path.lineTo(pts[1]);
444 fDrawContext->drawPath(fRenderTarget, fClip, grPaint, *draw.fMatrix, pat h, strokeInfo); 445 fDrawContext->drawPath(fClip, grPaint, *draw.fMatrix, path, strokeInfo);
445 return; 446 return;
446 } 447 }
447 448
448 // we only handle non-antialiased hairlines and paints without path effects or mask filters, 449 // we only handle non-antialiased hairlines and paints without path effects or mask filters,
449 // else we let the SkDraw call our drawPath() 450 // else we let the SkDraw call our drawPath()
450 if (width > 0 || paint.getPathEffect() || paint.getMaskFilter() || 451 if (width > 0 || paint.getPathEffect() || paint.getMaskFilter() ||
451 (paint.isAntiAlias() && needs_antialiasing(mode, count, pts))) { 452 (paint.isAntiAlias() && needs_antialiasing(mode, count, pts))) {
452 draw.drawPoints(mode, count, pts, paint, true); 453 draw.drawPoints(mode, count, pts, paint, true);
453 return; 454 return;
454 } 455 }
455 456
456 GrPaint grPaint; 457 GrPaint grPaint;
457 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 458 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
458 return; 459 return;
459 } 460 }
460 461
461 fDrawContext->drawVertices(fRenderTarget, 462 fDrawContext->drawVertices(fClip,
462 fClip,
463 grPaint, 463 grPaint,
464 *draw.fMatrix, 464 *draw.fMatrix,
465 gPointMode2PrimtiveType[mode], 465 gPointMode2PrimtiveType[mode],
466 SkToS32(count), 466 SkToS32(count),
467 (SkPoint*)pts, 467 (SkPoint*)pts,
468 nullptr, 468 nullptr,
469 nullptr, 469 nullptr,
470 nullptr, 470 nullptr,
471 0); 471 0);
472 } 472 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 path.addRect(rect); 514 path.addRect(rect);
515 this->drawPath(draw, path, paint, nullptr, true); 515 this->drawPath(draw, path, paint, nullptr, true);
516 return; 516 return;
517 } 517 }
518 518
519 GrPaint grPaint; 519 GrPaint grPaint;
520 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 520 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
521 return; 521 return;
522 } 522 }
523 523
524 fDrawContext->drawRect(fRenderTarget, fClip, grPaint, *draw.fMatrix, rect, & strokeInfo); 524 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &strokeInfo);
525 } 525 }
526 526
527 /////////////////////////////////////////////////////////////////////////////// 527 ///////////////////////////////////////////////////////////////////////////////
528 528
529 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect, 529 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect,
530 const SkPaint& paint) { 530 const SkPaint& paint) {
531 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawRRect", fContext); 531 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawRRect", fContext);
532 CHECK_FOR_ANNOTATION(paint); 532 CHECK_FOR_ANNOTATION(paint);
533 CHECK_SHOULD_DRAW(draw); 533 CHECK_SHOULD_DRAW(draw);
534 534
(...skipping 15 matching lines...) Expand all
550 *draw.fMatrix, 550 *draw.fMatrix,
551 &maskRect)) { 551 &maskRect)) {
552 SkIRect finalIRect; 552 SkIRect finalIRect;
553 maskRect.roundOut(&finalIRect); 553 maskRect.roundOut(&finalIRect);
554 if (draw.fClip->quickReject(finalIRect)) { 554 if (draw.fClip->quickReject(finalIRect)) {
555 // clipped out 555 // clipped out
556 return; 556 return;
557 } 557 }
558 if (paint.getMaskFilter()->directFilterRRectMaskGPU(fContext ->textureProvider(), 558 if (paint.getMaskFilter()->directFilterRRectMaskGPU(fContext ->textureProvider(),
559 fDrawCon text, 559 fDrawCon text,
560 fRenderT arget,
561 &grPaint , 560 &grPaint ,
562 fClip, 561 fClip,
563 *draw.fM atrix, 562 *draw.fM atrix,
564 strokeIn fo, 563 strokeIn fo,
565 devRRect )) { 564 devRRect )) {
566 return; 565 return;
567 } 566 }
568 } 567 }
569 568
570 } 569 }
(...skipping 14 matching lines...) Expand all
585 584
586 585
587 if (usePath) { 586 if (usePath) {
588 SkPath path; 587 SkPath path;
589 path.setIsVolatile(true); 588 path.setIsVolatile(true);
590 path.addRRect(rect); 589 path.addRRect(rect);
591 this->drawPath(draw, path, paint, nullptr, true); 590 this->drawPath(draw, path, paint, nullptr, true);
592 return; 591 return;
593 } 592 }
594 593
595 fDrawContext->drawRRect(fRenderTarget, fClip, grPaint, *draw.fMatrix, rect, strokeInfo); 594 fDrawContext->drawRRect(fClip, grPaint, *draw.fMatrix, rect, strokeInfo);
596 } 595 }
597 596
598 void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, 597 void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer,
599 const SkRRect& inner, const SkPaint& paint) { 598 const SkRRect& inner, const SkPaint& paint) {
600 SkStrokeRec stroke(paint); 599 SkStrokeRec stroke(paint);
601 if (stroke.isFillStyle()) { 600 if (stroke.isFillStyle()) {
602 601
603 CHECK_FOR_ANNOTATION(paint); 602 CHECK_FOR_ANNOTATION(paint);
604 CHECK_SHOULD_DRAW(draw); 603 CHECK_SHOULD_DRAW(draw);
605 604
606 GrPaint grPaint; 605 GrPaint grPaint;
607 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 606 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
608 return; 607 return;
609 } 608 }
610 609
611 if (nullptr == paint.getMaskFilter() && nullptr == paint.getPathEffect() ) { 610 if (nullptr == paint.getMaskFilter() && nullptr == paint.getPathEffect() ) {
612 fDrawContext->drawDRRect(fRenderTarget, fClip, grPaint, *draw.fMatri x, outer, inner); 611 fDrawContext->drawDRRect(fClip, grPaint, *draw.fMatrix, outer, inner );
613 return; 612 return;
614 } 613 }
615 } 614 }
616 615
617 SkPath path; 616 SkPath path;
618 path.setIsVolatile(true); 617 path.setIsVolatile(true);
619 path.addRRect(outer); 618 path.addRRect(outer);
620 path.addRRect(inner); 619 path.addRRect(inner);
621 path.setFillType(SkPath::kEvenOdd_FillType); 620 path.setFillType(SkPath::kEvenOdd_FillType);
622 621
(...skipping 30 matching lines...) Expand all
653 path.addOval(oval); 652 path.addOval(oval);
654 this->drawPath(draw, path, paint, nullptr, true); 653 this->drawPath(draw, path, paint, nullptr, true);
655 return; 654 return;
656 } 655 }
657 656
658 GrPaint grPaint; 657 GrPaint grPaint;
659 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 658 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
660 return; 659 return;
661 } 660 }
662 661
663 fDrawContext->drawOval(fRenderTarget, fClip, grPaint, *draw.fMatrix, oval, s trokeInfo); 662 fDrawContext->drawOval(fClip, grPaint, *draw.fMatrix, oval, strokeInfo);
664 } 663 }
665 664
666 #include "SkMaskFilter.h" 665 #include "SkMaskFilter.h"
667 666
668 /////////////////////////////////////////////////////////////////////////////// 667 ///////////////////////////////////////////////////////////////////////////////
669 668
670 static SkBitmap wrap_texture(GrTexture* texture, int width, int height) { 669 static SkBitmap wrap_texture(GrTexture* texture, int width, int height) {
671 SkBitmap result; 670 SkBitmap result;
672 result.setInfo(SkImageInfo::MakeN32Premul(width, height)); 671 result.setInfo(SkImageInfo::MakeN32Premul(width, height));
673 result.setPixelRef(new SkGrPixelRef(result.info(), texture))->unref(); 672 result.setPixelRef(new SkGrPixelRef(result.info(), texture))->unref();
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 return; 1025 return;
1027 } 1026 }
1028 matrix.preConcat(dstRectToSrcRect); 1027 matrix.preConcat(dstRectToSrcRect);
1029 1028
1030 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill(grPaint.get Color(), 1029 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill(grPaint.get Color(),
1031 viewMatrix, 1030 viewMatrix,
1032 matrix, 1031 matrix,
1033 dstRect, 1032 dstRect,
1034 devRect)); 1033 devRect));
1035 1034
1036 drawContext->drawBatch(renderTarget, clip, grPaint, batch); 1035 drawContext->drawBatch(clip, grPaint, batch);
1037 } 1036 }
1038 1037
1039 static bool can_ignore_strict_subset_constraint(const SkBitmap& bitmap, const Sk Rect& subset) { 1038 static bool can_ignore_strict_subset_constraint(const SkBitmap& bitmap, const Sk Rect& subset) {
1040 GrTexture* tex = bitmap.getTexture(); 1039 GrTexture* tex = bitmap.getTexture();
1041 int width = tex ? tex->width() : bitmap.width(); 1040 int width = tex ? tex->width() : bitmap.width();
1042 int height = tex ? tex->height() : bitmap.height(); 1041 int height = tex ? tex->height() : bitmap.height();
1043 return subset.contains(SkRect::MakeIWH(width, height)); 1042 return subset.contains(SkRect::MakeIWH(width, height));
1044 } 1043 }
1045 1044
1046 void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, 1045 void SkGpuDevice::drawBitmapCommon(const SkDraw& draw,
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 fp.reset(GrFragmentProcessor::MulOutputByInputAlpha(fp)); 1373 fp.reset(GrFragmentProcessor::MulOutputByInputAlpha(fp));
1375 } 1374 }
1376 1375
1377 if (!SkPaintToGrPaintReplaceShader(this->context(), paint, fp, &grPaint)) { 1376 if (!SkPaintToGrPaintReplaceShader(this->context(), paint, fp, &grPaint)) {
1378 return; 1377 return;
1379 } 1378 }
1380 1379
1381 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) { 1380 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) {
1382 // We don't have local coords in this case and have previously set the t ransform 1381 // We don't have local coords in this case and have previously set the t ransform
1383 // matrices directly on the texture processor. 1382 // matrices directly on the texture processor.
1384 fDrawContext->drawRect(fRenderTarget, fClip, grPaint, viewMatrix, dstRec t); 1383 fDrawContext->drawRect(fClip, grPaint, viewMatrix, dstRect);
1385 } else { 1384 } else {
1386 fDrawContext->drawNonAARectToRect(fRenderTarget, fClip, grPaint, viewMat rix, dstRect, 1385 fDrawContext->drawNonAARectToRect(fClip, grPaint, viewMatrix, dstRect, p aintRect);
1387 paintRect);
1388 } 1386 }
1389 } 1387 }
1390 1388
1391 bool SkGpuDevice::filterTexture(GrContext* context, GrTexture* texture, 1389 bool SkGpuDevice::filterTexture(GrContext* context, GrTexture* texture,
1392 int width, int height, 1390 int width, int height,
1393 const SkImageFilter* filter, 1391 const SkImageFilter* filter,
1394 const SkImageFilter::Context& ctx, 1392 const SkImageFilter::Context& ctx,
1395 SkBitmap* result, SkIPoint* offset) { 1393 SkBitmap* result, SkIPoint* offset) {
1396 SkASSERT(filter); 1394 SkASSERT(filter);
1397 1395
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 GrSimpleTextureEffect::Create(texture, SkMatrix::I())); 1457 GrSimpleTextureEffect::Create(texture, SkMatrix::I()));
1460 if (alphaOnly) { 1458 if (alphaOnly) {
1461 fp.reset(GrFragmentProcessor::MulOutputByInputUnpremulColor(fp)); 1459 fp.reset(GrFragmentProcessor::MulOutputByInputUnpremulColor(fp));
1462 } else { 1460 } else {
1463 fp.reset(GrFragmentProcessor::MulOutputByInputAlpha(fp)); 1461 fp.reset(GrFragmentProcessor::MulOutputByInputAlpha(fp));
1464 } 1462 }
1465 if (!SkPaintToGrPaintReplaceShader(this->context(), paint, fp, &grPaint)) { 1463 if (!SkPaintToGrPaintReplaceShader(this->context(), paint, fp, &grPaint)) {
1466 return; 1464 return;
1467 } 1465 }
1468 1466
1469 fDrawContext->drawNonAARectToRect(fRenderTarget, 1467 fDrawContext->drawNonAARectToRect(fClip,
1470 fClip,
1471 grPaint, 1468 grPaint,
1472 SkMatrix::I(), 1469 SkMatrix::I(),
1473 SkRect::MakeXYWH(SkIntToScalar(left), 1470 SkRect::MakeXYWH(SkIntToScalar(left),
1474 SkIntToScalar(top), 1471 SkIntToScalar(top),
1475 SkIntToScalar(w), 1472 SkIntToScalar(w),
1476 SkIntToScalar(h)), 1473 SkIntToScalar(h)),
1477 SkRect::MakeXYWH(0, 1474 SkRect::MakeXYWH(0,
1478 0, 1475 0,
1479 SK_Scalar1 * w / texture- >width(), 1476 SK_Scalar1 * w / texture- >width(),
1480 SK_Scalar1 * h / texture- >height())); 1477 SK_Scalar1 * h / texture- >height()));
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(x), 1587 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(x),
1591 SkIntToScalar(y), 1588 SkIntToScalar(y),
1592 SkIntToScalar(w), 1589 SkIntToScalar(w),
1593 SkIntToScalar(h)); 1590 SkIntToScalar(h));
1594 1591
1595 // The device being drawn may not fill up its texture (e.g. saveLayer uses a pproximate 1592 // The device being drawn may not fill up its texture (e.g. saveLayer uses a pproximate
1596 // scratch texture). 1593 // scratch texture).
1597 SkRect srcRect = SkRect::MakeWH(SK_Scalar1 * w / devTex->width(), 1594 SkRect srcRect = SkRect::MakeWH(SK_Scalar1 * w / devTex->width(),
1598 SK_Scalar1 * h / devTex->height()); 1595 SK_Scalar1 * h / devTex->height());
1599 1596
1600 fDrawContext->drawNonAARectToRect(fRenderTarget, fClip, grPaint, SkMatrix::I (), dstRect, 1597 fDrawContext->drawNonAARectToRect(fClip, grPaint, SkMatrix::I(), dstRect, sr cRect);
1601 srcRect);
1602 } 1598 }
1603 1599
1604 bool SkGpuDevice::canHandleImageFilter(const SkImageFilter* filter) { 1600 bool SkGpuDevice::canHandleImageFilter(const SkImageFilter* filter) {
1605 return filter->canFilterImageGPU(); 1601 return filter->canFilterImageGPU();
1606 } 1602 }
1607 1603
1608 bool SkGpuDevice::filterImage(const SkImageFilter* filter, const SkBitmap& src, 1604 bool SkGpuDevice::filterImage(const SkImageFilter* filter, const SkBitmap& src,
1609 const SkImageFilter::Context& ctx, 1605 const SkImageFilter::Context& ctx,
1610 SkBitmap* result, SkIPoint* offset) { 1606 SkBitmap* result, SkIPoint* offset) {
1611 // want explicitly our impl, so guard against a subclass of us overriding it 1607 // want explicitly our impl, so guard against a subclass of us overriding it
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1742 int i = 0; 1738 int i = 0;
1743 while (vertProc(&state)) { 1739 while (vertProc(&state)) {
1744 lineIndices[i] = state.f0; 1740 lineIndices[i] = state.f0;
1745 lineIndices[i + 1] = state.f1; 1741 lineIndices[i + 1] = state.f1;
1746 lineIndices[i + 2] = state.f1; 1742 lineIndices[i + 2] = state.f1;
1747 lineIndices[i + 3] = state.f2; 1743 lineIndices[i + 3] = state.f2;
1748 lineIndices[i + 4] = state.f2; 1744 lineIndices[i + 4] = state.f2;
1749 lineIndices[i + 5] = state.f0; 1745 lineIndices[i + 5] = state.f0;
1750 i += 6; 1746 i += 6;
1751 } 1747 }
1752 fDrawContext->drawVertices(fRenderTarget, 1748 fDrawContext->drawVertices(fClip,
1753 fClip,
1754 grPaint, 1749 grPaint,
1755 *draw.fMatrix, 1750 *draw.fMatrix,
1756 kLines_GrPrimitiveType, 1751 kLines_GrPrimitiveType,
1757 vertexCount, 1752 vertexCount,
1758 vertices, 1753 vertices,
1759 texs, 1754 texs,
1760 colors, 1755 colors,
1761 lineIndices.get(), 1756 lineIndices.get(),
1762 indexCount); 1757 indexCount);
1763 return; 1758 return;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1806 return; 1801 return;
1807 } 1802 }
1808 } else { 1803 } else {
1809 // No colors and no shaders. Just draw with the paint color. 1804 // No colors and no shaders. Just draw with the paint color.
1810 if (!SkPaintToGrPaintNoShader(this->context(), paint, &grPaint)) { 1805 if (!SkPaintToGrPaintNoShader(this->context(), paint, &grPaint)) {
1811 return; 1806 return;
1812 } 1807 }
1813 } 1808 }
1814 } 1809 }
1815 1810
1816 fDrawContext->drawVertices(fRenderTarget, 1811 fDrawContext->drawVertices(fClip,
1817 fClip,
1818 grPaint, 1812 grPaint,
1819 *draw.fMatrix, 1813 *draw.fMatrix,
1820 primType, 1814 primType,
1821 vertexCount, 1815 vertexCount,
1822 vertices, 1816 vertices,
1823 texs, 1817 texs,
1824 colors, 1818 colors,
1825 indices, 1819 indices,
1826 indexCount); 1820 indexCount);
1827 } 1821 }
(...skipping 20 matching lines...) Expand all
1848 &grPaint)) { 1842 &grPaint)) {
1849 return; 1843 return;
1850 } 1844 }
1851 } else { 1845 } else {
1852 if (!SkPaintToGrPaint(this->context(), p, *draw.fMatrix, &grPaint)) { 1846 if (!SkPaintToGrPaint(this->context(), p, *draw.fMatrix, &grPaint)) {
1853 return; 1847 return;
1854 } 1848 }
1855 } 1849 }
1856 1850
1857 SkDEBUGCODE(this->validate();) 1851 SkDEBUGCODE(this->validate();)
1858 fDrawContext->drawAtlas(fRenderTarget, fClip, grPaint, *draw.fMatrix, 1852 fDrawContext->drawAtlas(fClip, grPaint, *draw.fMatrix, count, xform, texRect , colors);
1859 count, xform, texRect, colors);
1860 } 1853 }
1861 1854
1862 /////////////////////////////////////////////////////////////////////////////// 1855 ///////////////////////////////////////////////////////////////////////////////
1863 1856
1864 void SkGpuDevice::drawText(const SkDraw& draw, const void* text, 1857 void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
1865 size_t byteLength, SkScalar x, SkScalar y, 1858 size_t byteLength, SkScalar x, SkScalar y,
1866 const SkPaint& paint) { 1859 const SkPaint& paint) {
1867 CHECK_SHOULD_DRAW(draw); 1860 CHECK_SHOULD_DRAW(draw);
1868 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawText", fContext); 1861 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawText", fContext);
1869 1862
1870 GrPaint grPaint; 1863 GrPaint grPaint;
1871 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 1864 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
1872 return; 1865 return;
1873 } 1866 }
1874 1867
1875 SkDEBUGCODE(this->validate();) 1868 SkDEBUGCODE(this->validate();)
1876 1869
1877 fDrawContext->drawText(fRenderTarget, fClip, grPaint, paint, *draw.fMatrix, 1870 fDrawContext->drawText(fClip, grPaint, paint, *draw.fMatrix,
1878 (const char *)text, byteLength, x, y, draw.fClip->get Bounds()); 1871 (const char *)text, byteLength, x, y, draw.fClip->get Bounds());
1879 } 1872 }
1880 1873
1881 void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL ength, 1874 void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL ength,
1882 const SkScalar pos[], int scalarsPerPos, 1875 const SkScalar pos[], int scalarsPerPos,
1883 const SkPoint& offset, const SkPaint& paint) { 1876 const SkPoint& offset, const SkPaint& paint) {
1884 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPosText", fContext); 1877 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPosText", fContext);
1885 CHECK_SHOULD_DRAW(draw); 1878 CHECK_SHOULD_DRAW(draw);
1886 1879
1887 GrPaint grPaint; 1880 GrPaint grPaint;
1888 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 1881 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
1889 return; 1882 return;
1890 } 1883 }
1891 1884
1892 SkDEBUGCODE(this->validate();) 1885 SkDEBUGCODE(this->validate();)
1893 1886
1894 fDrawContext->drawPosText(fRenderTarget, fClip, grPaint, paint, *draw.fMatri x, 1887 fDrawContext->drawPosText(fClip, grPaint, paint, *draw.fMatrix,
1895 (const char *)text, byteLength, pos, scalarsPerPos , offset, 1888 (const char *)text, byteLength, pos, scalarsPerPos , offset,
1896 draw.fClip->getBounds()); 1889 draw.fClip->getBounds());
1897 } 1890 }
1898 1891
1899 void SkGpuDevice::drawTextBlob(const SkDraw& draw, const SkTextBlob* blob, SkSca lar x, SkScalar y, 1892 void SkGpuDevice::drawTextBlob(const SkDraw& draw, const SkTextBlob* blob, SkSca lar x, SkScalar y,
1900 const SkPaint& paint, SkDrawFilter* drawFilter) { 1893 const SkPaint& paint, SkDrawFilter* drawFilter) {
1901 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawTextBlob", fContext); 1894 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawTextBlob", fContext);
1902 CHECK_SHOULD_DRAW(draw); 1895 CHECK_SHOULD_DRAW(draw);
1903 1896
1904 SkDEBUGCODE(this->validate();) 1897 SkDEBUGCODE(this->validate();)
1905 1898
1906 fDrawContext->drawTextBlob(fRenderTarget, fClip, paint, *draw.fMatrix, 1899 fDrawContext->drawTextBlob(fClip, paint, *draw.fMatrix,
1907 blob, x, y, drawFilter, draw.fClip->getBounds()); 1900 blob, x, y, drawFilter, draw.fClip->getBounds());
1908 } 1901 }
1909 1902
1910 /////////////////////////////////////////////////////////////////////////////// 1903 ///////////////////////////////////////////////////////////////////////////////
1911 1904
1912 bool SkGpuDevice::onShouldDisableLCD(const SkPaint& paint) const { 1905 bool SkGpuDevice::onShouldDisableLCD(const SkPaint& paint) const {
1913 return GrTextContext::ShouldDisableLCD(paint); 1906 return GrTextContext::ShouldDisableLCD(paint);
1914 } 1907 }
1915 1908
1916 void SkGpuDevice::flush() { 1909 void SkGpuDevice::flush() {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
2026 #endif 2019 #endif
2027 } 2020 }
2028 2021
2029 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 2022 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
2030 // We always return a transient cache, so it is freed after each 2023 // We always return a transient cache, so it is freed after each
2031 // filter traversal. 2024 // filter traversal.
2032 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); 2025 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
2033 } 2026 }
2034 2027
2035 #endif 2028 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrYUVProvider.cpp ('k') | src/gpu/SkGr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698