fix Layer croping in SurfaceFlinger
Bug: 7224628 Change-Id: I9421f0a06b9a27fe00eefaa1dfab8c4309c380c9
This commit is contained in:
parent
e96e9e1093
commit
a046dd9772
|
@ -232,10 +232,9 @@ void LayerBase::computeGeometry(const sp<const DisplayDevice>& hw, LayerMesh* me
|
||||||
const Layer::State& s(drawingState());
|
const Layer::State& s(drawingState());
|
||||||
const Transform tr(hw->getTransform() * s.transform);
|
const Transform tr(hw->getTransform() * s.transform);
|
||||||
const uint32_t hw_h = hw->getHeight();
|
const uint32_t hw_h = hw->getHeight();
|
||||||
const Rect& crop(s.active.crop);
|
|
||||||
Rect win(s.active.w, s.active.h);
|
Rect win(s.active.w, s.active.h);
|
||||||
if (!crop.isEmpty()) {
|
if (!s.active.crop.isEmpty()) {
|
||||||
win.intersect(crop, &win);
|
win.intersect(s.active.crop, &win);
|
||||||
}
|
}
|
||||||
if (mesh) {
|
if (mesh) {
|
||||||
tr.transform(mesh->mVertices[0], win.left, win.top);
|
tr.transform(mesh->mVertices[0], win.left, win.top);
|
||||||
|
@ -250,10 +249,9 @@ void LayerBase::computeGeometry(const sp<const DisplayDevice>& hw, LayerMesh* me
|
||||||
|
|
||||||
Rect LayerBase::computeBounds() const {
|
Rect LayerBase::computeBounds() const {
|
||||||
const Layer::State& s(drawingState());
|
const Layer::State& s(drawingState());
|
||||||
const Rect& crop(s.active.crop);
|
|
||||||
Rect win(s.active.w, s.active.h);
|
Rect win(s.active.w, s.active.h);
|
||||||
if (!crop.isEmpty()) {
|
if (!s.active.crop.isEmpty()) {
|
||||||
win.intersect(crop, &win);
|
win.intersect(s.active.crop, &win);
|
||||||
}
|
}
|
||||||
return s.transform.transform(win);
|
return s.transform.transform(win);
|
||||||
}
|
}
|
||||||
|
@ -400,14 +398,15 @@ void LayerBase::drawWithOpenGL(const sp<const DisplayDevice>& hw, const Region&
|
||||||
GLfloat v;
|
GLfloat v;
|
||||||
};
|
};
|
||||||
|
|
||||||
Rect crop(s.active.w, s.active.h);
|
Rect win(s.active.w, s.active.h);
|
||||||
if (!s.active.crop.isEmpty()) {
|
if (!s.active.crop.isEmpty()) {
|
||||||
crop = s.active.crop;
|
win.intersect(s.active.crop, &win);
|
||||||
}
|
}
|
||||||
GLfloat left = GLfloat(crop.left) / GLfloat(s.active.w);
|
|
||||||
GLfloat top = GLfloat(crop.top) / GLfloat(s.active.h);
|
GLfloat left = GLfloat(win.left) / GLfloat(s.active.w);
|
||||||
GLfloat right = GLfloat(crop.right) / GLfloat(s.active.w);
|
GLfloat top = GLfloat(win.top) / GLfloat(s.active.h);
|
||||||
GLfloat bottom = GLfloat(crop.bottom) / GLfloat(s.active.h);
|
GLfloat right = GLfloat(win.right) / GLfloat(s.active.w);
|
||||||
|
GLfloat bottom = GLfloat(win.bottom) / GLfloat(s.active.h);
|
||||||
|
|
||||||
TexCoords texCoords[4];
|
TexCoords texCoords[4];
|
||||||
texCoords[0].u = left;
|
texCoords[0].u = left;
|
||||||
|
|
Loading…
Reference in New Issue