From 7b3dfa4d13ca79404f8b0be6e47002cf8daff0a2 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Thu, 16 Jan 2014 16:21:10 -0800 Subject: Transform shadow casters correctly in 3d Change-Id: I11067c5aa8c749089b6ee163ddafa91865cc0d9f --- libs/hwui/ShadowTessellator.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'libs') diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp index 6385ef79d0ea..ddd1c6d928ac 100644 --- a/libs/hwui/ShadowTessellator.cpp +++ b/libs/hwui/ShadowTessellator.cpp @@ -45,28 +45,23 @@ static inline T max(T a, T b) { */ void ShadowTessellator::generateCasterPolygon(float width, float height, const mat4& casterTransform, int vertexCount, Vector3* polygon) { - - Vector3 pivot(width / 2, height / 2, 0.0f); - casterTransform.mapPoint3d(pivot); - - // TODO: The zScaleFactor need to be mapped to the screen. - float zScaleFactor = 0.5; - Rect blockRect(pivot.x - width * zScaleFactor, pivot.y - height * zScaleFactor, - pivot.x + width * zScaleFactor, pivot.y + height * zScaleFactor); - - // Generate the caster's polygon from the rect. + Rect blockRect(0, 0, width, height); polygon[0].x = blockRect.left; polygon[0].y = blockRect.top; - polygon[0].z = pivot.z; + polygon[0].z = 0; polygon[1].x = blockRect.right; polygon[1].y = blockRect.top; - polygon[1].z = pivot.z; + polygon[1].z = 0; polygon[2].x = blockRect.right; polygon[2].y = blockRect.bottom; - polygon[2].z = pivot.z; + polygon[2].z = 0; polygon[3].x = blockRect.left; polygon[3].y = blockRect.bottom; - polygon[3].z = pivot.z; + polygon[3].z = 0; + casterTransform.mapPoint3d(polygon[0]); + casterTransform.mapPoint3d(polygon[1]); + casterTransform.mapPoint3d(polygon[2]); + casterTransform.mapPoint3d(polygon[3]); } void ShadowTessellator::tessellateAmbientShadow(float width, float height, -- cgit v1.2.3-59-g8ed1b