Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07a9ebd1 authored by Romain Guy's avatar Romain Guy Committed by Android Git Automerger
Browse files

am b8460d15: Merge "Take into account the texture layer\'s transform for...

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

* commit 'b8460d15':
  Take into account the texture layer's transform for clipping Bug #7370212
parents 56fa32bc b8460d15
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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);
}

+3 −0
Original line number Diff line number Diff line
@@ -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);
    }

+16 −10
Original line number Diff line number Diff line
@@ -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;
}