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

Commit d8a84a86 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Correct bitmap merging logic" into klp-dev

parents 7c1b1087 996fe656
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -772,7 +772,7 @@ public:
        TextureVertex* vertex = &vertices[0];

        const bool hasLayer = renderer.hasLayer();
        bool transformed = false;
        bool pureTranslate = true;

        // TODO: manually handle rect clip for bitmaps by adjusting texCoords per op,
        // and allowing them to be merged in getBatchId()
@@ -782,7 +782,7 @@ public:
            // When we reach multiDraw(), the matrix can be either
            // pureTranslate or simple (translate and/or scale).
            // If the matrix is not pureTranslate, then we have a scale
            if (state.mMatrix.isPureTranslate()) transformed = true;
            pureTranslate &= state.mMatrix.isPureTranslate();

            Rect texCoords(0, 0, 1, 1);
            ((DrawBitmapOp*) ops[i].op)->mUvMapper.map(texCoords);
@@ -801,7 +801,7 @@ public:
        }

        return renderer.drawBitmaps(mBitmap, mEntry, ops.size(), &vertices[0],
                transformed, bounds, mPaint);
                pureTranslate, bounds, mPaint);
    }

    virtual void output(int level, uint32_t logFlags) const {
+1 −5
Original line number Diff line number Diff line
@@ -110,10 +110,6 @@ uint8_t Matrix4::getType() const {
                mType |= kTypeRectToRect;
            }
        }

        if (m00 > 0.0f && m11 > 0.0f) {
            mType |= kTypePositiveScale;
        }
    }
    return mType;
}
@@ -127,7 +123,7 @@ bool Matrix4::rectToRect() const {
}

bool Matrix4::positiveScale() const {
    return getType() & kTypePositiveScale;
    return (data[kScaleX] > 0.0f && data[kScaleY] > 0.0f);
}

bool Matrix4::changesBounds() const {
+1 −2
Original line number Diff line number Diff line
@@ -64,8 +64,7 @@ public:
        kTypeAffine = 0x4,
        kTypePerspective = 0x8,
        kTypeRectToRect = 0x10,
        kTypePositiveScale = 0x20,
        kTypeUnknown = 0x40,
        kTypeUnknown = 0x20,
    };

    static const int sGeometryMask = 0xf;
+2 −2
Original line number Diff line number Diff line
@@ -2096,7 +2096,7 @@ void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, Sk
 * The caller is responsible for properly dirtying the current layer.
 */
status_t OpenGLRenderer::drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
        TextureVertex* vertices, bool transformed, const Rect& bounds, SkPaint* paint) {
        TextureVertex* vertices, bool pureTranslate, const Rect& bounds, SkPaint* paint) {
    mCaches.activeTexture(0);
    Texture* texture = entry ? entry->texture : mCaches.textureCache.get(bitmap);
    if (!texture) return DrawGlInfo::kStatusDone;
@@ -2108,7 +2108,7 @@ status_t OpenGLRenderer::drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry,
    getAlphaAndMode(paint, &alpha, &mode);

    texture->setWrap(GL_CLAMP_TO_EDGE, true);
    texture->setFilter(transformed ? FILTER(paint) : GL_NEAREST, true);
    texture->setFilter(pureTranslate ? GL_NEAREST : FILTER(paint), true);

    const float x = (int) floorf(bounds.left + 0.5f);
    const float y = (int) floorf(bounds.top + 0.5f);
+1 −1
Original line number Diff line number Diff line
@@ -285,7 +285,7 @@ public:
    virtual status_t drawLayer(Layer* layer, float x, float y);
    virtual status_t drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
    status_t drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
            TextureVertex* vertices, bool transformed, const Rect& bounds, SkPaint* paint);
            TextureVertex* vertices, bool pureTranslate, const Rect& bounds, SkPaint* paint);
    virtual status_t drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
    virtual status_t drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
            float srcRight, float srcBottom, float dstLeft, float dstTop,