Reduce the number of active texture changes
Change-Id: I94046bdfe20740c26c8183822e3002d692fde7c4
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 27556d9..3c6a952 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -615,6 +615,8 @@
return;
}
+ Caches& caches = Caches::getInstance();
+ GLuint lastTextureId = 0;
// Iterate over all the cache lines and see which ones need to be updated
for (uint32_t i = 0; i < mCacheLines.size(); i++) {
CacheTextureLine* cl = mCacheLines[i];
@@ -626,7 +628,11 @@
uint32_t height = cl->mMaxHeight;
void* textureData = cacheTexture->mTexture + (yOffset * width);
- glBindTexture(GL_TEXTURE_2D, cacheTexture->mTextureId);
+ if (cacheTexture->mTextureId != lastTextureId) {
+ caches.activeTexture(0);
+ glBindTexture(GL_TEXTURE_2D, cacheTexture->mTextureId);
+ lastTextureId = cacheTexture->mTextureId;
+ }
glTexSubImage2D(GL_TEXTURE_2D, 0, xOffset, yOffset, width, height,
GL_ALPHA, GL_UNSIGNED_BYTE, textureData);
@@ -644,6 +650,7 @@
checkTextureUpdate();
Caches& caches = Caches::getInstance();
+ caches.bindIndicesBuffer(mIndexBufferID);
if (!mDrawn) {
float* buffer = mTextMeshPtr;
int offset = 2;
@@ -654,7 +661,6 @@
buffer + offset);
}
- caches.bindIndicesBuffer(mIndexBufferID);
glDrawElements(GL_TRIANGLES, mCurrentQuadIndex * 6, GL_UNSIGNED_SHORT, NULL);
mDrawn = true;
@@ -779,6 +785,7 @@
return image;
}
+ mDrawn = false;
mClip = NULL;
mBounds = NULL;
@@ -806,6 +813,7 @@
image.image = dataBuffer;
image.penX = penX;
image.penY = penY;
+
return image;
}