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

Commit 8e93abcd authored by Tenghui Zhu's avatar Tenghui Zhu Committed by Android (Google) Code Review
Browse files

Merge "Make umbra lighter when the blocker is too high and has no real umbra...

Merge "Make umbra lighter when the blocker is too high and has no real umbra area." into nyc-mr1-dev
parents e8ebe112 9c555566
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -942,9 +942,13 @@ void SpotShadow::generateTriangleStrip(bool isCasterOpaque, float shadowStrength
        AlphaVertex::set(&shadowVertices[vertexBufferIndex++], newPenumbra[i].x,
        AlphaVertex::set(&shadowVertices[vertexBufferIndex++], newPenumbra[i].x,
                newPenumbra[i].y, PENUMBRA_ALPHA);
                newPenumbra[i].y, PENUMBRA_ALPHA);
    }
    }
    // Since the umbra can be a faked one when the occluder is too high, the umbra should be lighter
    // in this case.
    float scaledUmbraAlpha = UMBRA_ALPHA * shadowStrengthScale;

    for (int i = 0; i < umbraLength; i++) {
    for (int i = 0; i < umbraLength; i++) {
        AlphaVertex::set(&shadowVertices[vertexBufferIndex++], umbra[i].x, umbra[i].y,
        AlphaVertex::set(&shadowVertices[vertexBufferIndex++], umbra[i].x, umbra[i].y,
                UMBRA_ALPHA);
                scaledUmbraAlpha);
    }
    }


    for (int i = 0; i < verticesPairIndex; i++) {
    for (int i = 0; i < verticesPairIndex; i++) {
@@ -984,14 +988,14 @@ void SpotShadow::generateTriangleStrip(bool isCasterOpaque, float shadowStrength
            indexBuffer[indexBufferIndex++] = newPenumbraLength + i;
            indexBuffer[indexBufferIndex++] = newPenumbraLength + i;
            indexBuffer[indexBufferIndex++] = vertexBufferIndex;
            indexBuffer[indexBufferIndex++] = vertexBufferIndex;
            AlphaVertex::set(&shadowVertices[vertexBufferIndex++],
            AlphaVertex::set(&shadowVertices[vertexBufferIndex++],
                    closerVertex.x, closerVertex.y, UMBRA_ALPHA);
                    closerVertex.x, closerVertex.y, scaledUmbraAlpha);
        }
        }
    } else {
    } else {
        // If there is no occluded umbra at all, then draw the triangle fan
        // If there is no occluded umbra at all, then draw the triangle fan
        // starting from the centroid to all umbra vertices.
        // starting from the centroid to all umbra vertices.
        int lastCentroidIndex = vertexBufferIndex;
        int lastCentroidIndex = vertexBufferIndex;
        AlphaVertex::set(&shadowVertices[vertexBufferIndex++], centroid.x,
        AlphaVertex::set(&shadowVertices[vertexBufferIndex++], centroid.x,
                centroid.y, UMBRA_ALPHA);
                centroid.y, scaledUmbraAlpha);
        for (int i = 0; i < umbraLength; i++) {
        for (int i = 0; i < umbraLength; i++) {
            indexBuffer[indexBufferIndex++] = newPenumbraLength + i;
            indexBuffer[indexBufferIndex++] = newPenumbraLength + i;
            indexBuffer[indexBufferIndex++] = lastCentroidIndex;
            indexBuffer[indexBufferIndex++] = lastCentroidIndex;