diff options
author | Romain Guy <romainguy@google.com> | 2012-09-25 12:17:14 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2012-09-25 12:22:21 -0700 |
commit | ef09a210dd6ea481158b7028ec2424a7f5769ed2 (patch) | |
tree | ac7cac37d1dbe20679cf102f36fee076bc07b120 /core/jni | |
parent | 509e2ced819ebaece2abb21693cb2046b5524c5b (diff) | |
download | frameworks_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.cpp | 6 |
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 }, |