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

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

Merge "Apply shaders/filters to text drop shadows. Bug #4318323"

parents a5679c8a 740bf2bb
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -1407,7 +1407,7 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool
    if (!isAA) {
        setupDrawVertices(vertices);
    } else {
        void *alphaCoords = ((void*) aaVertices) + gVertexAlphaOffset;
        AlphaVertex* alphaCoords = aaVertices + gVertexAlphaOffset;
        // innerProportion is the ratio of the inner (non-AA) port of the line to the total
        // AA stroke width (the base stroke width expanded by a half pixel on either side).
        // This value is used in the fragment shader to determine how to fill fragments.
@@ -1418,7 +1418,9 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool
    int generatedVerticesCount = 0;
    AlphaVertex *prevAAVertex = NULL;
    Vertex *prevVertex = NULL;
    float inverseScaleX, inverseScaleY;
    float inverseScaleX = 1.0f;
    float inverseScaleY = 1.0f;

    if (isHairline) {
        // The quad that we use for AA hairlines needs to account for scaling because the line
        // should always be one pixel wide regardless of scale.
@@ -1438,6 +1440,7 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool
            inverseScaleY = (scaleY != 0) ? (inverseScaleY / scaleY) : 0;
        }
    }

    for (int i = 0; i < count; i += 4) {
        // a = start point, b = end point
        vec2 a(points[i], points[i + 1]);
@@ -1767,23 +1770,32 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
                count, mShadowRadius);
        const AutoTexture autoCleanup(shadow);

        const float sx = x - shadow->left + mShadowDx;
        const float sy = y - shadow->top + mShadowDy;
        const float sx = oldX - shadow->left + mShadowDx;
        const float sy = oldY - shadow->top + mShadowDy;

        const int shadowAlpha = ((mShadowColor >> 24) & 0xFF);
        int shadowColor = mShadowColor;
        if (mShader) {
            shadowColor = 0xffffffff;
        }

        glActiveTexture(gTextureUnits[0]);
        setupDraw();
        setupDrawWithTexture(true);
        setupDrawAlpha8Color(mShadowColor, shadowAlpha < 255 ? shadowAlpha : alpha);
        setupDrawAlpha8Color(shadowColor, shadowAlpha < 255 ? shadowAlpha : alpha);
        setupDrawColorFilter();
        setupDrawShader();
        setupDrawBlending(true, mode);
        setupDrawProgram();
        setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height, pureTranslate);
        setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height);
        setupDrawTexture(shadow->id);
        setupDrawPureColorUniforms();
        setupDrawColorFilterUniforms();
        setupDrawShaderUniforms();
        setupDrawMesh(NULL, (GLvoid*) gMeshTextureOffset);

        glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);

        finishDrawTexture();
    }

+9 −0
Original line number Diff line number Diff line
@@ -179,6 +179,8 @@ const char* gFS_Fast_SingleModulateGradient =
// General case
const char* gFS_Main_FetchColor =
        "    fragColor = color;\n";
const char* gFS_Main_ModulateColor =
        "    fragColor *= color.a;\n";
const char* gFS_Main_AccountForWidth =
        "    if (distance < boundaryWidth) {\n"
        "        fragColor *= (distance * inverseBoundaryWidth);\n"
@@ -581,6 +583,7 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti
                shader.append(gFS_Main_FetchBitmapNpot);
            }
        }
        bool applyModulate = false;
        // Case when we have two shaders set
        if (description.hasGradient && description.hasBitmap) {
            int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
@@ -590,15 +593,21 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti
                shader.append(gFS_Main_BlendShadersGB);
            }
            shader.append(gFS_Main_BlendShaders_Modulate[op]);
            applyModulate = true;
        } else {
            if (description.hasGradient) {
                int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
                shader.append(gFS_Main_GradientShader_Modulate[op]);
                applyModulate = true;
            } else if (description.hasBitmap) {
                int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
                shader.append(gFS_Main_BitmapShader_Modulate[op]);
                applyModulate = true;
            }
        }
        if (description.modulate && applyModulate) {
            shader.append(gFS_Main_ModulateColor);
        }
        // Apply the color op if needed
        shader.append(gFS_Main_ApplyColorOp[description.colorOp]);
        // Output the fragment
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ public class PathsActivity extends Activity {

            mLargePaint = new Paint();
            mLargePaint.setAntiAlias(true);
            mLargePaint.setColor(0xff00ff00);
            mLargePaint.setColor(0x7f00ff00);
            mLargePaint.setStrokeWidth(15.0f);
            mLargePaint.setStyle(Paint.Style.FILL);

+5 −5

File changed.

Contains only whitespace changes.