summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-09-25 12:17:14 -0700
committerRomain Guy <romainguy@google.com>2012-09-25 12:22:21 -0700
commitef09a210dd6ea481158b7028ec2424a7f5769ed2 (patch)
treeac7cac37d1dbe20679cf102f36fee076bc07b120 /core/jni
parent509e2ced819ebaece2abb21693cb2046b5524c5b (diff)
downloadframeworks_base-ef09a210dd6ea481158b7028ec2424a7f5769ed2.zip
frameworks_base-ef09a210dd6ea481158b7028ec2424a7f5769ed2.tar.gz
frameworks_base-ef09a210dd6ea481158b7028ec2424a7f5769ed2.tar.bz2
Don't destroy the same texture twice
Bug #7221449 SurfaceTexture already deletes the GL texture when detachFromContext is invoked. The newly introduced refcount would casue the Layer object to be destroyed later and attempt to delete the GL texture again. By the time the second cleanup occurs, the texture name might have been reused by somebody else, resulting in erroneous behaviors. Change-Id: I257c589fea64b34c00f46fbfaa7732e6854a5e41
Diffstat (limited to 'core/jni')
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index a3834ac..1b71b43 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -822,6 +822,11 @@ static void android_view_GLES20Canvas_updateRenderLayer(JNIEnv* env, jobject cla
layer->updateDeferred(renderer, displayList, left, top, right, bottom);
}
+static void android_view_GLES20Canvas_clearLayerTexture(JNIEnv* env, jobject clazz,
+ Layer* layer) {
+ layer->clearTexture();
+}
+
static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
Layer* layer, SkMatrix* matrix) {
@@ -1016,6 +1021,7 @@ static JNINativeMethod gMethods[] = {
{ "nUpdateTextureLayer", "(IIIZLandroid/graphics/SurfaceTexture;)V",
(void*) android_view_GLES20Canvas_updateTextureLayer },
{ "nUpdateRenderLayer", "(IIIIIII)V", (void*) android_view_GLES20Canvas_updateRenderLayer },
+ { "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 },