Loading libs/ui/Transform.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -381,6 +381,37 @@ bool Transform::preserveRects() const return (getOrientation() & ROT_INVALID) ? false : true; } mat4 Transform::asMatrix4() const { // Internally Transform uses a 3x3 matrix since the transform is meant for // two-dimensional values. An equivalent 4x4 matrix means inserting an extra // row and column which adds as an identity transform on the third // dimension. mat4 m = mat4{mat4::NO_INIT}; // NO_INIT since we explicitly set every element m[0][0] = mMatrix[0][0]; m[0][1] = mMatrix[0][1]; m[0][2] = 0.f; m[0][3] = mMatrix[0][2]; m[1][0] = mMatrix[1][0]; m[1][1] = mMatrix[1][1]; m[1][2] = 0.f; m[1][3] = mMatrix[1][2]; m[2][0] = 0.f; m[2][1] = 0.f; m[2][2] = 1.f; m[2][3] = 0.f; m[3][0] = mMatrix[2][0]; m[3][1] = mMatrix[2][1]; m[3][2] = 0.f; m[3][3] = mMatrix[2][2]; return m; } void Transform::dump(std::string& out, const char* name) const { using android::base::StringAppendF; Loading libs/ui/include/ui/Transform.h +4 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <string> #include <hardware/hardware.h> #include <math/mat4.h> #include <math/vec2.h> #include <math/vec3.h> #include <ui/Point.h> Loading Loading @@ -88,6 +89,9 @@ public: vec2 transform(const vec2& v) const; vec3 transform(const vec3& v) const; // Expands from the internal 3x3 matrix to an equivalent 4x4 matrix mat4 asMatrix4() const; Transform inverse() const; // for debugging Loading services/surfaceflinger/SurfaceFlinger.cpp +2 −23 Original line number Diff line number Diff line Loading @@ -3288,17 +3288,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<DisplayDevice>& displayDevice, clientCompositionDisplay.physicalDisplay = displayState.scissor; clientCompositionDisplay.clip = displayState.scissor; const ui::Transform& displayTransform = displayState.transform; mat4 m; m[0][0] = displayTransform[0][0]; m[0][1] = displayTransform[0][1]; m[0][3] = displayTransform[0][2]; m[1][0] = displayTransform[1][0]; m[1][1] = displayTransform[1][1]; m[1][3] = displayTransform[1][2]; m[3][0] = displayTransform[2][0]; m[3][1] = displayTransform[2][1]; m[3][3] = displayTransform[2][2]; clientCompositionDisplay.globalTransform = m; clientCompositionDisplay.globalTransform = displayTransform.asMatrix4(); const auto* profile = display->getDisplayColorProfile(); Dataspace outputDataspace = Dataspace::UNKNOWN; Loading Loading @@ -5591,18 +5581,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, // buffer bounds. clientCompositionDisplay.physicalDisplay = Rect(reqWidth, reqHeight); ui::Transform transform = renderArea.getTransform(); mat4 m; m[0][0] = transform[0][0]; m[0][1] = transform[0][1]; m[0][3] = transform[0][2]; m[1][0] = transform[1][0]; m[1][1] = transform[1][1]; m[1][3] = transform[1][2]; m[3][0] = transform[2][0]; m[3][1] = transform[2][1]; m[3][3] = transform[2][2]; clientCompositionDisplay.globalTransform = m; clientCompositionDisplay.globalTransform = transform.asMatrix4(); mat4 rotMatrix; // Displacement for repositioning the clipping rectangle after rotating it // with the rotation hint. Loading Loading
libs/ui/Transform.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -381,6 +381,37 @@ bool Transform::preserveRects() const return (getOrientation() & ROT_INVALID) ? false : true; } mat4 Transform::asMatrix4() const { // Internally Transform uses a 3x3 matrix since the transform is meant for // two-dimensional values. An equivalent 4x4 matrix means inserting an extra // row and column which adds as an identity transform on the third // dimension. mat4 m = mat4{mat4::NO_INIT}; // NO_INIT since we explicitly set every element m[0][0] = mMatrix[0][0]; m[0][1] = mMatrix[0][1]; m[0][2] = 0.f; m[0][3] = mMatrix[0][2]; m[1][0] = mMatrix[1][0]; m[1][1] = mMatrix[1][1]; m[1][2] = 0.f; m[1][3] = mMatrix[1][2]; m[2][0] = 0.f; m[2][1] = 0.f; m[2][2] = 1.f; m[2][3] = 0.f; m[3][0] = mMatrix[2][0]; m[3][1] = mMatrix[2][1]; m[3][2] = 0.f; m[3][3] = mMatrix[2][2]; return m; } void Transform::dump(std::string& out, const char* name) const { using android::base::StringAppendF; Loading
libs/ui/include/ui/Transform.h +4 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <string> #include <hardware/hardware.h> #include <math/mat4.h> #include <math/vec2.h> #include <math/vec3.h> #include <ui/Point.h> Loading Loading @@ -88,6 +89,9 @@ public: vec2 transform(const vec2& v) const; vec3 transform(const vec3& v) const; // Expands from the internal 3x3 matrix to an equivalent 4x4 matrix mat4 asMatrix4() const; Transform inverse() const; // for debugging Loading
services/surfaceflinger/SurfaceFlinger.cpp +2 −23 Original line number Diff line number Diff line Loading @@ -3288,17 +3288,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<DisplayDevice>& displayDevice, clientCompositionDisplay.physicalDisplay = displayState.scissor; clientCompositionDisplay.clip = displayState.scissor; const ui::Transform& displayTransform = displayState.transform; mat4 m; m[0][0] = displayTransform[0][0]; m[0][1] = displayTransform[0][1]; m[0][3] = displayTransform[0][2]; m[1][0] = displayTransform[1][0]; m[1][1] = displayTransform[1][1]; m[1][3] = displayTransform[1][2]; m[3][0] = displayTransform[2][0]; m[3][1] = displayTransform[2][1]; m[3][3] = displayTransform[2][2]; clientCompositionDisplay.globalTransform = m; clientCompositionDisplay.globalTransform = displayTransform.asMatrix4(); const auto* profile = display->getDisplayColorProfile(); Dataspace outputDataspace = Dataspace::UNKNOWN; Loading Loading @@ -5591,18 +5581,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, // buffer bounds. clientCompositionDisplay.physicalDisplay = Rect(reqWidth, reqHeight); ui::Transform transform = renderArea.getTransform(); mat4 m; m[0][0] = transform[0][0]; m[0][1] = transform[0][1]; m[0][3] = transform[0][2]; m[1][0] = transform[1][0]; m[1][1] = transform[1][1]; m[1][3] = transform[1][2]; m[3][0] = transform[2][0]; m[3][1] = transform[2][1]; m[3][3] = transform[2][2]; clientCompositionDisplay.globalTransform = m; clientCompositionDisplay.globalTransform = transform.asMatrix4(); mat4 rotMatrix; // Displacement for repositioning the clipping rectangle after rotating it // with the rotation hint. Loading