diff options
author | Fred Fettinger <fred.fettinger@motorola.com> | 2014-08-29 14:02:31 -0500 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2014-10-09 00:57:17 +0000 |
commit | b4093c12f8a8cf73f869419904c60e953f5725ee (patch) | |
tree | 1a42091cbee7d448177b2ff6f3a73949958dfc1c /docs/html/sdk/api_diff/18/changes | |
parent | 63cd4977fd72de401f347ba159a71fe3d04399b3 (diff) |
hwui: Caches: use mBoundTextures only for GL_TEXTURE_2D - DO NOT MERGE
Cherry-picked into klp-modular-dev.
bug:17441218
GLConsumer uses glBindTexture() directly instead of going through
Caches::bindTexture(). This can cause libhwui to draw with the wrong
texture bound in the following case which involves 2 TextureViews:
Frame 1:
GLConsumer::updateTexImage() calls glBindTexture(GL_TEXTURE_EXTERNAL_OES, 1)
HWUI renders TextureView A:
calls Caches::bindTexture(GL_TEXTURE_EXTERNAL_OES, 1) and draws
Frame 2:
GLConsumer::updateTexImage() calls glBindTexture(GL_TEXTURE_EXTERNAL_OES, 1)
GLConsumer::updateTexImage() calls glBindTexture(GL_TEXTURE_EXTERNAL_OES, 2)
HWUI renders TextureView A:
calls Caches::bindTexture(GL_TEXTURE_EXTERNAL_OES, 1) and draws
HWUI renders TextureView B:
calls Caches::bindTexture(GL_TEXTURE_EXTERNAL_OES, 2) and draws
In this case, HWUI will incorrectly draw TextureView A using texture 2 on
frame 2, because mBoundTextures[0]=1, even though the texture currently
bound to GL_TEXTURE_EXTERNAL_OES is 2.
Since GLConsumer is always used with a target of GL_TEXTURE_EXTERNAL_OES,
work around this problem by having mBoundTextures[] store only the
textures bound to the target GL_TEXTURE_2D. This is the common case
where the extra performance is needed. Since it's legal to have
different textures bound to GL_TEXTURE_2D and GL_TEXTURE_EXTERNAL_OES
on one texture unit, Caches::bindTexture() does not need to clear
mBoundTextures[mTextureUnit] when target != GL_TEXTURE_2D.
Change-Id: I8bc54ab8adcfacad7f3ed17a31236dc7a86c967a
Signed-off-by: Fred Fettinger <fred.fettinger@motorola.com>
(cherry picked from commit e4de36bbc2baf13206deb53ced39f0befadb1861)
Diffstat (limited to 'docs/html/sdk/api_diff/18/changes')
0 files changed, 0 insertions, 0 deletions