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

Commit 2417f7e0 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Simplify projection matrix management."

parents 77dd7ce5 0c0ec263
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -57,9 +57,6 @@ DisplayListData* DisplayListRenderer::finishRecording() {
}

void DisplayListRenderer::setViewport(int width, int height) {
    // TODO: DisplayListRenderer shouldn't have a projection matrix, as it should never be used
    mProjectionMatrix.loadOrtho(0, width, height, 0, -1, 1);

    initializeViewport(width, height);
}

+13 −15
Original line number Diff line number Diff line
@@ -171,7 +171,7 @@ void OpenGLRenderer::setViewport(int width, int height) {
}

void OpenGLRenderer::initViewport(int width, int height) {
    mProjectionMatrix.loadOrtho(0, width, height, 0, -1, 1);
    mSnapshot->orthoMatrix.loadOrtho(0, width, height, 0, -1, 1);

    initializeViewport(width, height);
}
@@ -621,14 +621,13 @@ void OpenGLRenderer::flushLayerUpdates() {
///////////////////////////////////////////////////////////////////////////////

void OpenGLRenderer::onSnapshotRestored(const Snapshot& removed, const Snapshot& restored) {
    bool restoreOrtho = removed.flags & Snapshot::kFlagDirtyOrtho;
    bool restoreViewport = removed.flags & Snapshot::kFlagIsFboLayer;
    bool restoreClip = removed.flags & Snapshot::kFlagClipSet;
    bool restoreLayer = removed.flags & Snapshot::kFlagIsLayer;

    if (restoreOrtho) {
    if (restoreViewport) {
        const Rect& r = restored.viewport;
        glViewport(r.left, r.top, r.right, r.bottom);
        mProjectionMatrix.load(removed.orthoMatrix); // TODO: should ortho be stored in 'restored'?
    }

    if (restoreClip) {
@@ -847,14 +846,12 @@ bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip) {
    layer->setFbo(mCaches.fboCache.get());

    mSnapshot->region = &mSnapshot->layer->region;
    mSnapshot->flags |= Snapshot::kFlagFboTarget | Snapshot::kFlagIsFboLayer |
            Snapshot::kFlagDirtyOrtho;
    mSnapshot->flags |= Snapshot::kFlagFboTarget | Snapshot::kFlagIsFboLayer;
    mSnapshot->fbo = layer->getFbo();
    mSnapshot->resetTransform(-bounds.left, -bounds.top, 0.0f);
    mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom);
    mSnapshot->viewport.set(0.0f, 0.0f, bounds.getWidth(), bounds.getHeight());
    mSnapshot->height = bounds.getHeight();
    mSnapshot->orthoMatrix.load(mProjectionMatrix);

    endTiling();
    debugOverdraw(false, false);
@@ -883,8 +880,7 @@ bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip) {

    // Change the ortho projection
    glViewport(0, 0, bounds.getWidth(), bounds.getHeight());

    mProjectionMatrix.loadOrtho(0.0f, bounds.getWidth(), bounds.getHeight(), 0.0f, -1.0f, 1.0f);
    mSnapshot->orthoMatrix.loadOrtho(0.0f, bounds.getWidth(), bounds.getHeight(), 0.0f, -1.0f, 1.0f);

    return true;
}
@@ -1694,12 +1690,14 @@ void OpenGLRenderer::setupDrawModelView(ModelViewMode mode, bool offset,
    }

    bool dirty = right - left > 0.0f && bottom - top > 0.0f;
    const Matrix4& transformMatrix = ignoreTransform ? Matrix4::identity() : *currentTransform();
    mCaches.currentProgram->set(mSnapshot->orthoMatrix, mModelViewMatrix, transformMatrix, offset);
    if (dirty && mTrackDirtyRegions) {
        if (!ignoreTransform) {
        mCaches.currentProgram->set(mProjectionMatrix, mModelViewMatrix, *currentTransform(), offset);
        if (dirty && mTrackDirtyRegions) dirtyLayer(left, top, right, bottom, *currentTransform());
            dirtyLayer(left, top, right, bottom, *currentTransform());
        } else {
        mCaches.currentProgram->set(mProjectionMatrix, mModelViewMatrix, mat4::identity(), offset);
        if (dirty && mTrackDirtyRegions) dirtyLayer(left, top, right, bottom);
            dirtyLayer(left, top, right, bottom);
        }
    }
}

+0 −3
Original line number Diff line number Diff line
@@ -930,9 +930,6 @@ private:
     */
    Texture* getTexture(const SkBitmap* bitmap);

    // Ortho matrix used for projection in shaders
    mat4 mProjectionMatrix;

    /**
     * Model-view matrix used to position/size objects
     *
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ Snapshot::Snapshot(const sp<Snapshot>& s, int saveFlags)
        , empty(false)
        , viewport(s->viewport)
        , height(s->height)
        , orthoMatrix(s->orthoMatrix)
        , alpha(s->alpha) {

    if (saveFlags & SkCanvas::kMatrix_SaveFlag) {
+5 −6
Original line number Diff line number Diff line
@@ -65,17 +65,16 @@ public:
         * Indicates that this snapshot is a special type of layer
         * backed by an FBO. This flag only makes sense when the
         * flag kFlagIsLayer is also set.
         *
         * Viewport has been modified to fit the new Fbo, and must be
         * restored when this snapshot is restored.
         */
        kFlagIsFboLayer = 0x4,
        /**
         * Indicates that this snapshot has changed the ortho matrix.
         */
        kFlagDirtyOrtho = 0x8,
        /**
         * Indicates that this snapshot or an ancestor snapshot is
         * an FBO layer.
         */
        kFlagFboTarget = 0x10
        kFlagFboTarget = 0x8,
    };

    /**
@@ -183,7 +182,7 @@ public:
    int height;

    /**
     * Contains the previous ortho matrix.
     * Contains the current orthographic, projection matrix.
     */
    mat4 orthoMatrix;