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

Commit 2eaefe19 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

Simplify handling of opaque layers in shader generation

just ensure the alpha value is 1.0 in the opaque case
when reading the color from the texture or the
global color.

Bug: 8679321

Change-Id: Ia38b30e97c3bce5a2d534a40c0d66e0bfc3ea40d
parent 6db4ff62
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -140,30 +140,18 @@ String8 ProgramCache::generateFragmentShader(const Key& needs) {
    } else {
        fs << "gl_FragColor = color;";
    }
    if (needs.isOpaque()) {
        fs << "gl_FragColor.a = 1.0;";
    }
    if (needs.hasPlaneAlpha()) {
        // modulate the alpha value with planeAlpha
        if (needs.isPremultiplied()) {
            // ... and the color too if we're premultiplied
            if (needs.isOpaque()) {
                // ... we're opaque, only premultiply the color component
                fs << "gl_FragColor.rgb *= alphaPlane;"
                   << "gl_FragColor.a = alphaPlane;";
            } else {
            fs << "gl_FragColor *= alphaPlane;";
            }
        } else {
            // not premultiplied
            if (needs.isOpaque()) {
                fs << "gl_FragColor.a = alphaPlane;";
        } else {
            fs << "gl_FragColor.a *= alphaPlane;";
        }
    }
    } else {
        if (needs.isOpaque()) {
            fs << "gl_FragColor.a = 1.0;";
        }
    }
    fs << dedent << "}";
    return fs.getString();
}