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:
parent
6db4ff6218
commit
2eaefe198a
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user