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

Commit 50c5e4c3 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Reduce number of GL calls when drawing with shaders."

parents 8b83d252 01d06579
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1463,7 +1463,9 @@ void OpenGLRenderer::setupColorRect(float left, float top, float right, float bo
            dirtyLayer(left, top, right, bottom);
        }
    }
    if (!mShader || (mShader && setColor)) {
        mCaches.currentProgram->setColor(r, g, b, a);
    }

    // Setup attributes and uniforms required by the shaders
    if (mShader) {
+4 −5
Original line number Diff line number Diff line
@@ -63,8 +63,7 @@ void SkiaShader::setupProgram(Program* program, const mat4& modelView, const Sna
        GLuint* textureUnit) {
}

void SkiaShader::bindTexture(Texture* texture, GLenum wrapS, GLenum wrapT, GLuint textureUnit) {
    glActiveTexture(gTextureUnitsMap[textureUnit]);
void SkiaShader::bindTexture(Texture* texture, GLenum wrapS, GLenum wrapT) {
    glBindTexture(GL_TEXTURE_2D, texture->id);
    if (wrapS != texture->wrapS) {
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapS);
@@ -132,7 +131,7 @@ void SkiaBitmapShader::setupProgram(Program* program, const mat4& modelView,
    computeScreenSpaceMatrix(textureTransform, modelView);

    // Uniforms
    bindTexture(texture, mWrapS, mWrapT, textureSlot);
    bindTexture(texture, mWrapS, mWrapT);
    glUniform1i(program->getUniform("bitmapSampler"), textureSlot);
    glUniformMatrix4fv(program->getUniform("textureTransform"), 1,
            GL_FALSE, &textureTransform.data[0]);
@@ -204,7 +203,7 @@ void SkiaLinearGradientShader::setupProgram(Program* program, const mat4& modelV
    computeScreenSpaceMatrix(screenSpace, modelView);

    // Uniforms
    bindTexture(texture, gTileModes[mTileX], gTileModes[mTileY], textureSlot);
    bindTexture(texture, gTileModes[mTileX], gTileModes[mTileY]);
    glUniform1i(program->getUniform("gradientSampler"), textureSlot);
    glUniformMatrix4fv(program->getUniform("screenSpace"), 1, GL_FALSE, &screenSpace.data[0]);
}
@@ -297,7 +296,7 @@ void SkiaSweepGradientShader::setupProgram(Program* program, const mat4& modelVi
    computeScreenSpaceMatrix(screenSpace, modelView);

    // Uniforms
    bindTexture(texture, gTileModes[mTileX], gTileModes[mTileY], textureSlot);
    bindTexture(texture, gTileModes[mTileX], gTileModes[mTileY]);
    glUniform1i(program->getUniform("gradientSampler"), textureSlot);
    glUniformMatrix4fv(program->getUniform("screenSpace"), 1, GL_FALSE, &screenSpace.data[0]);
}
+5 −1
Original line number Diff line number Diff line
@@ -97,7 +97,11 @@ struct SkiaShader {
    void computeScreenSpaceMatrix(mat4& screenSpace, const mat4& modelView);

protected:
    inline void bindTexture(Texture* texture, GLenum wrapS, GLenum wrapT, GLuint textureUnit);
    /**
     * The appropriate texture unit must have been activated prior to invoking
     * this method.
     */
    inline void bindTexture(Texture* texture, GLenum wrapS, GLenum wrapT);

    Type mType;
    SkShader* mKey;