From bc44fa0fa84a296bcd3506dfabc83f6b221ff1b4 Mon Sep 17 00:00:00 2001 From: Brian Osman Date: Fri, 3 Jan 2020 15:28:06 -0500 Subject: [PATCH] Use SkRuntimeEffect rather than SkRuntimeShaderFactory The old API was a shim over the new API, and will be deleted soon. The new API is actually public, simpler, and more powerful. Test: Everything still builds. Change-Id: I11af8da9132e23a070e87dd5a7401c4854dd102a --- core/jni/android/graphics/Shader.cpp | 28 +++++++++---------- .../java/android/graphics/RuntimeShader.java | 10 ++++--- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp index 6095ffa6b3dcb..f5e2a5244416e 100644 --- a/core/jni/android/graphics/Shader.cpp +++ b/core/jni/android/graphics/Shader.cpp @@ -5,7 +5,7 @@ #include "SkShader.h" #include "SkBlendMode.h" #include "core_jni_helpers.h" -#include "src/shaders/SkRTShader.h" +#include "include/effects/SkRuntimeEffect.h" #include @@ -214,14 +214,14 @@ static jlong ComposeShader_create(JNIEnv* env, jobject o, jlong matrixPtr, /////////////////////////////////////////////////////////////////////////////////////////////// static jlong RuntimeShader_create(JNIEnv* env, jobject, jlong shaderFactory, jlong matrixPtr, - jbyteArray inputs, jlong colorSpaceHandle) { - SkRuntimeShaderFactory* factory = reinterpret_cast(shaderFactory); + jbyteArray inputs, jlong colorSpaceHandle, jboolean isOpaque) { + SkRuntimeEffect* effect = reinterpret_cast(shaderFactory); AutoJavaByteArray arInputs(env, inputs); sk_sp fData; fData = SkData::MakeWithCopy(arInputs.ptr(), arInputs.length()); const SkMatrix* matrix = reinterpret_cast(matrixPtr); - sk_sp shader = factory->make(fData, matrix); + sk_sp shader = effect->makeShader(fData, nullptr, 0, matrix, isOpaque == JNI_TRUE); ThrowIAE_IfNull(env, shader); return reinterpret_cast(shader.release()); @@ -229,24 +229,22 @@ static jlong RuntimeShader_create(JNIEnv* env, jobject, jlong shaderFactory, jlo /////////////////////////////////////////////////////////////////////////////////////////////// -static jlong RuntimeShader_createShaderFactory(JNIEnv* env, jobject, jstring sksl, - jboolean isOpaque) { +static jlong RuntimeShader_createShaderFactory(JNIEnv* env, jobject, jstring sksl) { ScopedUtfChars strSksl(env, sksl); - SkRuntimeShaderFactory* shaderFactory = new SkRuntimeShaderFactory(SkString(strSksl.c_str()), - isOpaque == JNI_TRUE); - ThrowIAE_IfNull(env, shaderFactory); + sk_sp effect = std::get<0>(SkRuntimeEffect::Make(SkString(strSksl.c_str()))); + ThrowIAE_IfNull(env, effect); - return reinterpret_cast(shaderFactory); + return reinterpret_cast(effect.release()); } /////////////////////////////////////////////////////////////////////////////////////////////// -static void RuntimeShader_delete(SkRuntimeShaderFactory* shaderFactory) { - delete shaderFactory; +static void Effect_safeUnref(SkRuntimeEffect* effect) { + SkSafeUnref(effect); } static jlong RuntimeShader_getNativeFinalizer(JNIEnv*, jobject) { - return static_cast(reinterpret_cast(&RuntimeShader_delete)); + return static_cast(reinterpret_cast(&Effect_safeUnref)); } /////////////////////////////////////////////////////////////////////////////////////////////// @@ -282,8 +280,8 @@ static const JNINativeMethod gComposeShaderMethods[] = { static const JNINativeMethod gRuntimeShaderMethods[] = { { "nativeGetFinalizer", "()J", (void*)RuntimeShader_getNativeFinalizer }, - { "nativeCreate", "(JJ[BJ)J", (void*)RuntimeShader_create }, - { "nativeCreateShaderFactory", "(Ljava/lang/String;Z)J", + { "nativeCreate", "(JJ[BJZ)J", (void*)RuntimeShader_create }, + { "nativeCreateShaderFactory", "(Ljava/lang/String;)J", (void*)RuntimeShader_createShaderFactory }, }; diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java index 613ce9042056b..5a3f2a96e31de 100644 --- a/graphics/java/android/graphics/RuntimeShader.java +++ b/graphics/java/android/graphics/RuntimeShader.java @@ -34,6 +34,7 @@ public class RuntimeShader extends Shader { } private byte[] mUniforms; + private boolean mIsOpaque; /** * Current native shader factory instance. @@ -56,7 +57,8 @@ public class RuntimeShader extends Shader { ColorSpace colorSpace) { super(colorSpace); mUniforms = uniforms; - mNativeInstanceRuntimeShaderFactory = nativeCreateShaderFactory(sksl, isOpaque); + mIsOpaque = isOpaque; + mNativeInstanceRuntimeShaderFactory = nativeCreateShaderFactory(sksl); NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, mNativeInstanceRuntimeShaderFactory); } @@ -75,13 +77,13 @@ public class RuntimeShader extends Shader { @Override long createNativeInstance(long nativeMatrix) { return nativeCreate(mNativeInstanceRuntimeShaderFactory, nativeMatrix, mUniforms, - colorSpace().getNativeInstance()); + colorSpace().getNativeInstance(), mIsOpaque); } private static native long nativeCreate(long shaderFactory, long matrix, byte[] inputs, - long colorSpaceHandle); + long colorSpaceHandle, boolean isOpaque); - private static native long nativeCreateShaderFactory(String sksl, boolean isOpaque); + private static native long nativeCreateShaderFactory(String sksl); private static native long nativeGetFinalizer(); }