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

Commit 7dd9776f authored by John Reck's avatar John Reck Committed by Android Git Automerger
Browse files

am d73a1aa3: am fec7508b: Merge "DO NOT MERGE Copy shaders" into lmp-dev

* commit 'd73a1aa3b97d9cd9792dec4a58ab6150b76afb31':
  DO NOT MERGE Copy shaders
parents 2ab2c393 b1d0ef53
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ static void Shader_setLocalMatrix(JNIEnv* env, jobject o, jlong shaderHandle, jl
        } else {
            shader->resetLocalMatrix();
        }
        shader->setGenerationID(shader->getGenerationID() + 1);
    }
}

+17 −4
Original line number Diff line number Diff line
@@ -215,11 +215,17 @@ private:
        if (!paint) return NULL;

        const SkPaint* paintCopy = mPaintMap.valueFor(paint);
        if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) {
            paintCopy = new SkPaint(*paint);
        if (paintCopy == NULL
                || paintCopy->getGenerationID() != paint->getGenerationID()
                // We can't compare shader pointers because that will always
                // change as we do partial copying via wrapping. However, if the
                // shader changes the paint generationID will have changed and
                // so we don't hit this comparison anyway
                || !(paint->getShader() && paintCopy->getShader()
                        && paint->getShader()->getGenerationID() == paintCopy->getShader()->getGenerationID())) {
            paintCopy = copyPaint(paint);
            // replaceValueFor() performs an add if the entry doesn't exist
            mPaintMap.replaceValueFor(paint, paintCopy);
            mDisplayListData->paints.add(paintCopy);
        }

        return paintCopy;
@@ -228,8 +234,15 @@ private:
    inline SkPaint* copyPaint(const SkPaint* paint) {
        if (!paint) return NULL;
        SkPaint* paintCopy = new SkPaint(*paint);
        if (paint->getShader()) {
            SkShader* shaderCopy = SkShader::CreateLocalMatrixShader(
                    paint->getShader(), paint->getShader()->getLocalMatrix());
            paintCopy->setShader(shaderCopy);
            paintCopy->setGenerationID(paint->getGenerationID());
            shaderCopy->setGenerationID(paint->getShader()->getGenerationID());
            shaderCopy->unref();
        }
        mDisplayListData->paints.add(paintCopy);

        return paintCopy;
    }