Modulate shadow alpha by caster alpha
Change-Id: Ibc4b3958feb3b5dba91d30af470d76555a6209c8
diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp
index 6144f3d..23c33ca 100644
--- a/libs/hwui/DisplayList.cpp
+++ b/libs/hwui/DisplayList.cpp
@@ -661,7 +661,8 @@
if (mode == kNegativeZChildren && zValue > 0.0f) break;
DisplayList* child = childOp->mDisplayList;
- if (mode == kPositiveZChildren && zValue > 0.0f && child->mCastsShadow) {
+ if (mode == kPositiveZChildren && zValue > 0.0f
+ && child->mCastsShadow && child->mAlpha > 0.0f) {
/* draw shadow with parent matrix applied, passing in the child's total matrix
* TODO: consider depth in more complex scenarios (neg z, added shadow depth)
*/
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 2da0fd3..75bf716 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -3233,7 +3233,7 @@
// draw caster's shadows
if (mCaches.propertyAmbientShadowStrength > 0) {
- paint.setARGB(mCaches.propertyAmbientShadowStrength, 0, 0, 0);
+ paint.setARGB(casterAlpha * mCaches.propertyAmbientShadowStrength, 0, 0, 0);
VertexBuffer ambientShadowVertexBuffer;
ShadowTessellator::tessellateAmbientShadow(casterPolygon, casterVertexCount,
ambientShadowVertexBuffer);
@@ -3241,7 +3241,7 @@
}
if (mCaches.propertySpotShadowStrength > 0) {
- paint.setARGB(mCaches.propertySpotShadowStrength, 0, 0, 0);
+ paint.setARGB(casterAlpha * mCaches.propertySpotShadowStrength, 0, 0, 0);
VertexBuffer spotShadowVertexBuffer;
Vector3 lightPosScale(mCaches.propertyLightPosXScale,
mCaches.propertyLightPosYScale, mCaches.propertyLightPosZScale);