OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "SkAlphaThresholdFilter.h" | 8 #include "SkAlphaThresholdFilter.h" |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 : INHERITED(&input, 1, cropRect) | 88 : INHERITED(&input, 1, cropRect) |
89 , fRegion(region) | 89 , fRegion(region) |
90 , fInnerThreshold(innerThreshold) | 90 , fInnerThreshold(innerThreshold) |
91 , fOuterThreshold(outerThreshold) { | 91 , fOuterThreshold(outerThreshold) { |
92 } | 92 } |
93 | 93 |
94 #if SK_SUPPORT_GPU | 94 #if SK_SUPPORT_GPU |
95 sk_sp<GrTexture> SkAlphaThresholdFilterImpl::createMaskTexture(GrContext* contex
t, | 95 sk_sp<GrTexture> SkAlphaThresholdFilterImpl::createMaskTexture(GrContext* contex
t, |
96 const SkMatrix& i
nMatrix, | 96 const SkMatrix& i
nMatrix, |
97 const SkIRect& bo
unds) const { | 97 const SkIRect& bo
unds) const { |
98 GrPixelConfig config; | 98 GrSurfaceDesc maskDesc; |
99 if (context->caps()->isConfigRenderable(kAlpha_8_GrPixelConfig, false)) { | 99 if (context->caps()->isConfigRenderable(kAlpha_8_GrPixelConfig, false)) { |
100 config = kAlpha_8_GrPixelConfig; | 100 maskDesc.fConfig = kAlpha_8_GrPixelConfig; |
101 } else { | 101 } else { |
102 config = kRGBA_8888_GrPixelConfig; | 102 maskDesc.fConfig = kRGBA_8888_GrPixelConfig; |
| 103 } |
| 104 maskDesc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 105 // Add one pixel of border to ensure that clamp mode will be all zeros |
| 106 // the outside. |
| 107 maskDesc.fWidth = bounds.width(); |
| 108 maskDesc.fHeight = bounds.height(); |
| 109 sk_sp<GrTexture> maskTexture(context->textureProvider()->createApproxTexture
(maskDesc)); |
| 110 if (!maskTexture) { |
| 111 return nullptr; |
103 } | 112 } |
104 | 113 |
105 sk_sp<GrDrawContext> drawContext(context->newDrawContext(GrContext::kLoose_B
ackingFit, | 114 sk_sp<GrDrawContext> drawContext( |
106 bounds.width(), bou
nds.height(), | 115 context->drawContext(sk_ref_sp(maskTexture->asRe
nderTarget()))); |
107 config)); | |
108 if (!drawContext) { | 116 if (!drawContext) { |
109 return nullptr; | 117 return nullptr; |
110 } | 118 } |
111 | 119 |
112 GrPaint grPaint; | 120 GrPaint grPaint; |
113 grPaint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); | 121 grPaint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); |
114 SkRegion::Iterator iter(fRegion); | 122 SkRegion::Iterator iter(fRegion); |
115 drawContext->clear(nullptr, 0x0, true); | 123 drawContext->clear(nullptr, 0x0, true); |
116 | 124 |
117 GrClip clip(SkRect::Make(SkIRect::MakeWH(bounds.width(), bounds.height()))); | 125 GrClip clip(SkRect::Make(SkIRect::MakeWH(bounds.width(), bounds.height()))); |
118 while (!iter.done()) { | 126 while (!iter.done()) { |
119 SkRect rect = SkRect::Make(iter.rect()); | 127 SkRect rect = SkRect::Make(iter.rect()); |
120 drawContext->drawRect(clip, grPaint, inMatrix, rect); | 128 drawContext->drawRect(clip, grPaint, inMatrix, rect); |
121 iter.next(); | 129 iter.next(); |
122 } | 130 } |
123 | 131 |
124 return drawContext->asTexture(); | 132 return maskTexture; |
125 } | 133 } |
126 #endif | 134 #endif |
127 | 135 |
128 void SkAlphaThresholdFilterImpl::flatten(SkWriteBuffer& buffer) const { | 136 void SkAlphaThresholdFilterImpl::flatten(SkWriteBuffer& buffer) const { |
129 this->INHERITED::flatten(buffer); | 137 this->INHERITED::flatten(buffer); |
130 buffer.writeScalar(fInnerThreshold); | 138 buffer.writeScalar(fInnerThreshold); |
131 buffer.writeScalar(fOuterThreshold); | 139 buffer.writeScalar(fOuterThreshold); |
132 buffer.writeRegion(fRegion); | 140 buffer.writeRegion(fRegion); |
133 } | 141 } |
134 | 142 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 dst); | 267 dst); |
260 } | 268 } |
261 | 269 |
262 #ifndef SK_IGNORE_TO_STRING | 270 #ifndef SK_IGNORE_TO_STRING |
263 void SkAlphaThresholdFilterImpl::toString(SkString* str) const { | 271 void SkAlphaThresholdFilterImpl::toString(SkString* str) const { |
264 str->appendf("SkAlphaThresholdImageFilter: ("); | 272 str->appendf("SkAlphaThresholdImageFilter: ("); |
265 str->appendf("inner: %f outer: %f", fInnerThreshold, fOuterThreshold); | 273 str->appendf("inner: %f outer: %f", fInnerThreshold, fOuterThreshold); |
266 str->append(")"); | 274 str->append(")"); |
267 } | 275 } |
268 #endif | 276 #endif |
OLD | NEW |