From 919e95cc23d3567345719f2466e089682608638e Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Fri, 21 Feb 2014 17:13:45 -0800 Subject: [PATCH] Modulate shadow alpha by caster alpha Change-Id: Ibc4b3958feb3b5dba91d30af470d76555a6209c8 --- libs/hwui/DisplayList.cpp | 3 ++- libs/hwui/OpenGLRenderer.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp index 6144f3df0a4da..23c33ca925474 100644 --- a/libs/hwui/DisplayList.cpp +++ b/libs/hwui/DisplayList.cpp @@ -661,7 +661,8 @@ void DisplayList::iterate3dChildren(ChildrenSelectMode mode, OpenGLRenderer& ren 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 2da0fd394eeb5..75bf716cef9e5 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -3233,7 +3233,7 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransform, float casterAlp // 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 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransform, float casterAlp } 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);