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
This commit is contained in:
Mathias Agopian 2013-08-14 16:33:27 -07:00
parent 6db4ff6218
commit 2eaefe198a

View File

@ -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();
}