OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "GrClipMaskManager.h" | 9 #include "GrClipMaskManager.h" |
10 #include "GrAAConvexPathRenderer.h" | 10 #include "GrAAConvexPathRenderer.h" |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 | 454 |
455 GrDrawState* drawState = fGpu->drawState(); | 455 GrDrawState* drawState = fGpu->drawState(); |
456 | 456 |
457 // We're drawing a coverage mask and want coverage to be run through the ble
nd function. | 457 // We're drawing a coverage mask and want coverage to be run through the ble
nd function. |
458 drawState->enableState(GrDrawState::kCoverageDrawing_StateBit); | 458 drawState->enableState(GrDrawState::kCoverageDrawing_StateBit); |
459 | 459 |
460 // The scratch texture that we are drawing into can be substantially larger
than the mask. Only | 460 // The scratch texture that we are drawing into can be substantially larger
than the mask. Only |
461 // clear the part that we care about. | 461 // clear the part that we care about. |
462 fGpu->clear(&maskSpaceIBounds, | 462 fGpu->clear(&maskSpaceIBounds, |
463 kAllIn_InitialState == initialState ? 0xffffffff : 0x00000000, | 463 kAllIn_InitialState == initialState ? 0xffffffff : 0x00000000, |
| 464 true, |
464 result->asRenderTarget()); | 465 result->asRenderTarget()); |
465 | 466 |
466 // When we use the stencil in the below loop it is important to have this cl
ip installed. | 467 // When we use the stencil in the below loop it is important to have this cl
ip installed. |
467 // The second pass that zeros the stencil buffer renders the rect maskSpaceI
Bounds so the first | 468 // The second pass that zeros the stencil buffer renders the rect maskSpaceI
Bounds so the first |
468 // pass must not set values outside of this bounds or stencil values outside
the rect won't be | 469 // pass must not set values outside of this bounds or stencil values outside
the rect won't be |
469 // cleared. | 470 // cleared. |
470 GrDrawTarget::AutoClipRestore acr(fGpu, maskSpaceIBounds); | 471 GrDrawTarget::AutoClipRestore acr(fGpu, maskSpaceIBounds); |
471 drawState->enableState(GrDrawState::kClip_StateBit); | 472 drawState->enableState(GrDrawState::kClip_StateBit); |
472 | 473 |
473 GrAutoScratchTexture temp; | 474 GrAutoScratchTexture temp; |
(...skipping 24 matching lines...) Expand all Loading... |
498 | 499 |
499 this->getTemp(maskSpaceIBounds.fRight, maskSpaceIBounds.fBottom,
&temp); | 500 this->getTemp(maskSpaceIBounds.fRight, maskSpaceIBounds.fBottom,
&temp); |
500 if (NULL == temp.texture()) { | 501 if (NULL == temp.texture()) { |
501 fAACache.reset(); | 502 fAACache.reset(); |
502 return NULL; | 503 return NULL; |
503 } | 504 } |
504 dst = temp.texture(); | 505 dst = temp.texture(); |
505 // clear the temp target and set blend to replace | 506 // clear the temp target and set blend to replace |
506 fGpu->clear(&maskSpaceElementIBounds, | 507 fGpu->clear(&maskSpaceElementIBounds, |
507 invert ? 0xffffffff : 0x00000000, | 508 invert ? 0xffffffff : 0x00000000, |
| 509 true, |
508 dst->asRenderTarget()); | 510 dst->asRenderTarget()); |
509 setup_boolean_blendcoeffs(drawState, SkRegion::kReplace_Op); | 511 setup_boolean_blendcoeffs(drawState, SkRegion::kReplace_Op); |
510 | 512 |
511 } else { | 513 } else { |
512 // draw directly into the result with the stencil set to make th
e pixels affected | 514 // draw directly into the result with the stencil set to make th
e pixels affected |
513 // by the clip shape be non-zero. | 515 // by the clip shape be non-zero. |
514 dst = result; | 516 dst = result; |
515 GR_STATIC_CONST_SAME_STENCIL(kStencilInElement, | 517 GR_STATIC_CONST_SAME_STENCIL(kStencilInElement, |
516 kReplace_StencilOp, | 518 kReplace_StencilOp, |
517 kReplace_StencilOp, | 519 kReplace_StencilOp, |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 | 1033 |
1032 // TODO: dynamically attach a stencil buffer | 1034 // TODO: dynamically attach a stencil buffer |
1033 int stencilBits = 0; | 1035 int stencilBits = 0; |
1034 GrStencilBuffer* stencilBuffer = | 1036 GrStencilBuffer* stencilBuffer = |
1035 drawState.getRenderTarget()->getStencilBuffer(); | 1037 drawState.getRenderTarget()->getStencilBuffer(); |
1036 if (NULL != stencilBuffer) { | 1038 if (NULL != stencilBuffer) { |
1037 stencilBits = stencilBuffer->bits(); | 1039 stencilBits = stencilBuffer->bits(); |
1038 this->adjustStencilParams(settings, clipMode, stencilBits); | 1040 this->adjustStencilParams(settings, clipMode, stencilBits); |
1039 } | 1041 } |
1040 } | 1042 } |
OLD | NEW |