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

Commit 42f3a4b7 authored by Romain Guy's avatar Romain Guy
Browse files

Make embedded hardware layers work.

Bug #3369474

Change-Id: Ib6d7fb44eedda9dc2933b5e1b176f307968af91d
parent a3311ed7
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ import android.util.PoolableManager;
import android.util.Pools;
import android.util.SparseArray;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.MeasureSpec;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityEventSource;
import android.view.accessibility.AccessibilityManager;
+7 −2
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ namespace uirenderer {
void LayerRenderer::prepare(bool opaque) {
    LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo);

    glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &mPreviousFbo);
    glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);

    OpenGLRenderer::prepare(opaque);
@@ -37,11 +36,17 @@ void LayerRenderer::prepare(bool opaque) {

void LayerRenderer::finish() {
    OpenGLRenderer::finish();
    glBindFramebuffer(GL_FRAMEBUFFER, mPreviousFbo);

    generateMesh();

    LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->mFbo);

    // No need to unbind our FBO, this will be taken care of by the caller
    // who will invoke OpenGLRenderer::resume()
}

GLint LayerRenderer::getTargetFbo() {
    return mLayer->fbo;
}

///////////////////////////////////////////////////////////////////////////////
+1 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ public:

    bool hasLayer();
    Region* getRegion();
    GLint getTargetFbo();

    static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false);
    static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height);
@@ -61,8 +62,6 @@ private:
    void generateMesh();

    Layer* mLayer;
    GLuint mPreviousFbo;

}; // class LayerRenderer

}; // namespace uirenderer
+1 −1
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ void OpenGLRenderer::resume() {

    glDisable(GL_DITHER);

    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    glBindFramebuffer(GL_FRAMEBUFFER, getTargetFbo());
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

    mCaches.blend = true;
+13 −0
Original line number Diff line number Diff line
@@ -145,14 +145,27 @@ protected:
        return mSnapshot;
    }

    /**
     * Returns the region of the current layer.
     */
    virtual Region* getRegion() {
        return mSnapshot->region;
    }

    /**
     * Indicates whether rendering is currently targeted at a layer.
     */
    virtual bool hasLayer() {
        return (mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region;
    }

    /**
     * Returns the name of the FBO this renderer is rendering into.
     */
    virtual GLint getTargetFbo() {
        return 0;
    }

private:
    /**
     * Saves the current state of the renderer as a new snapshot.
Loading