Index: src/effects/SkLightingImageFilter.cpp |
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp |
index 1f120c04666ee788abcb7aca1f5a710bf1d2cab2..3c4391b634c255ab9cc364edcb9e38bee1130e12 100644 |
--- a/src/effects/SkLightingImageFilter.cpp |
+++ b/src/effects/SkLightingImageFilter.cpp |
@@ -327,7 +327,7 @@ protected: |
virtual GrFragmentProcessor* getFragmentProcessor(GrTexture*, |
const SkMatrix&, |
const SkIRect& bounds, |
- BoundaryMode boundaryMode) const = 0; |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) const = 0; |
#endif |
private: |
#if SK_SUPPORT_GPU |
@@ -352,16 +352,18 @@ void SkLightingImageFilterInternal::drawRect(GrDrawContext* drawContext, |
const SkIRect& bounds) const { |
SkRect srcRect = dstRect.makeOffset(SkIntToScalar(bounds.x()), SkIntToScalar(bounds.y())); |
GrPaint paint; |
- GrFragmentProcessor* fp = this->getFragmentProcessor(src, matrix, bounds, boundaryMode); |
+ GrFragmentProcessor* fp = this->getFragmentProcessor(src, |
+ matrix, bounds, boundaryMode, drawContext->rt_remove_me()); |
paint.addColorFragmentProcessor(fp)->unref(); |
drawContext->fillRectToRect(clip, paint, SkMatrix::I(), dstRect, srcRect); |
} |
+ |
bool SkLightingImageFilterInternal::filterImageGPU(Proxy* proxy, |
const SkBitmap& src, |
const Context& ctx, |
- SkBitmap* result, |
- SkIPoint* offset) const { |
+ SkBitmap* result, SkIPoint* offset) const { |
+ |
SkBitmap input = src; |
SkIPoint srcOffset = SkIPoint::Make(0, 0); |
if (!this->filterInputGPU(0, proxy, src, ctx, &input, &srcOffset)) { |
@@ -424,6 +426,7 @@ bool SkLightingImageFilterInternal::filterImageGPU(Proxy* proxy, |
this->drawRect(drawContext, srcTexture, matrix, clip, bottom, kBottom_BoundaryMode, bounds); |
this->drawRect(drawContext, srcTexture, matrix, clip, bottomRight, |
kBottomRight_BoundaryMode, bounds); |
+ |
WrapTexture(dst, bounds.width(), bounds.height(), result); |
return true; |
} |
@@ -447,7 +450,7 @@ protected: |
SkBitmap* result, SkIPoint* offset) const override; |
#if SK_SUPPORT_GPU |
GrFragmentProcessor* getFragmentProcessor(GrTexture*, const SkMatrix&, const SkIRect& bounds, |
- BoundaryMode) const override; |
+ BoundaryMode, GrRenderTarget* dst) const override; |
#endif |
private: |
@@ -474,8 +477,8 @@ protected: |
bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, |
SkBitmap* result, SkIPoint* offset) const override; |
#if SK_SUPPORT_GPU |
- GrFragmentProcessor* getFragmentProcessor(GrTexture*, const SkMatrix&, const SkIRect& bounds, |
- BoundaryMode) const override; |
+ GrFragmentProcessor* getFragmentProcessor(GrTexture*, const SkMatrix&, |
+ const SkIRect& bounds, BoundaryMode, GrRenderTarget* dst) const override; |
#endif |
private: |
@@ -489,8 +492,8 @@ private: |
class GrLightingEffect : public GrSingleTextureEffect { |
public: |
- GrLightingEffect(GrTexture* texture, const SkImageFilterLight* light, SkScalar surfaceScale, |
- const SkMatrix& matrix, BoundaryMode boundaryMode); |
+ GrLightingEffect(GrTexture* texture, const SkImageFilterLight* light, |
+ SkScalar surfaceScale, const SkMatrix& matrix, BoundaryMode boundaryMode, GrRenderTarget* dst); |
virtual ~GrLightingEffect(); |
const SkImageFilterLight* light() const { return fLight; } |
@@ -522,8 +525,9 @@ public: |
SkScalar surfaceScale, |
const SkMatrix& matrix, |
SkScalar kd, |
- BoundaryMode boundaryMode) { |
- return new GrDiffuseLightingEffect(texture, light, surfaceScale, matrix, kd, boundaryMode); |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) { |
+ return new GrDiffuseLightingEffect(texture, light, surfaceScale, matrix, |
+ kd, boundaryMode, dst); |
} |
const char* name() const override { return "DiffuseLighting"; } |
@@ -542,7 +546,7 @@ private: |
SkScalar surfaceScale, |
const SkMatrix& matrix, |
SkScalar kd, |
- BoundaryMode boundaryMode); |
+ BoundaryMode boundaryMode, GrRenderTarget* dst); |
GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
typedef GrLightingEffect INHERITED; |
@@ -557,9 +561,9 @@ public: |
const SkMatrix& matrix, |
SkScalar ks, |
SkScalar shininess, |
- BoundaryMode boundaryMode) { |
- return new GrSpecularLightingEffect(texture, light, surfaceScale, matrix, ks, shininess, |
- boundaryMode); |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) { |
+ return new GrSpecularLightingEffect(texture, light, surfaceScale, matrix, |
+ ks, shininess, boundaryMode, dst); |
} |
const char* name() const override { return "SpecularLighting"; } |
@@ -580,7 +584,7 @@ private: |
const SkMatrix& matrix, |
SkScalar ks, |
SkScalar shininess, |
- BoundaryMode boundaryMode); |
+ BoundaryMode boundaryMode, GrRenderTarget* dst); |
GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
typedef GrLightingEffect INHERITED; |
@@ -1252,11 +1256,11 @@ GrFragmentProcessor* SkDiffuseLightingImageFilter::getFragmentProcessor( |
GrTexture* texture, |
const SkMatrix& matrix, |
const SkIRect&, |
- BoundaryMode boundaryMode |
-) const { |
+ BoundaryMode boundaryMode, |
+ GrRenderTarget* dst) const { |
SkScalar scale = SkScalarMul(this->surfaceScale(), SkIntToScalar(255)); |
- return GrDiffuseLightingEffect::Create(texture, this->light(), scale, matrix, this->kd(), |
- boundaryMode); |
+ return GrDiffuseLightingEffect::Create(texture, this->light(), scale, matrix, |
+ this->kd(), boundaryMode, dst); |
} |
#endif |
@@ -1394,10 +1398,10 @@ GrFragmentProcessor* SkSpecularLightingImageFilter::getFragmentProcessor( |
GrTexture* texture, |
const SkMatrix& matrix, |
const SkIRect&, |
- BoundaryMode boundaryMode) const { |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) const { |
SkScalar scale = SkScalarMul(this->surfaceScale(), SkIntToScalar(255)); |
- return GrSpecularLightingEffect::Create(texture, this->light(), scale, matrix, this->ks(), |
- this->shininess(), boundaryMode); |
+ return GrSpecularLightingEffect::Create(texture, this->light(), scale, matrix, |
+ this->ks(), this->shininess(), boundaryMode, dst); |
} |
#endif |
@@ -1573,8 +1577,8 @@ GrLightingEffect::GrLightingEffect(GrTexture* texture, |
const SkImageFilterLight* light, |
SkScalar surfaceScale, |
const SkMatrix& matrix, |
- BoundaryMode boundaryMode) |
- : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture)) |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) |
+ : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture), kLocal_GrCoordSet, dst) |
, fLight(light) |
, fSurfaceScale(surfaceScale) |
, fFilterMatrix(matrix) |
@@ -1603,8 +1607,8 @@ GrDiffuseLightingEffect::GrDiffuseLightingEffect(GrTexture* texture, |
SkScalar surfaceScale, |
const SkMatrix& matrix, |
SkScalar kd, |
- BoundaryMode boundaryMode) |
- : INHERITED(texture, light, surfaceScale, matrix, boundaryMode), fKD(kd) { |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) |
+ : INHERITED(texture, light, surfaceScale, matrix, boundaryMode, dst), fKD(kd) { |
this->initClassID<GrDiffuseLightingEffect>(); |
} |
@@ -1635,7 +1639,7 @@ const GrFragmentProcessor* GrDiffuseLightingEffect::TestCreate(GrProcessorTestDa |
} |
BoundaryMode mode = static_cast<BoundaryMode>(d->fRandom->nextU() % kBoundaryModeCount); |
return GrDiffuseLightingEffect::Create(d->fTextures[GrProcessorUnitTest::kAlphaTextureIdx], |
- light, surfaceScale, matrix, kd, mode); |
+ light, surfaceScale, matrix, kd, mode, NULL); |
} |
@@ -1801,8 +1805,8 @@ GrSpecularLightingEffect::GrSpecularLightingEffect(GrTexture* texture, |
const SkMatrix& matrix, |
SkScalar ks, |
SkScalar shininess, |
- BoundaryMode boundaryMode) |
- : INHERITED(texture, light, surfaceScale, matrix, boundaryMode) |
+ BoundaryMode boundaryMode, GrRenderTarget* dst) |
+ : INHERITED(texture, light, surfaceScale, matrix, boundaryMode, dst) |
, fKS(ks) |
, fShininess(shininess) { |
this->initClassID<GrSpecularLightingEffect>(); |
@@ -1837,7 +1841,7 @@ const GrFragmentProcessor* GrSpecularLightingEffect::TestCreate(GrProcessorTestD |
} |
BoundaryMode mode = static_cast<BoundaryMode>(d->fRandom->nextU() % kBoundaryModeCount); |
return GrSpecularLightingEffect::Create(d->fTextures[GrProcessorUnitTest::kAlphaTextureIdx], |
- light, surfaceScale, matrix, ks, shininess, mode); |
+ light, surfaceScale, matrix, ks, shininess, mode, NULL); |
} |
/////////////////////////////////////////////////////////////////////////////// |