am b8460d15: Merge "Take into account the texture layer\'s transform for clipping Bug #7370212" into jb-mr1-dev

* commit 'b8460d153a1e6dfc6a02ab127d4b5b5e82386137':
  Take into account the texture layer's transform for clipping Bug #7370212
This commit is contained in:
Romain Guy
2012-10-17 19:18:24 -07:00
committed by Android Git Automerger
3 changed files with 19 additions and 11 deletions

View File

@@ -829,7 +829,6 @@ static void android_view_GLES20Canvas_clearLayerTexture(JNIEnv* env, jobject cla
static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
Layer* layer, SkMatrix* matrix) {
layer->getTransform().load(*matrix);
}

View File

@@ -209,6 +209,9 @@ struct Layer {
}
inline void allocateTexture(GLenum format, GLenum storage) {
#if DEBUG_LAYERS
ALOGD(" Allocate layer: %dx%d", getWidth(), getHeight());
#endif
glTexImage2D(renderTarget, 0, format, getWidth(), getHeight(), 0, format, storage, NULL);
}

View File

@@ -895,12 +895,6 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
float alpha = layer->getAlpha() / 255.0f;
mat4& transform = layer->getTransform();
if (!transform.isIdentity()) {
save(0);
mSnapshot->transform->multiply(transform);
}
setupDraw();
if (layer->getRenderTarget() == GL_TEXTURE_2D) {
setupDrawWithTexture();
@@ -937,10 +931,6 @@ void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
finishDrawTexture();
if (!transform.isIdentity()) {
restore();
}
}
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
return DrawGlInfo::kStatusDone;
}
mat4* transform = NULL;
if (layer->isTextureLayer()) {
transform = &layer->getTransform();
if (!transform->isIdentity()) {
save(0);
mSnapshot->transform->multiply(*transform);
}
}
Rect transformed;
Rect clip;
const bool rejected = quickRejectNoScissor(x, y,
x + layer->layer.getWidth(), y + layer->layer.getHeight(), transformed, clip);
if (rejected) {
if (transform && !transform->isIdentity()) {
restore();
}
return DrawGlInfo::kStatusDone;
}
@@ -2858,6 +2860,10 @@ status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* pain
}
}
if (transform && !transform->isIdentity()) {
restore();
}
return DrawGlInfo::kStatusDrew;
}