| OLD | NEW |
| 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 "effects/GrTextureDomainEffect.h" | 10 #include "effects/GrTextureDomainEffect.h" |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 365 |
| 366 void SkGpuDevice::onDetachFromCanvas() { | 366 void SkGpuDevice::onDetachFromCanvas() { |
| 367 INHERITED::onDetachFromCanvas(); | 367 INHERITED::onDetachFromCanvas(); |
| 368 | 368 |
| 369 // TODO: iterate through the clip stack and clean up any cached clip masks | 369 // TODO: iterate through the clip stack and clean up any cached clip masks |
| 370 fClipData.fClipStack->removePurgeClipCallback(purgeClipCB, fContext); | 370 fClipData.fClipStack->removePurgeClipCallback(purgeClipCB, fContext); |
| 371 | 371 |
| 372 fClipData.fClipStack = NULL; | 372 fClipData.fClipStack = NULL; |
| 373 } | 373 } |
| 374 | 374 |
| 375 #ifdef SK_DEBUG | |
| 376 static void check_bounds(const GrClipData& clipData, | |
| 377 const SkRegion& clipRegion, | |
| 378 int renderTargetWidth, | |
| 379 int renderTargetHeight) { | |
| 380 | |
| 381 SkIRect devBound; | |
| 382 | |
| 383 devBound.setLTRB(0, 0, renderTargetWidth, renderTargetHeight); | |
| 384 | |
| 385 SkClipStack::BoundsType boundType; | |
| 386 SkRect canvTemp; | |
| 387 | |
| 388 clipData.fClipStack->getBounds(&canvTemp, &boundType); | |
| 389 if (SkClipStack::kNormal_BoundsType == boundType) { | |
| 390 SkIRect devTemp; | |
| 391 | |
| 392 canvTemp.roundOut(&devTemp); | |
| 393 | |
| 394 devTemp.offset(-clipData.fOrigin.fX, -clipData.fOrigin.fY); | |
| 395 | |
| 396 if (!devBound.intersect(devTemp)) { | |
| 397 devBound.setEmpty(); | |
| 398 } | |
| 399 } | |
| 400 | |
| 401 SkASSERT(devBound.contains(clipRegion.getBounds())); | |
| 402 } | |
| 403 #endif | |
| 404 | |
| 405 /////////////////////////////////////////////////////////////////////////////// | |
| 406 | |
| 407 // call this every draw call, to ensure that the context reflects our state, | 375 // call this every draw call, to ensure that the context reflects our state, |
| 408 // and not the state from some other canvas/device | 376 // and not the state from some other canvas/device |
| 409 void SkGpuDevice::prepareDraw(const SkDraw& draw, bool forceIdentity) { | 377 void SkGpuDevice::prepareDraw(const SkDraw& draw, bool forceIdentity) { |
| 410 SkASSERT(NULL != fClipData.fClipStack); | 378 SkASSERT(NULL != fClipData.fClipStack); |
| 411 | 379 |
| 412 fContext->setRenderTarget(fRenderTarget); | 380 fContext->setRenderTarget(fRenderTarget); |
| 413 | 381 |
| 414 SkASSERT(draw.fClipStack && draw.fClipStack == fClipData.fClipStack); | 382 SkASSERT(draw.fClipStack && draw.fClipStack == fClipData.fClipStack); |
| 415 | 383 |
| 416 if (forceIdentity) { | 384 if (forceIdentity) { |
| 417 fContext->setIdentityMatrix(); | 385 fContext->setIdentityMatrix(); |
| 418 } else { | 386 } else { |
| 419 fContext->setMatrix(*draw.fMatrix); | 387 fContext->setMatrix(*draw.fMatrix); |
| 420 } | 388 } |
| 421 fClipData.fOrigin = this->getOrigin(); | 389 fClipData.fOrigin = this->getOrigin(); |
| 422 | 390 |
| 423 #ifdef SK_DEBUG | |
| 424 check_bounds(fClipData, *draw.fClip, fRenderTarget->width(), fRenderTarget->
height()); | |
| 425 #endif | |
| 426 | |
| 427 fContext->setClip(&fClipData); | 391 fContext->setClip(&fClipData); |
| 428 | 392 |
| 429 DO_DEFERRED_CLEAR(); | 393 DO_DEFERRED_CLEAR(); |
| 430 } | 394 } |
| 431 | 395 |
| 432 GrRenderTarget* SkGpuDevice::accessRenderTarget() { | 396 GrRenderTarget* SkGpuDevice::accessRenderTarget() { |
| 433 DO_DEFERRED_CLEAR(); | 397 DO_DEFERRED_CLEAR(); |
| 434 return fRenderTarget; | 398 return fRenderTarget; |
| 435 } | 399 } |
| 436 | 400 |
| (...skipping 1441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1878 GrTexture* texture, | 1842 GrTexture* texture, |
| 1879 bool needClear) | 1843 bool needClear) |
| 1880 : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { | 1844 : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { |
| 1881 | 1845 |
| 1882 SkASSERT(texture && texture->asRenderTarget()); | 1846 SkASSERT(texture && texture->asRenderTarget()); |
| 1883 // This constructor is called from onCreateCompatibleDevice. It has locked t
he RT in the texture | 1847 // This constructor is called from onCreateCompatibleDevice. It has locked t
he RT in the texture |
| 1884 // cache. We pass true for the third argument so that it will get unlocked. | 1848 // cache. We pass true for the third argument so that it will get unlocked. |
| 1885 this->initFromRenderTarget(context, texture->asRenderTarget(), true); | 1849 this->initFromRenderTarget(context, texture->asRenderTarget(), true); |
| 1886 fNeedClear = needClear; | 1850 fNeedClear = needClear; |
| 1887 } | 1851 } |
| OLD | NEW |