diff options
| author | 2010-07-16 15:07:42 -0700 | |
|---|---|---|
| committer | 2010-07-16 15:07:42 -0700 | |
| commit | 1e79386ba34f0db38c1b35b22cdf122632534354 (patch) | |
| tree | 35c3fe20c2dc66823ac1c7970e395748d8fe52a3 /libs/hwui/OpenGLRenderer.cpp | |
| parent | 079ba2c85b15e882629b8d188f5fbdb42f7f8eea (diff) | |
Optimize textures binding.
The renderer is still changing textures' wrap modes every time, this will require
a latter optimization.
Change-Id: I3eb92cb8c886c4a692b7f0ca759911f9371d4d2c
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index d950ffac7f4e..0bf0e8942a40 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -132,6 +132,8 @@ OpenGLRenderer::OpenGLRenderer(): mShaderMatrix = NULL; mShaderBitmap = NULL; + mLastTexture = 0; + memcpy(mDrawTextureVertices, gDrawTextureVertices, sizeof(gDrawTextureVertices)); } @@ -650,8 +652,11 @@ void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float b 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 @@ void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float b } else { glDrawElements(GL_TRIANGLES, elementsCount, GL_UNSIGNED_SHORT, indices); } - - glBindTexture(GL_TEXTURE_2D, 0); } void OpenGLRenderer::chooseBlending(bool blend, SkXfermode::Mode mode, bool isPremultiplied) { |