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

Commit b2620900 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "don't reallocate the mesh each time we use it" into klp-dev

parents 56f825e7 5cdc8994
Loading
Loading
Loading
Loading
+20 −21
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client,
        mFrameLatencyNeeded(false),
        mFiltering(false),
        mNeedsFiltering(false),
        mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2),
        mSecure(false),
        mProtectedByApp(false),
        mHasSurface(false),
@@ -494,9 +495,8 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const
void Layer::clearWithOpenGL(const sp<const DisplayDevice>& hw, const Region& clip,
        float red, float green, float blue, float alpha) const
{
    Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2);
    computeGeometry(hw, mesh);
    mFlinger->getRenderEngine().fillWithColor(mesh, red, green, blue, alpha);
    computeGeometry(hw, mMesh);
    mFlinger->getRenderEngine().fillWithColor(mMesh, red, green, blue, alpha);
}

void Layer::clearWithOpenGL(
@@ -509,8 +509,7 @@ void Layer::drawWithOpenGL(
    const uint32_t fbHeight = hw->getHeight();
    const State& s(getDrawingState());

    Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2, 2);
    computeGeometry(hw, mesh);
    computeGeometry(hw, mMesh);

    /*
     * NOTE: the way we compute the texture coordinates here produces
@@ -535,20 +534,19 @@ void Layer::drawWithOpenGL(

    // TODO: we probably want to generate the texture coords with the mesh
    // here we assume that we only have 4 vertices
    size_t stride = mesh.getStride();
    float* base = mesh.getTexCoords();
    base[stride*0 + 0] = left;
    base[stride*0 + 1] = 1.0f - top;
    base[stride*1 + 0] = left;
    base[stride*1 + 1] = 1.0f - bottom;
    base[stride*2 + 0] = right;
    base[stride*2 + 1] = 1.0f - bottom;
    base[stride*3 + 0] = right;
    base[stride*3 + 1] = 1.0f - top;
    Mesh::VertexArray texCoords(mMesh.getTexCoordArray());
    texCoords[0].s = left;
    texCoords[0].t = 1.0f - top;
    texCoords[1].s = left;
    texCoords[1].t = 1.0f - bottom;
    texCoords[2].s = right;
    texCoords[2].t = 1.0f - bottom;
    texCoords[3].s = right;
    texCoords[3].t = 1.0f - top;

    RenderEngine& engine(mFlinger->getRenderEngine());
    engine.setupLayerBlending(mPremultipliedAlpha, isOpaque(), s.alpha);
    engine.drawMesh(mesh);
    engine.drawMesh(mMesh);
    engine.disableBlending();
}

@@ -596,12 +594,13 @@ void Layer::computeGeometry(const sp<const DisplayDevice>& hw, Mesh& mesh) const
    // subtract the transparent region and snap to the bounds
    win = reduce(win, s.activeTransparentRegion);

    tr.transform(mesh[0], win.left,  win.top);
    tr.transform(mesh[1], win.left,  win.bottom);
    tr.transform(mesh[2], win.right, win.bottom);
    tr.transform(mesh[3], win.right, win.top);
    Mesh::VertexArray position(mesh.getPositionArray());
    tr.transform(position[0], win.left,  win.top);
    tr.transform(position[1], win.left,  win.bottom);
    tr.transform(position[2], win.right, win.bottom);
    tr.transform(position[3], win.right, win.top);
    for (size_t i=0 ; i<4 ; i++) {
        mesh[i][1] = hw_h - mesh[i][1];
        position[i].y = hw_h - position[i].y;
    }
}

+2 −0
Original line number Diff line number Diff line
@@ -357,6 +357,8 @@ private:
    bool mFiltering;
    // Whether filtering is needed b/c of the drawingstate
    bool mNeedsFiltering;
    // The mesh used to draw the layer in GLES composition mode
    mutable Mesh mMesh;

    // page-flip thread (currently main thread)
    bool mSecure; // no screenshots
+2 −2
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ void GLES11RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float
    glVertexPointer(mesh.getVertexSize(),
            GL_FLOAT,
            mesh.getByteStride(),
            mesh.getVertices());
            mesh.getPositions());

    glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount());
}
@@ -209,7 +209,7 @@ void GLES11RenderEngine::drawMesh(const Mesh& mesh) {
    glVertexPointer(mesh.getVertexSize(),
            GL_FLOAT,
            mesh.getByteStride(),
            mesh.getVertices());
            mesh.getPositions());

    glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount());

+2 −2
Original line number Diff line number Diff line
@@ -168,7 +168,7 @@ void GLES20RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float
            mesh.getVertexSize(),
            GL_FLOAT, GL_FALSE,
            mesh.getByteStride(),
            mesh.getVertices());
            mesh.getPositions());

    glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount());
}
@@ -190,7 +190,7 @@ void GLES20RenderEngine::drawMesh(const Mesh& mesh) {
            mesh.getVertexSize(),
            GL_FLOAT, GL_FALSE,
            mesh.getByteStride(),
            mesh.getVertices());
            mesh.getPositions());

    glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount());

+2 −10
Original line number Diff line number Diff line
@@ -30,23 +30,15 @@ Mesh::~Mesh() {
    delete [] mVertices;
}

float const* Mesh::operator[](size_t index) const {
    return &mVertices[index * mStride];
}

float* Mesh::operator[](size_t index) {
    return &mVertices[index * mStride];
}

Mesh::Primitive Mesh::getPrimitive() const {
    return mPrimitive;
}


float const* Mesh::getVertices() const {
float const* Mesh::getPositions() const {
    return mVertices;
}
float* Mesh::getVertices() {
float* Mesh::getPositions() {
    return mVertices;
}

Loading