diff options
| author | 2014-02-12 18:59:05 +0000 | |
|---|---|---|
| committer | 2014-02-12 18:59:05 +0000 | |
| commit | 90d0c75e94a32fb7d993fae69762820aabc2fcbb (patch) | |
| tree | d67ca852f275b8362e15144e4a7c02bdaf8b6c74 /libs | |
| parent | e889298cd6ae1fc0d76bc00d7d12586db03eb261 (diff) | |
Revert "Refactor setting an SkPaint onto a hwui Layer."
This reverts commit e889298cd6ae1fc0d76bc00d7d12586db03eb261.
Change-Id: I4b1d609b2d4280595d40cb10d6c18875c22999f8
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/hwui/DeferredLayerUpdater.cpp | 11 | ||||
| -rw-r--r-- | libs/hwui/DeferredLayerUpdater.h | 6 | ||||
| -rw-r--r-- | libs/hwui/Layer.cpp | 3 | ||||
| -rw-r--r-- | libs/hwui/Layer.h | 2 | ||||
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 9 |
5 files changed, 18 insertions, 13 deletions
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index 03bbaf0bb0d1..ed05d0475437 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -32,26 +32,24 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* rendere , mRenderer(renderer) , mCaches(Caches::getInstance()) { mCaches.resourceCache.incrementRefcount(mLayer); - SkRefCnt_SafeAssign(mColorFilter, mLayer->getColorFilter()); mWidth = mLayer->layer.getWidth(); mHeight = mLayer->layer.getHeight(); mBlend = mLayer->isBlend(); + mColorFilter = mLayer->getColorFilter(); mAlpha = mLayer->getAlpha(); mMode = mLayer->getMode(); mDirtyRect.setEmpty(); } DeferredLayerUpdater::~DeferredLayerUpdater() { - SkSafeUnref(mColorFilter); + setColorFilter(NULL); if (mLayer) { mCaches.resourceCache.decrementRefcount(mLayer); } delete mRenderer; } -void DeferredLayerUpdater::setPaint(const SkPaint* paint) { - OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode); - SkColorFilter* colorFilter = (paint) ? paint->getColorFilter() : NULL; +void DeferredLayerUpdater::setColorFilter(SkColorFilter* colorFilter) { SkRefCnt_SafeAssign(mColorFilter, colorFilter); } @@ -138,10 +136,9 @@ void DeferredLayerUpdater::applyDeferred(DeferredLayerUpdater* deferredApply) { deferredApply->mSurfaceTexture = mSurfaceTexture; deferredApply->mNeedsGLContextAttach = mNeedsGLContextAttach; deferredApply->mUpdateTexImage = mUpdateTexImage; + deferredApply->setColorFilter(mColorFilter); deferredApply->setTransform(mTransform); - SkRefCnt_SafeAssign(deferredApply->mColorFilter, mColorFilter); - mDisplayList = 0; mDirtyRect.setEmpty(); mTransform = 0; diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h index 2735b9e2a6f7..0350eef36e08 100644 --- a/libs/hwui/DeferredLayerUpdater.h +++ b/libs/hwui/DeferredLayerUpdater.h @@ -73,7 +73,11 @@ public: ANDROID_API void setDisplayList(DisplayList* displayList, int left, int top, int right, int bottom); - ANDROID_API void setPaint(const SkPaint* paint); + ANDROID_API void setPaint(const SkPaint* paint) { + OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode); + } + + ANDROID_API void setColorFilter(SkColorFilter* colorFilter); ANDROID_API bool apply(); ANDROID_API void applyDeferred(DeferredLayerUpdater* deferredApply); diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp index 54ce64f4069d..70eeb39ac4ef 100644 --- a/libs/hwui/Layer.cpp +++ b/libs/hwui/Layer.cpp @@ -131,9 +131,8 @@ void Layer::removeFbo(bool flush) { } } -void Layer::setPaint(const SkPaint* paint) { +void Layer::setPaint(SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); - setColorFilter((paint) ? paint->getColorFilter() : NULL); } void Layer::setColorFilter(SkColorFilter* filter) { diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index 8cc027ae117a..ec80e9c02d3d 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -117,7 +117,7 @@ public: texture.height = height; } - ANDROID_API void setPaint(const SkPaint* paint); + ANDROID_API void setPaint(SkPaint* paint); inline void setBlend(bool blend) { texture.blend = blend; diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 0a83332dad95..fee916b25369 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -868,11 +868,14 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto const bool fboLayer = flags & SkCanvas::kClipToLayer_SaveFlag; + SkXfermode::Mode mode = getXfermodeDirect(paint); + int alpha = getAlphaDirect(paint); + // Window coordinates of the layer Rect clip; Rect bounds(left, top, right, bottom); calculateLayerBoundsAndClip(bounds, clip, fboLayer); - updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, getAlphaDirect(paint)); + updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, alpha); // Bail out if we won't draw in this snapshot if (currentSnapshot()->isIgnored()) { @@ -885,11 +888,12 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto return false; } - layer->setPaint(paint); + layer->setAlpha(alpha, mode); layer->layer.set(bounds); layer->texCoords.set(0.0f, bounds.getHeight() / float(layer->getHeight()), bounds.getWidth() / float(layer->getWidth()), 0.0f); + layer->setColorFilter(getColorFilter(paint)); layer->setBlend(true); layer->setDirty(false); @@ -1007,6 +1011,7 @@ void OpenGLRenderer::composeLayer(const Snapshot& removed, const Snapshot& resto } if (!fboLayer && layer->getAlpha() < 255) { + // TODO: this seems to point to the fact that the layer should store the paint SkPaint layerPaint; layerPaint.setAlpha(layer->getAlpha()); layerPaint.setXfermodeMode(SkXfermode::kDstIn_Mode); |