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

Commit 38c97237 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Selectively disable filtering if estimated safe" into oc-dev

parents a96d7491 7bf96a0a
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -456,11 +456,13 @@ GlopBuilder& GlopBuilder::setFillTextureLayer(GlLayer& layer, float alpha) {
    return *this;
}

GlopBuilder& GlopBuilder::setFillExternalTexture(Texture& texture, Matrix4& textureTransform) {
GlopBuilder& GlopBuilder::setFillExternalTexture(Texture& texture, Matrix4& textureTransform,
        bool requiresFilter) {
    TRIGGER_STAGE(kFillStage);
    REQUIRE_STAGES(kMeshStage | kRoundRectClipStage);

    mOutGlop->fill.texture = { &texture, GL_LINEAR, GL_CLAMP_TO_EDGE, &textureTransform };
    GLenum filter = requiresFilter ? GL_LINEAR : GL_NEAREST;
    mOutGlop->fill.texture = { &texture, filter, GL_CLAMP_TO_EDGE, &textureTransform };

    setFill(SK_ColorWHITE, 1.0f, SkBlendMode::kSrc, Blend::ModeOrderSwap::NoSwap,
            nullptr, nullptr);
+2 −1
Original line number Diff line number Diff line
@@ -75,7 +75,8 @@ public:
    GlopBuilder& setFillTextureLayer(GlLayer& layer, float alpha);
    // TODO: setFillLayer normally forces its own wrap & filter mode,
    // which isn't always correct.
    GlopBuilder& setFillExternalTexture(Texture& texture, Matrix4& textureTransform);
    GlopBuilder& setFillExternalTexture(Texture& texture, Matrix4& textureTransform,
            bool requiresFilter);

    GlopBuilder& setTransform(const Matrix4& canvas, const int transformFlags);

+7 −1
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ inline CopyResult copyTextureInto(Caches& caches, RenderState& renderState,
            GL_TEXTURE_2D, texture, 0);

    {
        bool requiresFilter;
        // Draw & readback
        renderState.setViewport(destWidth, destHeight);
        renderState.scissor().setEnabled(false);
@@ -208,12 +209,17 @@ inline CopyResult copyTextureInto(Caches& caches, RenderState& renderState,
            croppedTexTransform.scale(srcRect.getWidth() / sourceTexture.width(),
                    srcRect.getHeight() / sourceTexture.height(), 1);
            croppedTexTransform.multiply(sFlipV);
            requiresFilter = srcRect.getWidth() != (float) destWidth
                    || srcRect.getHeight() != (float) destHeight;
        } else {
            requiresFilter = sourceTexture.width() != (uint32_t) destWidth
                    || sourceTexture.height() != (uint32_t) destHeight;
        }
        Glop glop;
        GlopBuilder(renderState, caches, &glop)
                .setRoundRectClipState(nullptr)
                .setMeshTexturedUnitQuad(nullptr)
                .setFillExternalTexture(sourceTexture, croppedTexTransform)
                .setFillExternalTexture(sourceTexture, croppedTexTransform, requiresFilter)
                .setTransform(Matrix4::identity(), TransformFlags::None)
                .setModelViewMapUnitToRect(Rect(destWidth, destHeight))
                .build();