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

Commit ef94c6f8 authored by ztenghui's avatar ztenghui
Browse files

Separate spot and ambient shadow strength setting

Change-Id: I4530e618b09a7f44b5382f8a40646c0ebf5f214c
parent b9122c67
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -685,7 +685,8 @@ void Caches::initTempProperties() {
    propertyDirtyViewport = false;
    propertyEnable3d = false;
    propertyCameraDistance = 1.0f;
    propertyShadowStrength = 0x3f;
    propertyAmbientShadowStrength = 0x3f;
    propertySpotShadowStrength = 0x3f;

    propertyLightPosXScale = 0.5f;
    propertyLightPosYScale = 0.0f;
@@ -704,9 +705,13 @@ void Caches::setTempProperty(const char* name, const char* value) {
        propertyDirtyViewport = true;
        ALOGD("camera dist multiplier = %.2f", propertyCameraDistance);
        return;
    } else if (!strcmp(name, "shadowStrength")) {
        propertyShadowStrength = atoi(value);
        ALOGD("shadow strength = 0x%x out of 0xff", propertyShadowStrength);
    } else if (!strcmp(name, "ambientShadowStrength")) {
        propertyAmbientShadowStrength = atoi(value);
        ALOGD("ambient shadow strength = 0x%x out of 0xff", propertyAmbientShadowStrength);
        return;
    } else if (!strcmp(name, "spotShadowStrength")) {
        propertySpotShadowStrength = atoi(value);
        ALOGD("spot shadow strength = 0x%x out of 0xff", propertySpotShadowStrength);
        return;
    } else if (!strcmp(name, "lightPosXScale")) {
        propertyLightPosXScale = fmin(fmax(atof(value), 0.0), 1.0);
+2 −1
Original line number Diff line number Diff line
@@ -367,7 +367,8 @@ public:
    float propertyLightPosXScale;
    float propertyLightPosYScale;
    float propertyLightPosZScale;
    int propertyShadowStrength;
    int propertyAmbientShadowStrength;
    int propertySpotShadowStrength;

private:
    enum OverdrawColorSet {
+19 −14
Original line number Diff line number Diff line
@@ -3214,7 +3214,6 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransform, float casterAlp
    mCaches.enableScissor();

    SkPaint paint;
    paint.setARGB(mCaches.propertyShadowStrength, 0, 0, 0);
    paint.setAntiAlias(true); // want to use AlphaVertex

    // tessellate caster outline into a 2d polygon
@@ -3238,11 +3237,16 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransform, float casterAlp
    }

    // draw caster's shadows
    if (mCaches.propertyAmbientShadowStrength > 0) {
        paint.setARGB(mCaches.propertyAmbientShadowStrength, 0, 0, 0);
        VertexBuffer ambientShadowVertexBuffer;
        ShadowTessellator::tessellateAmbientShadow(casterPolygon, casterVertexCount,
                ambientShadowVertexBuffer);
        drawVertexBuffer(ambientShadowVertexBuffer, &paint);
    }

    if (mCaches.propertySpotShadowStrength > 0) {
        paint.setARGB(mCaches.propertySpotShadowStrength, 0, 0, 0);
        VertexBuffer spotShadowVertexBuffer;
        Vector3 lightPosScale(mCaches.propertyLightPosXScale,
                mCaches.propertyLightPosYScale, mCaches.propertyLightPosZScale);
@@ -3251,6 +3255,7 @@ status_t OpenGLRenderer::drawShadow(const mat4& casterTransform, float casterAlp
                spotShadowVertexBuffer);

        drawVertexBuffer(spotShadowVertexBuffer, &paint);
    }

    return DrawGlInfo::kStatusDrew;
}