give the proper orientation to the h/w composer HAL
we were using the "orientation" value instead of the real transform, which may contain arbitrary rotations for instance, and in some case ended up with a final "orientation" that looked valid, but wasn't. this fixes a problem on devices with a h/w composer hal where the rotation animation looked weird. Change-Id: I4be8a2a1bde49c33456fcf5c8d87ab515c216763
This commit is contained in:
parent
9509b9ce60
commit
d992db3827
@ -196,13 +196,12 @@ void Layer::setGeometry(hwc_layer_t* hwcl)
|
||||
* 1) buffer orientation/flip/mirror
|
||||
* 2) state transformation (window manager)
|
||||
* 3) layer orientation (screen orientation)
|
||||
* mOrientation is already the composition of (2) and (3)
|
||||
* mTransform is already the composition of (2) and (3)
|
||||
* (NOTE: the matrices are multiplied in reverse order)
|
||||
*/
|
||||
|
||||
const Transform bufferOrientation(mCurrentTransform);
|
||||
const Transform layerOrientation(mOrientation);
|
||||
const Transform tr(layerOrientation * bufferOrientation);
|
||||
const Transform tr(mTransform * bufferOrientation);
|
||||
|
||||
// this gives us only the "orientation" component of the transform
|
||||
const uint32_t finalTransform = tr.getOrientation();
|
||||
|
@ -257,6 +257,7 @@ void LayerBase::validateVisibility(const Transform& planeTransform)
|
||||
|
||||
// cache a few things...
|
||||
mOrientation = tr.getOrientation();
|
||||
mTransform = tr;
|
||||
mTransformedBounds = tr.makeBounds(w, h);
|
||||
mLeft = tr.tx();
|
||||
mTop = tr.ty();
|
||||
|
@ -247,6 +247,7 @@ private:
|
||||
protected:
|
||||
// cached during validateVisibility()
|
||||
int32_t mOrientation;
|
||||
Transform mTransform;
|
||||
GLfloat mVertices[4][2];
|
||||
Rect mTransformedBounds;
|
||||
int mLeft;
|
||||
|
Loading…
Reference in New Issue
Block a user