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

Side by Side Diff: src/effects/SkMorphologyImageFilter.cpp

Issue 1388113002: Bye bye processor data manager (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove files 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/effects/SkMatrixConvolutionImageFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.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 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"
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 */ 198 */
199 class GrMorphologyEffect : public Gr1DKernelEffect { 199 class GrMorphologyEffect : public Gr1DKernelEffect {
200 200
201 public: 201 public:
202 202
203 enum MorphologyType { 203 enum MorphologyType {
204 kErode_MorphologyType, 204 kErode_MorphologyType,
205 kDilate_MorphologyType, 205 kDilate_MorphologyType,
206 }; 206 };
207 207
208 static GrFragmentProcessor* Create(GrProcessorDataManager* procDataManager, GrTexture* tex, 208 static GrFragmentProcessor* Create(GrTexture* tex, Direction dir, int radius ,
209 Direction dir, int radius, MorphologyType type) { 209 MorphologyType type) {
210 return new GrMorphologyEffect(procDataManager, tex, dir, radius, type); 210 return new GrMorphologyEffect(tex, dir, radius, type);
211 } 211 }
212 212
213 static GrFragmentProcessor* Create(GrProcessorDataManager* procDataManager, GrTexture* tex, 213 static GrFragmentProcessor* Create(GrTexture* tex, Direction dir, int radius ,
214 Direction dir, int radius, MorphologyType type, 214 MorphologyType type, float bounds[2]) {
215 float bounds[2]) { 215 return new GrMorphologyEffect(tex, dir, radius, type, bounds);
216 return new GrMorphologyEffect(procDataManager, tex, dir, radius, type, b ounds);
217 } 216 }
218 217
219 virtual ~GrMorphologyEffect(); 218 virtual ~GrMorphologyEffect();
220 219
221 MorphologyType type() const { return fType; } 220 MorphologyType type() const { return fType; }
222 bool useRange() const { return fUseRange; } 221 bool useRange() const { return fUseRange; }
223 const float* range() const { return fRange; } 222 const float* range() const { return fRange; }
224 223
225 const char* name() const override { return "Morphology"; } 224 const char* name() const override { return "Morphology"; }
226 225
227 protected: 226 protected:
228 227
229 MorphologyType fType; 228 MorphologyType fType;
230 bool fUseRange; 229 bool fUseRange;
231 float fRange[2]; 230 float fRange[2];
232 231
233 private: 232 private:
234 GrGLFragmentProcessor* onCreateGLInstance() const override; 233 GrGLFragmentProcessor* onCreateGLInstance() const override;
235 234
236 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride; 235 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride;
237 236
238 bool onIsEqual(const GrFragmentProcessor&) const override; 237 bool onIsEqual(const GrFragmentProcessor&) const override;
239 238
240 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 239 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
241 240
242 GrMorphologyEffect(GrProcessorDataManager*, GrTexture*, Direction, int radiu s, MorphologyType); 241 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType);
243 GrMorphologyEffect(GrProcessorDataManager*, GrTexture*, Direction, int radiu s, MorphologyType, 242 GrMorphologyEffect(GrTexture*, Direction, int radius, MorphologyType,
244 float bounds[2]); 243 float bounds[2]);
245 244
246 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 245 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
247 246
248 typedef Gr1DKernelEffect INHERITED; 247 typedef Gr1DKernelEffect INHERITED;
249 }; 248 };
250 249
251 /////////////////////////////////////////////////////////////////////////////// 250 ///////////////////////////////////////////////////////////////////////////////
252 251
253 class GrGLMorphologyEffect : public GrGLFragmentProcessor { 252 class GrGLMorphologyEffect : public GrGLFragmentProcessor {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 if (fDirection && texture.origin() == kBottomLeft_GrSurfaceOrigin) { 386 if (fDirection && texture.origin() == kBottomLeft_GrSurfaceOrigin) {
388 pdman.set2f(fRangeUni, 1.0f - range[1], 1.0f - range[0]); 387 pdman.set2f(fRangeUni, 1.0f - range[1], 1.0f - range[0]);
389 } else { 388 } else {
390 pdman.set2f(fRangeUni, range[0], range[1]); 389 pdman.set2f(fRangeUni, range[0], range[1]);
391 } 390 }
392 } 391 }
393 } 392 }
394 393
395 /////////////////////////////////////////////////////////////////////////////// 394 ///////////////////////////////////////////////////////////////////////////////
396 395
397 GrMorphologyEffect::GrMorphologyEffect(GrProcessorDataManager* procDataManager, 396 GrMorphologyEffect::GrMorphologyEffect(GrTexture* texture,
398 GrTexture* texture,
399 Direction direction, 397 Direction direction,
400 int radius, 398 int radius,
401 MorphologyType type) 399 MorphologyType type)
402 : INHERITED(procDataManager, texture, direction, radius) 400 : INHERITED(texture, direction, radius)
403 , fType(type), fUseRange(false) { 401 , fType(type), fUseRange(false) {
404 this->initClassID<GrMorphologyEffect>(); 402 this->initClassID<GrMorphologyEffect>();
405 } 403 }
406 404
407 GrMorphologyEffect::GrMorphologyEffect(GrProcessorDataManager* procDataManager, 405 GrMorphologyEffect::GrMorphologyEffect(GrTexture* texture,
408 GrTexture* texture,
409 Direction direction, 406 Direction direction,
410 int radius, 407 int radius,
411 MorphologyType type, 408 MorphologyType type,
412 float range[2]) 409 float range[2])
413 : INHERITED(procDataManager, texture, direction, radius) 410 : INHERITED(texture, direction, radius)
414 , fType(type), fUseRange(true) { 411 , fType(type), fUseRange(true) {
415 this->initClassID<GrMorphologyEffect>(); 412 this->initClassID<GrMorphologyEffect>();
416 fRange[0] = range[0]; 413 fRange[0] = range[0];
417 fRange[1] = range[1]; 414 fRange[1] = range[1];
418 } 415 }
419 416
420 GrMorphologyEffect::~GrMorphologyEffect() { 417 GrMorphologyEffect::~GrMorphologyEffect() {
421 } 418 }
422 419
423 void GrMorphologyEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessor KeyBuilder* b) const { 420 void GrMorphologyEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessor KeyBuilder* b) const {
(...skipping 23 matching lines...) Expand all
447 444
448 const GrFragmentProcessor* GrMorphologyEffect::TestCreate(GrProcessorTestData* d ) { 445 const GrFragmentProcessor* GrMorphologyEffect::TestCreate(GrProcessorTestData* d ) {
449 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : 446 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
450 GrProcessorUnitTest::kAlphaTextureIdx; 447 GrProcessorUnitTest::kAlphaTextureIdx;
451 Direction dir = d->fRandom->nextBool() ? kX_Direction : kY_Direction; 448 Direction dir = d->fRandom->nextBool() ? kX_Direction : kY_Direction;
452 static const int kMaxRadius = 10; 449 static const int kMaxRadius = 10;
453 int radius = d->fRandom->nextRangeU(1, kMaxRadius); 450 int radius = d->fRandom->nextRangeU(1, kMaxRadius);
454 MorphologyType type = d->fRandom->nextBool() ? GrMorphologyEffect::kErode_Mo rphologyType : 451 MorphologyType type = d->fRandom->nextBool() ? GrMorphologyEffect::kErode_Mo rphologyType :
455 GrMorphologyEffect::kDilate_Morph ologyType; 452 GrMorphologyEffect::kDilate_Morph ologyType;
456 453
457 return GrMorphologyEffect::Create(d->fProcDataManager, d->fTextures[texIdx], dir, radius, type); 454 return GrMorphologyEffect::Create(d->fTextures[texIdx], dir, radius, type);
458 } 455 }
459 456
460 namespace { 457 namespace {
461 458
462 459
463 void apply_morphology_rect(GrDrawContext* drawContext, 460 void apply_morphology_rect(GrDrawContext* drawContext,
464 GrRenderTarget* rt, 461 GrRenderTarget* rt,
465 const GrClip& clip, 462 const GrClip& clip,
466 GrTexture* texture, 463 GrTexture* texture,
467 const SkIRect& srcRect, 464 const SkIRect& srcRect,
468 const SkIRect& dstRect, 465 const SkIRect& dstRect,
469 int radius, 466 int radius,
470 GrMorphologyEffect::MorphologyType morphType, 467 GrMorphologyEffect::MorphologyType morphType,
471 float bounds[2], 468 float bounds[2],
472 Gr1DKernelEffect::Direction direction) { 469 Gr1DKernelEffect::Direction direction) {
473 GrPaint paint; 470 GrPaint paint;
474 paint.addColorFragmentProcessor(GrMorphologyEffect::Create(paint.getProcesso rDataManager(), 471 paint.addColorFragmentProcessor(GrMorphologyEffect::Create(texture,
475 texture,
476 direction, 472 direction,
477 radius, 473 radius,
478 morphType, 474 morphType,
479 bounds))->unref() ; 475 bounds))->unref() ;
480 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect), 476 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect),
481 SkRect::Make(srcRect)); 477 SkRect::Make(srcRect));
482 } 478 }
483 479
484 void apply_morphology_rect_no_bounds(GrDrawContext* drawContext, 480 void apply_morphology_rect_no_bounds(GrDrawContext* drawContext,
485 GrRenderTarget* rt, 481 GrRenderTarget* rt,
486 const GrClip& clip, 482 const GrClip& clip,
487 GrTexture* texture, 483 GrTexture* texture,
488 const SkIRect& srcRect, 484 const SkIRect& srcRect,
489 const SkIRect& dstRect, 485 const SkIRect& dstRect,
490 int radius, 486 int radius,
491 GrMorphologyEffect::MorphologyType morphTyp e, 487 GrMorphologyEffect::MorphologyType morphTyp e,
492 Gr1DKernelEffect::Direction direction) { 488 Gr1DKernelEffect::Direction direction) {
493 GrPaint paint; 489 GrPaint paint;
494 paint.addColorFragmentProcessor(GrMorphologyEffect::Create(paint.getProcesso rDataManager(), 490 paint.addColorFragmentProcessor(GrMorphologyEffect::Create(texture,
495 texture,
496 direction, 491 direction,
497 radius, 492 radius,
498 morphType))->unre f(); 493 morphType))->unre f();
499 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect), 494 drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Mak e(dstRect),
500 SkRect::Make(srcRect)); 495 SkRect::Make(srcRect));
501 } 496 }
502 497
503 void apply_morphology_pass(GrDrawContext* drawContext, 498 void apply_morphology_pass(GrDrawContext* drawContext,
504 GrRenderTarget* rt, 499 GrRenderTarget* rt,
505 const GrClip& clip, 500 const GrClip& clip,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 SkBitmap* result, SkIPoint* offset) con st { 657 SkBitmap* result, SkIPoint* offset) con st {
663 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset); 658 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset);
664 } 659 }
665 660
666 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx, 661 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx,
667 SkBitmap* result, SkIPoint* offset) cons t { 662 SkBitmap* result, SkIPoint* offset) cons t {
668 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset); 663 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset);
669 } 664 }
670 665
671 #endif 666 #endif
OLDNEW
« no previous file with comments | « src/effects/SkMatrixConvolutionImageFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698