diff options
| author | Alex Stetson <alexstetson@google.com> | 2022-07-07 17:42:00 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-07-07 17:42:00 +0000 |
| commit | ed5f49d918ed54ac08474bfc26d6b7760d44a2db (patch) | |
| tree | 0791b121af71b822ce898a2c81212220a0e658e1 /core/java/android | |
| parent | c761b5c52be614d1013691b4816a491b905cb062 (diff) | |
| parent | 670bce215dfc170dd4a73b8d0810a3368781125b (diff) | |
Merge "Scale light z value relative to screen size" into tm-qpr-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 785735c2b1e1..c97eb73c120b 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -25,11 +25,11 @@ import android.graphics.BLASTBufferQueue; import android.graphics.FrameInfo; import android.graphics.HardwareRenderer; import android.graphics.Picture; -import android.graphics.Point; import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.RenderNode; import android.os.Trace; +import android.util.DisplayMetrics; import android.util.Log; import android.view.Surface.OutOfResourcesException; import android.view.View.AttachInfo; @@ -596,11 +596,18 @@ public final class ThreadedRenderer extends HardwareRenderer { */ void setLightCenter(AttachInfo attachInfo) { // Adjust light position for window offsets. - final Point displaySize = attachInfo.mPoint; - attachInfo.mDisplay.getRealSize(displaySize); - final float lightX = displaySize.x / 2f - attachInfo.mWindowLeft; + DisplayMetrics displayMetrics = new DisplayMetrics(); + attachInfo.mDisplay.getRealMetrics(displayMetrics); + final float lightX = displayMetrics.widthPixels / 2f - attachInfo.mWindowLeft; final float lightY = mLightY - attachInfo.mWindowTop; - setLightSourceGeometry(lightX, lightY, mLightZ, mLightRadius); + // To prevent shadow distortion on larger screens, scale the z position of the light source + // relative to the smallest screen dimension. + final float zRatio = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels) + / (450f * displayMetrics.density); + final float zWeightedAdjustment = (zRatio + 2) / 3f; + final float lightZ = mLightZ * zWeightedAdjustment; + + setLightSourceGeometry(lightX, lightY, lightZ, mLightRadius); } /** @@ -849,12 +856,18 @@ public final class ThreadedRenderer extends HardwareRenderer { public void setLightCenter(final Display display, final int windowLeft, final int windowTop) { // Adjust light position for window offsets. - final Point displaySize = new Point(); - display.getRealSize(displaySize); - final float lightX = displaySize.x / 2f - windowLeft; + DisplayMetrics displayMetrics = new DisplayMetrics(); + display.getRealMetrics(displayMetrics); + final float lightX = displayMetrics.widthPixels / 2f - windowLeft; final float lightY = mLightY - windowTop; - - setLightSourceGeometry(lightX, lightY, mLightZ, mLightRadius); + // To prevent shadow distortion on larger screens, scale the z position of the light + // source relative to the smallest screen dimension. + final float zRatio = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels) + / (450f * displayMetrics.density); + final float zWeightedAdjustment = (zRatio + 2) / 3f; + final float lightZ = mLightZ * zWeightedAdjustment; + + setLightSourceGeometry(lightX, lightY, lightZ, mLightRadius); } public RenderNode getRootNode() { |
