summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2014-02-12 18:59:05 +0000
committerDerek Sollenberger <djsollen@google.com>2014-02-12 18:59:05 +0000
commit90d0c75e94a32fb7d993fae69762820aabc2fcbb (patch)
treed67ca852f275b8362e15144e4a7c02bdaf8b6c74
parente889298cd6ae1fc0d76bc00d7d12586db03eb261 (diff)
Revert "Refactor setting an SkPaint onto a hwui Layer."
This reverts commit e889298cd6ae1fc0d76bc00d7d12586db03eb261. Change-Id: I4b1d609b2d4280595d40cb10d6c18875c22999f8
-rw-r--r--core/java/android/view/HardwareLayer.java5
-rw-r--r--core/jni/android_view_HardwareLayer.cpp6
-rw-r--r--libs/hwui/DeferredLayerUpdater.cpp11
-rw-r--r--libs/hwui/DeferredLayerUpdater.h6
-rw-r--r--libs/hwui/Layer.cpp3
-rw-r--r--libs/hwui/Layer.h2
-rw-r--r--libs/hwui/OpenGLRenderer.cpp9
7 files changed, 25 insertions, 17 deletions
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index cb63c09dc5f7..9bbcf7ce5963 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -66,7 +66,8 @@ final class HardwareLayer {
* @see View#setLayerPaint(android.graphics.Paint)
*/
public void setLayerPaint(Paint paint) {
- nSetLayerPaint(mFinalizer.mDeferredUpdater, paint.mNativePaint);
+ nSetLayerPaint(mFinalizer.mDeferredUpdater, paint.mNativePaint,
+ paint.getColorFilter() != null ? paint.getColorFilter().native_instance : 0);
}
/**
@@ -249,7 +250,7 @@ final class HardwareLayer {
private static native void nDestroyLayerUpdater(long layerUpdater);
private static native boolean nPrepare(long layerUpdater, int width, int height, boolean isOpaque);
- private static native void nSetLayerPaint(long layerUpdater, long paint);
+ private static native void nSetLayerPaint(long layerUpdater, long paint, long colorFilter);
private static native void nSetTransform(long layerUpdater, long matrix);
private static native void nSetSurfaceTexture(long layerUpdater,
SurfaceTexture surface, boolean isAlreadyAttached);
diff --git a/core/jni/android_view_HardwareLayer.cpp b/core/jni/android_view_HardwareLayer.cpp
index 5b21e9451a52..8a0a011479de 100644
--- a/core/jni/android_view_HardwareLayer.cpp
+++ b/core/jni/android_view_HardwareLayer.cpp
@@ -88,11 +88,13 @@ static jboolean android_view_HardwareLayer_prepare(JNIEnv* env, jobject clazz,
}
static void android_view_HardwareLayer_setLayerPaint(JNIEnv* env, jobject clazz,
- jlong layerUpdaterPtr, jlong paintPtr) {
+ jlong layerUpdaterPtr, jlong paintPtr, jlong colorFilterPtr) {
DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
if (layer) {
SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+ SkColorFilter* colorFilter = reinterpret_cast<SkColorFilter*>(colorFilterPtr);
layer->setPaint(paint);
+ layer->setColorFilter(colorFilter);
}
}
@@ -160,7 +162,7 @@ static JNINativeMethod gMethods[] = {
{ "nDestroyLayerUpdater", "(J)V", (void*) android_view_HardwareLayer_destroyLayerUpdater },
{ "nPrepare", "(JIIZ)Z", (void*) android_view_HardwareLayer_prepare },
- { "nSetLayerPaint", "(JJ)V", (void*) android_view_HardwareLayer_setLayerPaint },
+ { "nSetLayerPaint", "(JJJ)V", (void*) android_view_HardwareLayer_setLayerPaint },
{ "nSetTransform", "(JJ)V", (void*) android_view_HardwareLayer_setTransform },
{ "nSetSurfaceTexture", "(JLandroid/graphics/SurfaceTexture;Z)V",
(void*) android_view_HardwareLayer_setSurfaceTexture },
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);