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

Commit 574cf607 authored by Romain Guy's avatar Romain Guy
Browse files

Make sure we never bind to texture #0

Bug #7195815

Change-Id: Ibec4b2aa4c580419eb5eb61adae6c9c960694d0c
parent 8e586f61
Loading
Loading
Loading
Loading
+21 −23
Original line number Original line Diff line number Diff line
@@ -77,12 +77,7 @@ public:
    }
    }


    ~CacheTexture() {
    ~CacheTexture() {
        if (mTexture) {
        releaseTexture();
            delete[] mTexture;
        }
        if (mTextureId) {
            glDeleteTextures(1, &mTextureId);
        }
        reset();
        reset();
    }
    }


@@ -105,30 +100,31 @@ public:


    void releaseTexture() {
    void releaseTexture() {
        if (mTexture) {
        if (mTexture) {
            glDeleteTextures(1, &mTextureId);
            delete[] mTexture;
            delete[] mTexture;
            mTexture = NULL;
            mTexture = NULL;
        }
        if (mTextureId) {
            glDeleteTextures(1, &mTextureId);
            mTextureId = 0;
            mTextureId = 0;
        }
        }
        mDirty = false;
    }
    }


    /**
    /**
     * This method assumes that the proper texture unit is active.
     * This method assumes that the proper texture unit is active.
     */
     */
    void allocateTexture() {
    void allocateTexture() {
        int width = mWidth;
        if (!mTexture) {
        int height = mHeight;
            mTexture = new uint8_t[mWidth * mHeight];

        }
        mTexture = new uint8_t[width * height];


        if (!mTextureId) {
        if (!mTextureId) {
            glGenTextures(1, &mTextureId);
            glGenTextures(1, &mTextureId);
        }


            glBindTexture(GL_TEXTURE_2D, mTextureId);
            glBindTexture(GL_TEXTURE_2D, mTextureId);
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            // Initialize texture dimensions
            // Initialize texture dimensions
        glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0,
            glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, mWidth, mHeight, 0,
                    GL_ALPHA, GL_UNSIGNED_BYTE, 0);
                    GL_ALPHA, GL_UNSIGNED_BYTE, 0);


            const GLenum filtering = getLinearFiltering() ? GL_LINEAR : GL_NEAREST;
            const GLenum filtering = getLinearFiltering() ? GL_LINEAR : GL_NEAREST;
@@ -138,6 +134,7 @@ public:
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        }
        }
    }


    bool fitBitmap(const SkGlyph& glyph, uint32_t* retOriginX, uint32_t* retOriginY);
    bool fitBitmap(const SkGlyph& glyph, uint32_t* retOriginX, uint32_t* retOriginY);


@@ -153,7 +150,8 @@ public:
        return mTexture;
        return mTexture;
    }
    }


    inline GLuint getTextureId() const {
    GLuint getTextureId() {
        allocateTexture();
        return mTextureId;
        return mTextureId;
    }
    }