diff options
| author | 2014-04-22 17:55:41 -0700 | |
|---|---|---|
| committer | 2014-04-23 13:23:30 -0700 | |
| commit | e0bb87d4bdbd3b08ab6a8569c8e564ed59b8a5a7 (patch) | |
| tree | 00cc21b9b9ee4237245829ae0eb55abe935f26e8 /libs/hwui/RenderNode.cpp | |
| parent | ceb5d17f6a2f5c144948ada1d59ec4f12da64799 (diff) | |
Fix translationZ matrix computation
bug:14259972
Ensure that translationZ is applied for true3dTransform property
transformations, even if the node doesn't have any other
transformation properties set.
Additionally, use fuzzy compare for translationZ, similar to
rotationX/Y, since they're expenive to leave set in rounding error
cases.
Change-Id: Idafa4423cc7751a8f433237b1f576aa7abb74f6e
Diffstat (limited to 'libs/hwui/RenderNode.cpp')
| -rw-r--r-- | libs/hwui/RenderNode.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index cf218347ee2a..9aa47a3b2529 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -26,6 +26,7 @@ #include "Debug.h" #include "DisplayListOp.h" #include "DisplayListLogBuffer.h" +#include "utils/MathUtils.h" namespace android { namespace uirenderer { @@ -217,7 +218,9 @@ void RenderNode::applyViewPropertyTransforms(mat4& matrix, bool true3dTransform) mat4 anim(*properties().getAnimationMatrix()); matrix.multiply(anim); } - if (properties().hasTransformMatrix()) { + + bool applyTranslationZ = true3dTransform && !MathUtils::isZero(properties().getTranslationZ()); + if (properties().hasTransformMatrix() || applyTranslationZ) { if (properties().isTransformTranslateOnly()) { matrix.translate(properties().getTranslationX(), properties().getTranslationY(), true3dTransform ? properties().getTranslationZ() : 0.0f); @@ -391,7 +394,7 @@ void RenderNode::buildZSortedChildList(Vector<ZDrawDisplayListOpPair>& zTranslat RenderNode* child = childOp->mDisplayList; float childZ = child->properties().getTranslationZ(); - if (childZ != 0.0f) { + if (!MathUtils::isZero(childZ)) { zTranslatedNodes.add(ZDrawDisplayListOpPair(childZ, childOp)); childOp->mSkipInOrderDraw = true; } else if (!child->properties().getProjectBackwards()) { |