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

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

Issue 1404823005: GrDrawContext now holds GrRenderTarget pointer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix overlength line 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/SkGpuBlurUtils.cpp ('k') | src/effects/SkMorphologyImageFilter.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 "SkLightingImageFilter.h" 8 #include "SkLightingImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 SkBitmap* result, SkIPoint* offset) const override; 323 SkBitmap* result, SkIPoint* offset) const override;
324 virtual GrFragmentProcessor* getFragmentProcessor(GrTexture*, 324 virtual GrFragmentProcessor* getFragmentProcessor(GrTexture*,
325 const SkMatrix&, 325 const SkMatrix&,
326 const SkIRect& bounds, 326 const SkIRect& bounds,
327 BoundaryMode boundaryMode) const = 0; 327 BoundaryMode boundaryMode) const = 0;
328 #endif 328 #endif
329 private: 329 private:
330 #if SK_SUPPORT_GPU 330 #if SK_SUPPORT_GPU
331 void drawRect(GrDrawContext* drawContext, 331 void drawRect(GrDrawContext* drawContext,
332 GrTexture* src, 332 GrTexture* src,
333 GrTexture* dst,
334 const SkMatrix& matrix, 333 const SkMatrix& matrix,
335 const GrClip& clip, 334 const GrClip& clip,
336 const SkRect& dstRect, 335 const SkRect& dstRect,
337 BoundaryMode boundaryMode, 336 BoundaryMode boundaryMode,
338 const SkIRect& bounds) const; 337 const SkIRect& bounds) const;
339 #endif 338 #endif
340 typedef SkLightingImageFilter INHERITED; 339 typedef SkLightingImageFilter INHERITED;
341 }; 340 };
342 341
343 #if SK_SUPPORT_GPU 342 #if SK_SUPPORT_GPU
344 void SkLightingImageFilterInternal::drawRect(GrDrawContext* drawContext, 343 void SkLightingImageFilterInternal::drawRect(GrDrawContext* drawContext,
345 GrTexture* src, 344 GrTexture* src,
346 GrTexture* dst,
347 const SkMatrix& matrix, 345 const SkMatrix& matrix,
348 const GrClip& clip, 346 const GrClip& clip,
349 const SkRect& dstRect, 347 const SkRect& dstRect,
350 BoundaryMode boundaryMode, 348 BoundaryMode boundaryMode,
351 const SkIRect& bounds) const { 349 const SkIRect& bounds) const {
352 SkRect srcRect = dstRect.makeOffset(SkIntToScalar(bounds.x()), SkIntToScalar (bounds.y())); 350 SkRect srcRect = dstRect.makeOffset(SkIntToScalar(bounds.x()), SkIntToScalar (bounds.y()));
353 GrPaint paint; 351 GrPaint paint;
354 GrFragmentProcessor* fp = this->getFragmentProcessor(src, matrix, bounds, bo undaryMode); 352 GrFragmentProcessor* fp = this->getFragmentProcessor(src, matrix, bounds, bo undaryMode);
355 paint.addColorFragmentProcessor(fp)->unref(); 353 paint.addColorFragmentProcessor(fp)->unref();
356 drawContext->drawNonAARectToRect(dst->asRenderTarget(), clip, paint, SkMatri x::I(), 354 drawContext->drawNonAARectToRect(clip, paint, SkMatrix::I(), dstRect, srcRec t);
357 dstRect, srcRect);
358 } 355 }
359 356
360 bool SkLightingImageFilterInternal::filterImageGPU(Proxy* proxy, 357 bool SkLightingImageFilterInternal::filterImageGPU(Proxy* proxy,
361 const SkBitmap& src, 358 const SkBitmap& src,
362 const Context& ctx, 359 const Context& ctx,
363 SkBitmap* result, 360 SkBitmap* result,
364 SkIPoint* offset) const { 361 SkIPoint* offset) const {
365 SkBitmap input = src; 362 SkBitmap input = src;
366 SkIPoint srcOffset = SkIPoint::Make(0, 0); 363 SkIPoint srcOffset = SkIPoint::Make(0, 0);
367 if (this->getInput(0) && 364 if (this->getInput(0) &&
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 SkRect topLeft = SkRect::MakeXYWH(0, 0, 1, 1); 396 SkRect topLeft = SkRect::MakeXYWH(0, 0, 1, 1);
400 SkRect top = SkRect::MakeXYWH(1, 0, dstRect.width() - 2, 1); 397 SkRect top = SkRect::MakeXYWH(1, 0, dstRect.width() - 2, 1);
401 SkRect topRight = SkRect::MakeXYWH(dstRect.width() - 1, 0, 1, 1); 398 SkRect topRight = SkRect::MakeXYWH(dstRect.width() - 1, 0, 1, 1);
402 SkRect left = SkRect::MakeXYWH(0, 1, 1, dstRect.height() - 2); 399 SkRect left = SkRect::MakeXYWH(0, 1, 1, dstRect.height() - 2);
403 SkRect interior = dstRect.makeInset(1, 1); 400 SkRect interior = dstRect.makeInset(1, 1);
404 SkRect right = SkRect::MakeXYWH(dstRect.width() - 1, 1, 1, dstRect.height() - 2); 401 SkRect right = SkRect::MakeXYWH(dstRect.width() - 1, 1, 1, dstRect.height() - 2);
405 SkRect bottomLeft = SkRect::MakeXYWH(0, dstRect.height() - 1, 1, 1); 402 SkRect bottomLeft = SkRect::MakeXYWH(0, dstRect.height() - 1, 1, 1);
406 SkRect bottom = SkRect::MakeXYWH(1, dstRect.height() - 1, dstRect.width() - 2, 1); 403 SkRect bottom = SkRect::MakeXYWH(1, dstRect.height() - 1, dstRect.width() - 2, 1);
407 SkRect bottomRight = SkRect::MakeXYWH(dstRect.width() - 1, dstRect.height() - 1, 1, 1); 404 SkRect bottomRight = SkRect::MakeXYWH(dstRect.width() - 1, dstRect.height() - 1, 1, 1);
408 405
409 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext()); 406 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(dst->asRenderTa rget()));
410 if (!drawContext) { 407 if (!drawContext) {
411 return false; 408 return false;
412 } 409 }
413 410
414 this->drawRect(drawContext, srcTexture, dst, matrix, clip, topLeft, kTopLeft _BoundaryMode, 411 this->drawRect(drawContext, srcTexture, matrix, clip, topLeft, kTopLeft_Boun daryMode, bounds);
412 this->drawRect(drawContext, srcTexture, matrix, clip, top, kTop_BoundaryMode , bounds);
413 this->drawRect(drawContext, srcTexture, matrix, clip, topRight, kTopRight_Bo undaryMode,
415 bounds); 414 bounds);
416 this->drawRect(drawContext, srcTexture, dst, matrix, clip, top, kTop_Boundar yMode, bounds); 415 this->drawRect(drawContext, srcTexture, matrix, clip, left, kLeft_BoundaryMo de, bounds);
417 this->drawRect(drawContext, srcTexture, dst, matrix, clip, topRight, kTopRig ht_BoundaryMode, 416 this->drawRect(drawContext, srcTexture, matrix, clip, interior, kInterior_Bo undaryMode,
418 bounds); 417 bounds);
419 this->drawRect(drawContext, srcTexture, dst, matrix, clip, left, kLeft_Bound aryMode, bounds); 418 this->drawRect(drawContext, srcTexture, matrix, clip, right, kRight_Boundary Mode, bounds);
420 this->drawRect(drawContext, srcTexture, dst, matrix, clip, interior, kInteri or_BoundaryMode, 419 this->drawRect(drawContext, srcTexture, matrix, clip, bottomLeft, kBottomLef t_BoundaryMode,
421 bounds); 420 bounds);
422 this->drawRect(drawContext, srcTexture, dst, matrix, clip, right, kRight_Bou ndaryMode, bounds); 421 this->drawRect(drawContext, srcTexture, matrix, clip, bottom, kBottom_Bounda ryMode, bounds);
423 this->drawRect(drawContext, srcTexture, dst, matrix, clip, bottomLeft, kBott omLeft_BoundaryMode, 422 this->drawRect(drawContext, srcTexture, matrix, clip, bottomRight,
424 bounds);
425 this->drawRect(drawContext, srcTexture, dst, matrix, clip, bottom, kBottom_B oundaryMode, bounds);
426 this->drawRect(drawContext, srcTexture, dst, matrix, clip, bottomRight,
427 kBottomRight_BoundaryMode, bounds); 423 kBottomRight_BoundaryMode, bounds);
428 WrapTexture(dst, bounds.width(), bounds.height(), result); 424 WrapTexture(dst, bounds.width(), bounds.height(), result);
429 return true; 425 return true;
430 } 426 }
431 #endif 427 #endif
432 428
433 class SkDiffuseLightingImageFilter : public SkLightingImageFilterInternal { 429 class SkDiffuseLightingImageFilter : public SkLightingImageFilterInternal {
434 public: 430 public:
435 static SkImageFilter* Create(SkImageFilterLight* light, SkScalar surfaceScal e, 431 static SkImageFilter* Create(SkImageFilterLight* light, SkScalar surfaceScal e,
436 SkScalar kd, SkImageFilter*, 432 SkScalar kd, SkImageFilter*,
(...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after
2011 2007
2012 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 2008 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
2013 } 2009 }
2014 2010
2015 #endif 2011 #endif
2016 2012
2017 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 2013 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
2018 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 2014 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
2019 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 2015 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
2020 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 2016 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkGpuBlurUtils.cpp ('k') | src/effects/SkMorphologyImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698