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

Commit e68dc157 authored by Russell Brenner's avatar Russell Brenner Committed by Android Git Automerger
Browse files

am a0dc8da2: Merge "DO NOT MERGE Send WebView the current transform and...

am a0dc8da2: Merge "DO NOT MERGE Send WebView the current transform and whether we\'re drawing a layer. Bug #3275491" into honeycomb-mr1

* commit 'a0dc8da2':
  DO NOT MERGE Send WebView the current transform and whether we're drawing a layer. Bug #3275491
parents eb52fb32 a0dc8da2
Loading
Loading
Loading
Loading
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_HWUI_DRAW_GL_INFO_H
#define ANDROID_HWUI_DRAW_GL_INFO_H

namespace android {
namespace uirenderer {

/**
 * Structure used by OpenGLRenderer::callDrawGLFunction() to pass and
 * receive data from OpenGL functors.
 */
struct DrawGlInfo {
    // Input: current clip rect
    int clipLeft;
    int clipTop;
    int clipRight;
    int clipBottom;

    // Input: is the render target an FBO
    bool isLayer;

    // Input: current transform matrix, in OpenGL format
    float transform[16];

    // Output: dirty region to redraw
    float dirtyLeft;
    float dirtyTop;
    float dirtyRight;
    float dirtyBottom;
}; // struct DrawGlInfo

}; // namespace uirenderer
}; // namespace android

#endif // ANDROID_HWUI_DRAW_GL_INFO_H
+11 −21
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
#include <utils/Log.h>
#include <utils/StopWatch.h>

#include <private/hwui/DrawGlInfo.h>

#include <ui/Rect.h>

#include "OpenGLRenderer.h"
@@ -227,30 +229,18 @@ bool OpenGLRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) {
    }
#endif

    struct {
        // Input: current clip rect
        int clipLeft;
        int clipTop;
        int clipRight;
        int clipBottom;

        // Output: dirty region to redraw
        float dirtyLeft;
        float dirtyTop;
        float dirtyRight;
        float dirtyBottom;
    } constraints;

    constraints.clipLeft = clip.left;
    constraints.clipTop = clip.top;
    constraints.clipRight = clip.right;
    constraints.clipBottom = clip.bottom;
    DrawGlInfo info;
    info.clipLeft = clip.left;
    info.clipTop = clip.top;
    info.clipRight = clip.right;
    info.clipBottom = clip.bottom;
    info.isLayer = hasLayer();
    getSnapshot()->transform->copyTo(&info.transform[0]);

    status_t result = (*functor)(0, &constraints);
    status_t result = (*functor)(0, &info);

    if (result != 0) {
        Rect localDirty(constraints.dirtyLeft, constraints.dirtyTop,
                constraints.dirtyRight, constraints.dirtyBottom);
        Rect localDirty(info.dirtyLeft, info.dirtyTop, info.dirtyRight, info.dirtyBottom);
        dirty.unionWith(localDirty);
    }