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

Commit 59744b79 authored by Chris Craik's avatar Chris Craik
Browse files

Add hack for custom re-rasterization buckets

bug:14083128

Moves all of the font transform management into
OpenGLRenderer::findBestFontTransform(), and now simply passes down
final rasterization transforms into the FontRenderer.

Change-Id: Ie02752e6af863347b142367c7d628db5f9fc2998
parent 904a1045
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -732,6 +732,10 @@ void Caches::setTempProperty(const char* name, const char* value) {
        propertyLightPosZ = fmin(fmax(atof(value), 0.0), 3000.0);
        ALOGD("lightPos Z = %.2f", propertyLightPosZ);
        return;
    } else if (!strcmp(name, "extraRasterBucket")) {
        float bucket = atof(value);
        propertyExtraRasterBuckets.push_back(bucket);
        return;
    }
    ALOGD("    failed");
}
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
    #define LOG_TAG "OpenGLRenderer"
#endif

#include <vector>

#include <GLES3/gl3.h>

#include <utils/KeyedVector.h>
@@ -366,7 +368,7 @@ public:
    float propertyAmbientRatio;
    int propertyAmbientShadowStrength;
    int propertySpotShadowStrength;

    std::vector<float> propertyExtraRasterBuckets;
private:
    enum OverdrawColorSet {
        kColorSet_Default = 0,
+5 −4
Original line number Diff line number Diff line
@@ -1313,7 +1313,7 @@ public:
            const DeferredDisplayState& state) {
        const SkPaint* paint = getPaint(renderer);
        FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(paint);
        fontRenderer.precache(paint, mText, mCount, mat4::identity());
        fontRenderer.precache(paint, mText, mCount, SkMatrix::I());

        deferInfo.batchId = mPaint->getColor() == 0xff000000 ?
                DeferredDisplayList::kOpBatch_Text :
@@ -1372,14 +1372,15 @@ public:
            const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds)
            : DrawBoundedOp(bounds, paint), mText(text), mBytesCount(bytesCount), mCount(count),
            mX(x), mY(y), mPositions(positions), mTotalAdvance(totalAdvance) {
        memset(&mPrecacheTransform.data[0], 0xff, 16 * sizeof(float));
        mPrecacheTransform = SkMatrix::InvalidMatrix();
    }

    virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo,
            const DeferredDisplayState& state) {
        const SkPaint* paint = getPaint(renderer);
        FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(paint);
        const mat4& transform = renderer.findBestFontTransform(state.mMatrix);
        SkMatrix transform;
        renderer.findBestFontTransform(state.mMatrix, &transform);
        if (mPrecacheTransform != transform) {
            fontRenderer.precache(paint, mText, mCount, transform);
            mPrecacheTransform = transform;
@@ -1436,7 +1437,7 @@ private:
    float mY;
    const float* mPositions;
    float mTotalAdvance;
    mat4 mPrecacheTransform;
    SkMatrix mPrecacheTransform;
};

///////////////////////////////////////////////////////////////////////////////
+2 −2
Original line number Diff line number Diff line
@@ -587,7 +587,7 @@ void FontRenderer::appendRotatedMeshQuad(float x1, float y1, float u1, float v1,
    }
}

void FontRenderer::setFont(const SkPaint* paint, const mat4& matrix) {
void FontRenderer::setFont(const SkPaint* paint, const SkMatrix& matrix) {
    mCurrentFont = Font::create(this, paint, matrix);
}

@@ -678,7 +678,7 @@ void FontRenderer::finishRender() {
}

void FontRenderer::precache(const SkPaint* paint, const char* text, int numGlyphs,
        const mat4& matrix) {
        const SkMatrix& matrix) {
    Font* font = Font::create(this, paint, matrix);
    font->precache(paint, text, numGlyphs);
}
+2 −2
Original line number Diff line number Diff line
@@ -95,9 +95,9 @@ public:
        mGammaTable = gammaTable;
    }

    void setFont(const SkPaint* paint, const mat4& matrix);
    void setFont(const SkPaint* paint, const SkMatrix& matrix);

    void precache(const SkPaint* paint, const char* text, int numGlyphs, const mat4& matrix);
    void precache(const SkPaint* paint, const char* text, int numGlyphs, const SkMatrix& matrix);
    void endPrecaching();

    // bounds is an out parameter
Loading