Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a473c7d authored by jiayuanr's avatar jiayuanr Committed by Digish Pandya
Browse files

Fix the texture ID reuse issue in HWUI.

Issue: When the layer of previous frame is destroyed, it doesn't clear the
texture id in mBoundTextures[mTextureUnit], so in the next frame, if
glGenTexture returns same texture ID of the previous frame,
the new texture is not bound.

CRs-fixed: 671736

Change-Id: Ifc5fd2115fb1863b3c006ab14b0faabeaeb4eab4
parent 1a3908e9
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -554,11 +554,8 @@ void Caches::deleteTexture(GLuint texture) {
    // call, any texture operation will be performed on the default
    // texture (name=0)

    for (int i = 0; i < REQUIRED_TEXTURE_UNITS_COUNT; i++) {
        if (mBoundTextures[i] == texture) {
            mBoundTextures[i] = 0;
        }
    }
    unbindTexture(texture);

    glDeleteTextures(1, &texture);
}

@@ -566,6 +563,14 @@ void Caches::resetBoundTextures() {
    memset(mBoundTextures, 0, REQUIRED_TEXTURE_UNITS_COUNT * sizeof(GLuint));
}

void Caches::unbindTexture(GLuint texture) {
    for (int i = 0; i < REQUIRED_TEXTURE_UNITS_COUNT; i++) {
        if (mBoundTextures[i] == texture) {
            mBoundTextures[i] = 0;
        }
    }
}

///////////////////////////////////////////////////////////////////////////////
// Scissor
///////////////////////////////////////////////////////////////////////////////
+5 −0
Original line number Diff line number Diff line
@@ -263,6 +263,11 @@ public:
     */
    void resetBoundTextures();

    /**
     * Clear the cache of bound textures.
     */
    void unbindTexture(GLuint texture);

    /**
     * Sets the scissor for the current surface.
     */
+1 −0
Original line number Diff line number Diff line
@@ -171,6 +171,7 @@ void Layer::deleteTexture() {
}

void Layer::clearTexture() {
    caches.unbindTexture(texture.id);
    texture.id = 0;
}