| Index: src/core/SkLightingShader.cpp
|
| diff --git a/src/core/SkLightingShader.cpp b/src/core/SkLightingShader.cpp
|
| index a8d346ab1eaa2facf41883d41b310142ec59f5f3..4ab233a82890c37ace8e9362a0976443a772d19d 100644
|
| --- a/src/core/SkLightingShader.cpp
|
| +++ b/src/core/SkLightingShader.cpp
|
| @@ -72,9 +72,13 @@ 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,
|
| + const SkMatrix* localMatrix,
|
| + SkFilterQuality,
|
| + GrProcessorDataManager*) const override;
|
| +#endif
|
|
|
| size_t contextSize() const override;
|
|
|
| @@ -127,6 +131,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 +346,12 @@ 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,
|
| + 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 +359,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 +386,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
|
|
|