OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The Android Open Source Project | 2 * Copyright 2012 The Android Open Source Project |
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 "SkMorphologyImageFilter.h" | 8 #include "SkMorphologyImageFilter.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
11 #include "SkDevice.h" | 11 #include "SkDevice.h" |
12 #include "SkOpts.h" | 12 #include "SkOpts.h" |
13 #include "SkReadBuffer.h" | 13 #include "SkReadBuffer.h" |
14 #include "SkRect.h" | 14 #include "SkRect.h" |
15 #include "SkWriteBuffer.h" | 15 #include "SkWriteBuffer.h" |
16 #if SK_SUPPORT_GPU | 16 #if SK_SUPPORT_GPU |
17 #include "GrContext.h" | 17 #include "GrContext.h" |
18 #include "GrDrawContext.h" | 18 #include "GrDrawContext.h" |
19 #include "GrInvariantOutput.h" | 19 #include "GrInvariantOutput.h" |
20 #include "GrTexture.h" | 20 #include "GrTexture.h" |
21 #include "effects/Gr1DKernelEffect.h" | 21 #include "effects/Gr1DKernelEffect.h" |
22 #include "gl/GrGLFragmentProcessor.h" | 22 #include "glsl/GrGLSLFragmentProcessor.h" |
23 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 23 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
24 #include "glsl/GrGLSLProgramBuilder.h" | 24 #include "glsl/GrGLSLProgramBuilder.h" |
25 #include "glsl/GrGLSLProgramDataManager.h" | 25 #include "glsl/GrGLSLProgramDataManager.h" |
26 #endif | 26 #endif |
27 | 27 |
28 SkMorphologyImageFilter::SkMorphologyImageFilter(int radiusX, | 28 SkMorphologyImageFilter::SkMorphologyImageFilter(int radiusX, |
29 int radiusY, | 29 int radiusY, |
30 SkImageFilter* input, | 30 SkImageFilter* input, |
31 const CropRect* cropRect) | 31 const CropRect* cropRect) |
32 : INHERITED(1, &input, cropRect), fRadius(SkISize::Make(radiusX, radiusY)) { | 32 : INHERITED(1, &input, cropRect), fRadius(SkISize::Make(radiusX, radiusY)) { |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 | 229 |
230 const char* name() const override { return "Morphology"; } | 230 const char* name() const override { return "Morphology"; } |
231 | 231 |
232 protected: | 232 protected: |
233 | 233 |
234 MorphologyType fType; | 234 MorphologyType fType; |
235 bool fUseRange; | 235 bool fUseRange; |
236 float fRange[2]; | 236 float fRange[2]; |
237 | 237 |
238 private: | 238 private: |
239 GrGLFragmentProcessor* onCreateGLInstance() const override; | 239 GrGLSLFragmentProcessor* onCreateGLInstance() const override; |
240 | 240 |
241 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov
erride; | 241 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov
erride; |
242 | 242 |
243 bool onIsEqual(const GrFragmentProcessor&) const override; | 243 bool onIsEqual(const GrFragmentProcessor&) const override; |
244 | 244 |
245 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; | 245 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; |
246 | 246 |
247 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType); | 247 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType); |
248 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType, | 248 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType, |
249 float bounds[2]); | 249 float bounds[2]); |
250 | 250 |
251 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 251 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
252 | 252 |
253 typedef Gr1DKernelEffect INHERITED; | 253 typedef Gr1DKernelEffect INHERITED; |
254 }; | 254 }; |
255 | 255 |
256 /////////////////////////////////////////////////////////////////////////////// | 256 /////////////////////////////////////////////////////////////////////////////// |
257 | 257 |
258 class GrGLMorphologyEffect : public GrGLFragmentProcessor { | 258 class GrGLMorphologyEffect : public GrGLSLFragmentProcessor { |
259 public: | 259 public: |
260 GrGLMorphologyEffect(const GrProcessor&); | 260 GrGLMorphologyEffect(const GrProcessor&); |
261 | 261 |
262 virtual void emitCode(EmitArgs&) override; | 262 virtual void emitCode(EmitArgs&) override; |
263 | 263 |
264 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); | 264 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); |
265 | 265 |
266 protected: | 266 protected: |
267 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 267 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
268 | 268 |
269 private: | 269 private: |
270 int width() const { return GrMorphologyEffect::WidthFromRadius(fRadius); } | 270 int width() const { return GrMorphologyEffect::WidthFromRadius(fRadius); } |
271 | 271 |
272 int fRadius; | 272 int fRadius; |
273 Gr1DKernelEffect::Direction fDirection; | 273 Gr1DKernelEffect::Direction fDirection; |
274 bool fUseRange; | 274 bool fUseRange; |
275 GrMorphologyEffect::MorphologyType fType; | 275 GrMorphologyEffect::MorphologyType fType; |
276 GrGLSLProgramDataManager::UniformHandle fPixelSizeUni; | 276 GrGLSLProgramDataManager::UniformHandle fPixelSizeUni; |
277 GrGLSLProgramDataManager::UniformHandle fRangeUni; | 277 GrGLSLProgramDataManager::UniformHandle fRangeUni; |
278 | 278 |
279 typedef GrGLFragmentProcessor INHERITED; | 279 typedef GrGLSLFragmentProcessor INHERITED; |
280 }; | 280 }; |
281 | 281 |
282 GrGLMorphologyEffect::GrGLMorphologyEffect(const GrProcessor& proc) { | 282 GrGLMorphologyEffect::GrGLMorphologyEffect(const GrProcessor& proc) { |
283 const GrMorphologyEffect& m = proc.cast<GrMorphologyEffect>(); | 283 const GrMorphologyEffect& m = proc.cast<GrMorphologyEffect>(); |
284 fRadius = m.radius(); | 284 fRadius = m.radius(); |
285 fDirection = m.direction(); | 285 fDirection = m.direction(); |
286 fUseRange = m.useRange(); | 286 fUseRange = m.useRange(); |
287 fType = m.type(); | 287 fType = m.type(); |
288 } | 288 } |
289 | 289 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 fRange[1] = range[1]; | 420 fRange[1] = range[1]; |
421 } | 421 } |
422 | 422 |
423 GrMorphologyEffect::~GrMorphologyEffect() { | 423 GrMorphologyEffect::~GrMorphologyEffect() { |
424 } | 424 } |
425 | 425 |
426 void GrMorphologyEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessor
KeyBuilder* b) const { | 426 void GrMorphologyEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessor
KeyBuilder* b) const { |
427 GrGLMorphologyEffect::GenKey(*this, caps, b); | 427 GrGLMorphologyEffect::GenKey(*this, caps, b); |
428 } | 428 } |
429 | 429 |
430 GrGLFragmentProcessor* GrMorphologyEffect::onCreateGLInstance() const { | 430 GrGLSLFragmentProcessor* GrMorphologyEffect::onCreateGLInstance() const { |
431 return new GrGLMorphologyEffect(*this); | 431 return new GrGLMorphologyEffect(*this); |
432 } | 432 } |
433 bool GrMorphologyEffect::onIsEqual(const GrFragmentProcessor& sBase) const { | 433 bool GrMorphologyEffect::onIsEqual(const GrFragmentProcessor& sBase) const { |
434 const GrMorphologyEffect& s = sBase.cast<GrMorphologyEffect>(); | 434 const GrMorphologyEffect& s = sBase.cast<GrMorphologyEffect>(); |
435 return (this->radius() == s.radius() && | 435 return (this->radius() == s.radius() && |
436 this->direction() == s.direction() && | 436 this->direction() == s.direction() && |
437 this->useRange() == s.useRange() && | 437 this->useRange() == s.useRange() && |
438 this->type() == s.type()); | 438 this->type() == s.type()); |
439 } | 439 } |
440 | 440 |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
670 SkBitmap* result, SkIPoint* offset) con
st { | 670 SkBitmap* result, SkIPoint* offset) con
st { |
671 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset); | 671 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset); |
672 } | 672 } |
673 | 673 |
674 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
Context& ctx, | 674 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
Context& ctx, |
675 SkBitmap* result, SkIPoint* offset) cons
t { | 675 SkBitmap* result, SkIPoint* offset) cons
t { |
676 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset); | 676 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset); |
677 } | 677 } |
678 | 678 |
679 #endif | 679 #endif |
OLD | NEW |