Optimize textures binding.
The renderer is still changing textures' wrap modes every time, this will require
a latter optimization.
Change-Id: I3eb92cb8c886c4a692b7f0ca759911f9371d4d2c
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index bcda45e7..3d263a3 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -115,7 +115,6 @@
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width, size.height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- glBindTexture(GL_TEXTURE_2D, 0);
// Bind texture to FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index d950ffa..0bf0e89 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -132,6 +132,8 @@
mShaderMatrix = NULL;
mShaderBitmap = NULL;
+ mLastTexture = 0;
+
memcpy(mDrawTextureVertices, gDrawTextureVertices, sizeof(gDrawTextureVertices));
}
@@ -650,8 +652,11 @@
chooseBlending(blend || alpha < 1.0f, mode);
- // TODO: Only bind/set parameters when needed
- glBindTexture(GL_TEXTURE_2D, texture);
+ if (texture != mLastTexture) {
+ glBindTexture(GL_TEXTURE_2D, texture);
+ mLastTexture = texture;
+ }
+ // TODO: Don't set the texture parameters every time
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gTileModes[mShaderTileX]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gTileModes[mShaderTileY]);
@@ -668,8 +673,6 @@
} else {
glDrawElements(GL_TRIANGLES, elementsCount, GL_UNSIGNED_SHORT, indices);
}
-
- glBindTexture(GL_TEXTURE_2D, 0);
}
void OpenGLRenderer::chooseBlending(bool blend, SkXfermode::Mode mode, bool isPremultiplied) {
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 5667229..235931c 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -311,6 +311,9 @@
// Used to draw textured quads
TextureVertex mDrawTextureVertices[4];
+ // Current texture state
+ GLuint mLastTexture;
+
// Last known blend state
bool mBlend;
GLenum mLastSrcMode;
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index 4977f46..ff7d7c9 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -146,8 +146,6 @@
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- glBindTexture(GL_TEXTURE_2D, 0);
}
}; // namespace uirenderer