Chromium Code Reviews| Index: src/core/SkLightingShader.cpp |
| diff --git a/src/core/SkLightingShader.cpp b/src/core/SkLightingShader.cpp |
| index a8d346ab1eaa2facf41883d41b310142ec59f5f3..212cdb65f99980163f3f38721727cb7fe622c75c 100644 |
| --- a/src/core/SkLightingShader.cpp |
| +++ b/src/core/SkLightingShader.cpp |
| @@ -72,9 +72,10 @@ public: |
| bool isOpaque() const override; |
| - bool asFragmentProcessor(GrContext*, const SkPaint& paint, const SkMatrix& viewM, |
| - const SkMatrix* localMatrix, GrColor* color, |
| - GrProcessorDataManager*, GrFragmentProcessor** fp) const override; |
| +#if SK_SUPPORT_GPU |
| + const GrFragmentProcessor* asFragmentProcessor(GrContext*, const SkMatrix& viewM, |
|
robertphillips
2015/08/28 21:33:05
indent ?
bsalomon
2015/08/29 01:42:50
Done.
|
| + const SkMatrix* localMatrix, SkFilterQuality, GrProcessorDataManager*) const override; |
| +#endif |
| size_t contextSize() const override; |
| @@ -127,6 +128,7 @@ private: |
| #include "GrCoordTransform.h" |
| #include "GrFragmentProcessor.h" |
| #include "GrTextureAccess.h" |
| +#include "effects/GrExtractAlphaFragmentProcessor.h" |
| #include "gl/GrGLProcessor.h" |
| #include "gl/builders/GrGLProgramBuilder.h" |
| #include "SkGr.h" |
| @@ -341,10 +343,9 @@ static bool make_mat(const SkBitmap& bm, |
| return true; |
| } |
| -bool SkLightingShaderImpl::asFragmentProcessor(GrContext* context, const SkPaint& paint, |
| - const SkMatrix& viewM, const SkMatrix* localMatrix, |
| - GrColor* color, GrProcessorDataManager* pdm, |
| - GrFragmentProcessor** fp) const { |
| +const GrFragmentProcessor* SkLightingShaderImpl::asFragmentProcessor(GrContext* context, |
|
robertphillips
2015/08/28 21:33:05
indent ?
bsalomon
2015/08/29 01:42:50
Done.
|
| + const SkMatrix& viewM, const SkMatrix* localMatrix, SkFilterQuality filterQuality, |
| + GrProcessorDataManager* pdm) const { |
| // we assume diffuse and normal maps have same width and height |
| // TODO: support different sizes |
| SkASSERT(fDiffuseMap.width() == fNormalMap.width() && |
| @@ -352,23 +353,23 @@ bool SkLightingShaderImpl::asFragmentProcessor(GrContext* context, const SkPaint |
| SkMatrix diffM, normM; |
| if (!make_mat(fDiffuseMap, this->getLocalMatrix(), localMatrix, &diffM)) { |
| - return false; |
| + return nullptr; |
| } |
| if (!make_mat(fNormalMap, fNormLocalMatrix, localMatrix, &normM)) { |
| - return false; |
| + return nullptr; |
| } |
| bool doBicubic; |
| GrTextureParams::FilterMode diffFilterMode = GrSkFilterQualityToGrFilterMode( |
| - SkTMin(paint.getFilterQuality(), kMedium_SkFilterQuality), |
| + SkTMin(filterQuality, kMedium_SkFilterQuality), |
| viewM, |
| this->getLocalMatrix(), |
| &doBicubic); |
| SkASSERT(!doBicubic); |
| GrTextureParams::FilterMode normFilterMode = GrSkFilterQualityToGrFilterMode( |
| - SkTMin(paint.getFilterQuality(), kMedium_SkFilterQuality), |
| + SkTMin(filterQuality, kMedium_SkFilterQuality), |
| viewM, |
| fNormLocalMatrix, |
| &doBicubic); |
| @@ -379,34 +380,22 @@ bool SkLightingShaderImpl::asFragmentProcessor(GrContext* context, const SkPaint |
| SkAutoTUnref<GrTexture> diffuseTexture(GrRefCachedBitmapTexture(context, |
| fDiffuseMap, &diffParams)); |
| if (!diffuseTexture) { |
| - SkErrorInternals::SetError(kInternalError_SkError, |
| - "Couldn't convert bitmap to texture."); |
| - return false; |
| + SkErrorInternals::SetError(kInternalError_SkError, "Couldn't convert bitmap to texture."); |
| + return nullptr; |
| } |
| GrTextureParams normParams(kClamp_TileMode, normFilterMode); |
| SkAutoTUnref<GrTexture> normalTexture(GrRefCachedBitmapTexture(context, |
| fNormalMap, &normParams)); |
| if (!normalTexture) { |
| - SkErrorInternals::SetError(kInternalError_SkError, |
| - "Couldn't convert bitmap to texture."); |
| - return false; |
| + SkErrorInternals::SetError(kInternalError_SkError, "Couldn't convert bitmap to texture."); |
| + return nullptr; |
| } |
| - *fp = new LightingFP(pdm, diffuseTexture, normalTexture, diffM, normM, diffParams, normParams, |
| - fLights, fInvNormRotation); |
| - |
| - *color = GrColorPackA4(paint.getAlpha()); |
| - return true; |
| -} |
| -#else |
| - |
| -bool SkLightingShaderImpl::asFragmentProcessor(GrContext* context, const SkPaint& paint, |
| - const SkMatrix& viewM, const SkMatrix* localMatrix, |
| - GrColor* color, GrProcessorDataManager*, |
| - GrFragmentProcessor** fp) const { |
| - SkDEBUGFAIL("Should not call in GPU-less build"); |
| - return false; |
| + SkAutoTUnref<const GrFragmentProcessor> inner ( |
| + new LightingFP(pdm, diffuseTexture, normalTexture, diffM, normM, diffParams, normParams, |
| + fLights, fInvNormRotation)); |
| + return GrExtractAlphaFragmentProcessor::Create(inner); |
| } |
| #endif |