summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/GLES20Canvas.java7
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp5
-rw-r--r--libs/hwui/DeferredDisplayList.cpp7
3 files changed, 12 insertions, 7 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index c369ebe..2ec9a7d 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -399,12 +399,13 @@ class GLES20Canvas extends HardwareCanvas {
///////////////////////////////////////////////////////////////////////////
void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
+ layer.setLayerPaint(paint);
+
final GLES20Layer glLayer = (GLES20Layer) layer;
- final int nativePaint = paint == null ? 0 : paint.mNativePaint;
- nDrawLayer(mRenderer, glLayer.getLayer(), x, y, nativePaint);
+ nDrawLayer(mRenderer, glLayer.getLayer(), x, y);
}
- private static native void nDrawLayer(int renderer, int layer, float x, float y, int paint);
+ private static native void nDrawLayer(int renderer, int layer, float x, float y);
void interrupt() {
nInterrupt(mRenderer);
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 3a23aa1..b87fe27 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -868,8 +868,7 @@ static void android_view_GLES20Canvas_destroyLayerDeferred(JNIEnv* env,
}
static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
- OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y, SkPaint* paint) {
- // TODO: don't pass the paint from java
+ OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y) {
renderer->drawLayer(layer, x, y);
}
@@ -1051,7 +1050,7 @@ static JNINativeMethod gMethods[] = {
{ "nClearLayerTexture", "(I)V", (void*) android_view_GLES20Canvas_clearLayerTexture },
{ "nDestroyLayer", "(I)V", (void*) android_view_GLES20Canvas_destroyLayer },
{ "nDestroyLayerDeferred", "(I)V", (void*) android_view_GLES20Canvas_destroyLayerDeferred },
- { "nDrawLayer", "(IIFFI)V", (void*) android_view_GLES20Canvas_drawLayer },
+ { "nDrawLayer", "(IIFF)V", (void*) android_view_GLES20Canvas_drawLayer },
{ "nCopyLayer", "(II)Z", (void*) android_view_GLES20Canvas_copyLayer },
{ "nClearLayerUpdates", "(I)V", (void*) android_view_GLES20Canvas_clearLayerUpdates },
{ "nPushLayerUpdate", "(II)V", (void*) android_view_GLES20Canvas_pushLayerUpdate },
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index 7907224..020c1e9 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -368,13 +368,18 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
status_t status = DrawGlInfo::kStatusDone;
if (isEmpty()) return status; // nothing to flush
+ renderer.restoreToCount(1);
DEFER_LOGD("--flushing");
renderer.eventMark("Flush");
+ // save and restore (with draw modifiers) so that reordering doesn't affect final state
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
- renderer.restoreToCount(1);
+ renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
+
status |= replayBatchList(mBatches, renderer, dirty);
+
+ renderer.restoreToCount(1);
renderer.setDrawModifiers(restoreDrawModifiers);
DEFER_LOGD("--flush complete, returning %x", status);