OSDN Git Service

Ensure Texture always binds to self
authorJohn Reck <jreck@google.com>
Thu, 21 Jan 2016 17:08:42 +0000 (09:08 -0800)
committerJohn Reck <jreck@google.com>
Thu, 21 Jan 2016 17:08:42 +0000 (09:08 -0800)
Bug: 26584230

In the event that Texture decides it doesn't
need to actually call glTexImage2D/glSubTexImage2D
it needs to still activateTexture(0) and bindTexture(mId)
as this is the expected state after Texture::upload()
is called.

Change-Id: I62d689a9057907a10dda2bc8f40c3113e43b93b2

libs/hwui/Texture.cpp

index 9fc0c19..c5000e4 100644 (file)
@@ -95,28 +95,21 @@ bool Texture::updateSize(uint32_t width, uint32_t height, GLint format) {
 void Texture::upload(GLint internalformat, uint32_t width, uint32_t height,
         GLenum format, GLenum type, const void* pixels) {
     GL_CHECKPOINT();
-    bool needsAlloc = updateSize(width, height, internalformat);
-    if (!needsAlloc && !pixels) {
-        return;
-    }
     mCaches.textureState().activateTexture(0);
-    GL_CHECKPOINT();
+    bool needsAlloc = updateSize(width, height, internalformat);
     if (!mId) {
         glGenTextures(1, &mId);
         needsAlloc = true;
     }
-    GL_CHECKPOINT();
     mCaches.textureState().bindTexture(GL_TEXTURE_2D, mId);
-    GL_CHECKPOINT();
     if (needsAlloc) {
         glTexImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
                 format, type, pixels);
-        GL_CHECKPOINT();
-    } else {
+    } else if (pixels) {
         glTexSubImage2D(GL_TEXTURE_2D, 0, mFormat, mWidth, mHeight, 0,
                 format, type, pixels);
-        GL_CHECKPOINT();
     }
+    GL_CHECKPOINT();
 }
 
 static void uploadToTexture(bool resize, GLenum format, GLenum type, GLsizei stride, GLsizei bpp,