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

Commit a1cf4a78 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Apply bilinear filtering on text only when necessary."

parents 2a2a38db e8cb9c14
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -437,8 +437,9 @@ void FontRenderer::initTextTexture() {
    glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, mCacheWidth, mCacheHeight, 0,
            GL_ALPHA, GL_UNSIGNED_BYTE, 0);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    mLinearFiltering = false;
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+11 −1
Original line number Diff line number Diff line
@@ -156,8 +156,16 @@ public:
    DropShadow renderDropShadow(SkPaint* paint, const char *text, uint32_t startIndex,
            uint32_t len, int numGlyphs, uint32_t radius);

    GLuint getTexture() {
    GLuint getTexture(bool linearFiltering = false) {
        checkInit();
        if (linearFiltering != mLinearFiltering) {
            mLinearFiltering = linearFiltering;
            const GLenum filtering = linearFiltering ? GL_LINEAR : GL_NEAREST;

            glBindTexture(GL_TEXTURE_2D, mTextureId);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
        }
        return mTextureId;
    }

@@ -252,6 +260,8 @@ protected:

    bool mInitialized;

    bool mLinearFiltering;

    void computeGaussianWeights(float* weights, int32_t radius);
    void horizontalBlur(float* weights, int32_t radius, const uint8_t *source, uint8_t *dest,
            int32_t width, int32_t height);
+9 −0
Original line number Diff line number Diff line
@@ -53,6 +53,15 @@ void Matrix4::loadIdentity() {
    mSimpleMatrix = true;
}

#define EPSILON 0.00001f
#define almost(u, v) (fabs((u) - (v)) < EPSILON)

bool Matrix4::changesBounds() {
    return !(almost(data[0], 1.0f) && almost(data[1], 0.0f) && almost(data[2], 0.0f) &&
             almost(data[4], 0.0f) && almost(data[5], 1.0f) && almost(data[6], 0.0f) &&
             almost(data[8], 0.0f) && almost(data[9], 0.0f) && almost(data[10], 1.0f));
}

void Matrix4::load(const float* v) {
    memcpy(data, v, sizeof(data));
    mSimpleMatrix = false;
+2 −0
Original line number Diff line number Diff line
@@ -103,6 +103,8 @@ public:
        multiply(u);
    }

    bool changesBounds();

    void copyTo(float* v) const;
    void copyTo(SkMatrix& v) const;

+4 −2
Original line number Diff line number Diff line
@@ -767,8 +767,10 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
    GLuint textureUnit = 0;
    glActiveTexture(gTextureUnits[textureUnit]);

    setupTextureAlpha8(fontRenderer.getTexture(), 0, 0, textureUnit, x, y, r, g, b, a,
            mode, false, true);
    // Assume that the modelView matrix does not force scales, rotates, etc.
    const bool linearFilter = mSnapshot->transform->changesBounds();
    setupTextureAlpha8(fontRenderer.getTexture(linearFilter), 0, 0, textureUnit,
            x, y, r, g, b, a, mode, false, true);

    const Rect& clip = mSnapshot->getLocalClip();
    clearLayerRegions();