From 9a7fe1a034bf0a9dea7c0676211bb780d3ab30be Mon Sep 17 00:00:00 2001 From: John Reck Date: Thu, 11 Dec 2014 14:27:39 -0800 Subject: [PATCH] Force-flush state sync on texid change Bug: 18718646 Caused because the Texture object thought the GLES texture was in a different state than it was as it persists across EGL/GL contexts. Fix this by force-flushing the default values when the texid has changed. Change-Id: I264bac9a2beb08df8e2ba8a85ad15f0dd1fce22a --- libs/hwui/AssetAtlas.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/hwui/AssetAtlas.cpp b/libs/hwui/AssetAtlas.cpp index c6de53594b0f..52ca92dcd388 100644 --- a/libs/hwui/AssetAtlas.cpp +++ b/libs/hwui/AssetAtlas.cpp @@ -64,6 +64,12 @@ void AssetAtlas::terminate() { void AssetAtlas::updateTextureId() { mTexture->id = mImage ? mImage->getTexture() : 0; + if (mTexture->id) { + // Texture ID changed, force-set to defaults to sync the wrapper & GL + // state objects + mTexture->setWrap(GL_CLAMP_TO_EDGE, false, true); + mTexture->setFilter(GL_NEAREST, false, true); + } for (size_t i = 0; i < mEntries.size(); i++) { AssetAtlas::Entry* entry = mEntries.valueAt(i); entry->texture->id = mTexture->id;