| Index: src/core/SkBlitter.cpp
|
| diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
|
| index b9e991789142f7d019d88dbb250902bebddf6e57..f4669d595995099e49217cb2aacefe03af056eab 100644
|
| --- a/src/core/SkBlitter.cpp
|
| +++ b/src/core/SkBlitter.cpp
|
| @@ -620,7 +620,7 @@ public:
|
| }
|
| }
|
|
|
| - void setMask(const SkMask* mask) { fMask = mask; }
|
| + virtual void set3DMask(const SkMask* mask) SK_OVERRIDE { fMask = mask; }
|
|
|
| virtual void shadeSpan(int x, int y, SkPMColor span[], int count) SK_OVERRIDE {
|
| if (fProxyContext) {
|
| @@ -740,9 +740,9 @@ SkFlattenable* Sk3DShader::CreateProc(SkReadBuffer& buffer) {
|
|
|
| class Sk3DBlitter : public SkBlitter {
|
| public:
|
| - Sk3DBlitter(SkBlitter* proxy, Sk3DShader::Sk3DShaderContext* shaderContext)
|
| + Sk3DBlitter(SkBlitter* proxy, SkShader::Context* shaderContext)
|
| : fProxy(proxy)
|
| - , f3DShaderContext(shaderContext)
|
| + , fShaderContext(shaderContext)
|
| {}
|
|
|
| virtual void blitH(int x, int y, int width) {
|
| @@ -764,13 +764,13 @@ public:
|
|
|
| virtual void blitMask(const SkMask& mask, const SkIRect& clip) {
|
| if (mask.fFormat == SkMask::k3D_Format) {
|
| - f3DShaderContext->setMask(&mask);
|
| + fShaderContext->set3DMask(&mask);
|
|
|
| ((SkMask*)&mask)->fFormat = SkMask::kA8_Format;
|
| fProxy->blitMask(mask, clip);
|
| ((SkMask*)&mask)->fFormat = SkMask::k3D_Format;
|
|
|
| - f3DShaderContext->setMask(NULL);
|
| + fShaderContext->set3DMask(NULL);
|
| } else {
|
| fProxy->blitMask(mask, clip);
|
| }
|
| @@ -778,8 +778,8 @@ public:
|
|
|
| private:
|
| // Both pointers are unowned. They will be deleted by SkSmallAllocator.
|
| - SkBlitter* fProxy;
|
| - Sk3DShader::Sk3DShaderContext* f3DShaderContext;
|
| + SkBlitter* fProxy;
|
| + SkShader::Context* fShaderContext;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -987,9 +987,9 @@ SkBlitter* SkBlitter::Choose(const SkBitmap& device,
|
| if (shader3D) {
|
| SkBlitter* innerBlitter = blitter;
|
| // innerBlitter was allocated by allocator, which will delete it.
|
| - // We know shaderContext is of type Sk3DShaderContext because it belongs to shader3D.
|
| - blitter = allocator->createT<Sk3DBlitter>(innerBlitter,
|
| - static_cast<Sk3DShader::Sk3DShaderContext*>(shaderContext));
|
| + // We know shaderContext or its proxies is of type Sk3DShaderContext, so we need to
|
| + // wrapper the blitter to notify it when we see an emboss mask.
|
| + blitter = allocator->createT<Sk3DBlitter>(innerBlitter, shaderContext);
|
| }
|
| return blitter;
|
| }
|
|
|