Skip to content

Commit b8460d1

Browse files
Romain GuyAndroid (Google) Code Review
authored andcommitted
Merge "Take into account the texture layer's transform for clipping Bug #7370212" into jb-mr1-dev
2 parents 23fa032 + b2e2f24 commit b8460d1

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

core/jni/android_view_GLES20Canvas.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,6 @@ static void android_view_GLES20Canvas_clearLayerTexture(JNIEnv* env, jobject cla
829829

830830
static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
831831
Layer* layer, SkMatrix* matrix) {
832-
833832
layer->getTransform().load(*matrix);
834833
}
835834

libs/hwui/Layer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ struct Layer {
209209
}
210210

211211
inline void allocateTexture(GLenum format, GLenum storage) {
212+
#if DEBUG_LAYERS
213+
ALOGD(" Allocate layer: %dx%d", getWidth(), getHeight());
214+
#endif
212215
glTexImage2D(renderTarget, 0, format, getWidth(), getHeight(), 0, format, storage, NULL);
213216
}
214217

libs/hwui/OpenGLRenderer.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -895,12 +895,6 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
895895
void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
896896
float alpha = layer->getAlpha() / 255.0f;
897897

898-
mat4& transform = layer->getTransform();
899-
if (!transform.isIdentity()) {
900-
save(0);
901-
mSnapshot->transform->multiply(transform);
902-
}
903-
904898
setupDraw();
905899
if (layer->getRenderTarget() == GL_TEXTURE_2D) {
906900
setupDrawWithTexture();
@@ -937,10 +931,6 @@ void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
937931
glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
938932

939933
finishDrawTexture();
940-
941-
if (!transform.isIdentity()) {
942-
restore();
943-
}
944934
}
945935

946936
void OpenGLRenderer::composeLayerRect(Layer* layer, const Rect& rect, bool swap) {
@@ -2792,12 +2782,24 @@ status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* pain
27922782
return DrawGlInfo::kStatusDone;
27932783
}
27942784

2785+
mat4* transform = NULL;
2786+
if (layer->isTextureLayer()) {
2787+
transform = &layer->getTransform();
2788+
if (!transform->isIdentity()) {
2789+
save(0);
2790+
mSnapshot->transform->multiply(*transform);
2791+
}
2792+
}
2793+
27952794
Rect transformed;
27962795
Rect clip;
27972796
const bool rejected = quickRejectNoScissor(x, y,
27982797
x + layer->layer.getWidth(), y + layer->layer.getHeight(), transformed, clip);
27992798

28002799
if (rejected) {
2800+
if (transform && !transform->isIdentity()) {
2801+
restore();
2802+
}
28012803
return DrawGlInfo::kStatusDone;
28022804
}
28032805

@@ -2858,6 +2860,10 @@ status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* pain
28582860
}
28592861
}
28602862

2863+
if (transform && !transform->isIdentity()) {
2864+
restore();
2865+
}
2866+
28612867
return DrawGlInfo::kStatusDrew;
28622868
}
28632869

0 commit comments

Comments
 (0)