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 "SkDisplacementMapEffect.h" | 8 #include "SkDisplacementMapEffect.h" |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 | 348 |
349 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(dst->asRend
erTarget())); | 349 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext(dst->asRend
erTarget())); |
350 if (!drawContext) { | 350 if (!drawContext) { |
351 return nullptr; | 351 return nullptr; |
352 } | 352 } |
353 | 353 |
354 drawContext->drawRect(GrClip::WideOpen(), paint, matrix, SkRect::Make(co
lorBounds)); | 354 drawContext->drawRect(GrClip::WideOpen(), paint, matrix, SkRect::Make(co
lorBounds)); |
355 | 355 |
356 offset->fX = bounds.left(); | 356 offset->fX = bounds.left(); |
357 offset->fY = bounds.top(); | 357 offset->fY = bounds.top(); |
358 return SkSpecialImage::MakeFromGpu(source->internal_getProxy(), | 358 return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(bounds.width(), bound
s.height()), |
359 SkIRect::MakeWH(bounds.width(), bound
s.height()), | |
360 kNeedNewImageUniqueID_SpecialImage, | 359 kNeedNewImageUniqueID_SpecialImage, |
361 dst); | 360 dst); |
362 } | 361 } |
363 #endif | 362 #endif |
364 | 363 |
365 SkBitmap colorBM, displBM; | 364 SkBitmap colorBM, displBM; |
366 | 365 |
367 if (!color->getROPixels(&colorBM) || !displ->getROPixels(&displBM)) { | 366 if (!color->getROPixels(&colorBM) || !displ->getROPixels(&displBM)) { |
368 return nullptr; | 367 return nullptr; |
369 } | 368 } |
(...skipping 16 matching lines...) Expand all Loading... |
386 return nullptr; | 385 return nullptr; |
387 } | 386 } |
388 | 387 |
389 SkAutoLockPixels dstLock(dst); | 388 SkAutoLockPixels dstLock(dst); |
390 | 389 |
391 computeDisplacement(fXChannelSelector, fYChannelSelector, scale, &dst, | 390 computeDisplacement(fXChannelSelector, fYChannelSelector, scale, &dst, |
392 displBM, colorOffset - displOffset, colorBM, colorBounds
); | 391 displBM, colorOffset - displOffset, colorBM, colorBounds
); |
393 | 392 |
394 offset->fX = bounds.left(); | 393 offset->fX = bounds.left(); |
395 offset->fY = bounds.top(); | 394 offset->fY = bounds.top(); |
396 return SkSpecialImage::MakeFromRaster(source->internal_getProxy(), | 395 return SkSpecialImage::MakeFromRaster(SkIRect::MakeWH(bounds.width(), bounds
.height()), |
397 SkIRect::MakeWH(bounds.width(), bounds
.height()), | |
398 dst); | 396 dst); |
399 } | 397 } |
400 | 398 |
401 SkRect SkDisplacementMapEffect::computeFastBounds(const SkRect& src) const { | 399 SkRect SkDisplacementMapEffect::computeFastBounds(const SkRect& src) const { |
402 SkRect bounds = this->getColorInput() ? this->getColorInput()->computeFastBo
unds(src) : src; | 400 SkRect bounds = this->getColorInput() ? this->getColorInput()->computeFastBo
unds(src) : src; |
403 bounds.outset(SkScalarAbs(fScale) * SK_ScalarHalf, SkScalarAbs(fScale) * SK_
ScalarHalf); | 401 bounds.outset(SkScalarAbs(fScale) * SK_ScalarHalf, SkScalarAbs(fScale) * SK_
ScalarHalf); |
404 return bounds; | 402 return bounds; |
405 } | 403 } |
406 | 404 |
407 SkIRect SkDisplacementMapEffect::onFilterNodeBounds(const SkIRect& src, const Sk
Matrix& ctm, | 405 SkIRect SkDisplacementMapEffect::onFilterNodeBounds(const SkIRect& src, const Sk
Matrix& ctm, |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 void GrGLDisplacementMapEffect::GenKey(const GrProcessor& proc, | 626 void GrGLDisplacementMapEffect::GenKey(const GrProcessor& proc, |
629 const GrGLSLCaps&, GrProcessorKeyBuilder*
b) { | 627 const GrGLSLCaps&, GrProcessorKeyBuilder*
b) { |
630 const GrDisplacementMapEffect& displacementMap = proc.cast<GrDisplacementMap
Effect>(); | 628 const GrDisplacementMapEffect& displacementMap = proc.cast<GrDisplacementMap
Effect>(); |
631 | 629 |
632 uint32_t xKey = displacementMap.xChannelSelector(); | 630 uint32_t xKey = displacementMap.xChannelSelector(); |
633 uint32_t yKey = displacementMap.yChannelSelector() << kChannelSelectorKeyBit
s; | 631 uint32_t yKey = displacementMap.yChannelSelector() << kChannelSelectorKeyBit
s; |
634 | 632 |
635 b->add32(xKey | yKey); | 633 b->add32(xKey | yKey); |
636 } | 634 } |
637 #endif | 635 #endif |
OLD | NEW |