Loading graphics/java/android/graphics/RecordingCanvas.java +1 −1 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ public final class RecordingCanvas extends BaseRecordingCanvas { CanvasProperty<Float> progress, RuntimeShader shader) { nDrawRipple(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), radius.getNativeContainer(), paint.getNativeContainer(), progress.getNativeContainer(), shader.getNativeShaderFactory()); progress.getNativeContainer(), shader.getNativeShaderBuilder()); } /** Loading graphics/java/android/graphics/RuntimeShader.java +53 −50 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package android.graphics; import android.annotation.NonNull; import android.annotation.Nullable; import libcore.util.NativeAllocationRegistry; Loading @@ -33,14 +32,12 @@ public class RuntimeShader extends Shader { RuntimeShader.class.getClassLoader(), nativeGetFinalizer()); } private byte[] mUniforms; private Shader[] mInputShaders; private boolean mIsOpaque; /** * Current native shader factory instance. * Current native shader builder instance. */ private long mNativeInstanceRuntimeShaderFactory; private long mNativeInstanceRuntimeShaderBuilder; /** * Creates a new RuntimeShader. Loading @@ -50,80 +47,86 @@ public class RuntimeShader extends Shader { * on number of uniforms declared by sksl. * @param isOpaque True if all pixels have alpha 1.0f. */ public RuntimeShader(@NonNull String sksl, @Nullable byte[] uniforms, boolean isOpaque) { this(sksl, uniforms, null, isOpaque, ColorSpace.get(ColorSpace.Named.SRGB)); public RuntimeShader(@NonNull String sksl, boolean isOpaque) { super(ColorSpace.get(ColorSpace.Named.SRGB)); mIsOpaque = isOpaque; mNativeInstanceRuntimeShaderBuilder = nativeCreateBuilder(sksl); NoImagePreloadHolder.sRegistry.registerNativeAllocation( this, mNativeInstanceRuntimeShaderBuilder); } /** * Creates a new RuntimeShader. * Sets the uniform value corresponding to this shader. If the shader does not have a uniform * with that name or if the uniform is declared with a type other than float then an * IllegalArgumentException is thrown. * * @param sksl The text of SKSL program to run on the GPU. * @param uniforms Array of parameters passed by the SKSL shader. Array size depends * on number of uniforms declared by sksl. * @param shaderInputs Array of shaders passed to the SKSL shader. Array size depends * on the number of input shaders declared in the sksl * @param isOpaque True if all pixels have alpha 1.0f. * @param uniformName name matching the uniform declared in the SKSL shader * @param value */ public RuntimeShader(@NonNull String sksl, @Nullable byte[] uniforms, @Nullable Shader[] shaderInputs, boolean isOpaque) { this(sksl, uniforms, shaderInputs, isOpaque, ColorSpace.get(ColorSpace.Named.SRGB)); public void setUniform(@NonNull String uniformName, float value) { setUniform(uniformName, new float[] {value}); } private RuntimeShader(@NonNull String sksl, @Nullable byte[] uniforms, @Nullable Shader[] shaderInputs, boolean isOpaque, ColorSpace colorSpace) { super(colorSpace); mUniforms = uniforms; mInputShaders = shaderInputs; mIsOpaque = isOpaque; mNativeInstanceRuntimeShaderFactory = nativeCreateShaderFactory(sksl); NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, mNativeInstanceRuntimeShaderFactory); /** * Sets the uniform value corresponding to this shader. If the shader does not have a uniform * with that name or if the uniform is declared with a type other than float2/vec2 then an * IllegalArgumentException is thrown. * * @param uniformName name matching the uniform declared in the SKSL shader * @param value1 * @param value2 */ public void setUniform(@NonNull String uniformName, float value1, float value2) { setUniform(uniformName, new float[] {value1, value2}); } /** * Sets new value for shader parameters. * Sets the uniform value corresponding to this shader. If the shader does not have a uniform * with that name or if the uniform is declared with a type other than a vecN/floatN where N is * the size of the values array then an IllegalArgumentException is thrown. * * @param uniforms Array of parameters passed by the SKSL shader. Array size depends * on number of uniforms declared by mSksl. * @param uniformName name matching the uniform declared in the SKSL shader * @param values */ public void updateUniforms(@Nullable byte[] uniforms) { mUniforms = uniforms; public void setUniform(@NonNull String uniformName, float[] values) { nativeUpdateUniforms(mNativeInstanceRuntimeShaderBuilder, uniformName, values); discardNativeInstance(); } /** * Sets new values for the shaders that serve as inputs to this shader. * Sets the uniform shader that is declares as input to this shader. If the shader does not * have a uniform shader with that name then an IllegalArgumentException is thrown. * * @param shaderInputs Array of Shaders passed into the SKSL shader. Array size depends * on number of input shaders declared by sksl. * @param shaderName name matching the uniform declared in the SKSL shader * @param shader shader passed into the SKSL shader for sampling */ public void updateInputShaders(@Nullable Shader[] shaderInputs) { mInputShaders = shaderInputs; public void setInputShader(@NonNull String shaderName, @NonNull Shader shader) { nativeUpdateShader( mNativeInstanceRuntimeShaderBuilder, shaderName, shader.getNativeInstance()); discardNativeInstance(); } /** @hide */ @Override protected long createNativeInstance(long nativeMatrix, boolean filterFromPaint) { long[] nativeShaders = mInputShaders.length > 0 ? new long[mInputShaders.length] : null; for (int i = 0; i < mInputShaders.length; i++) { nativeShaders[i] = mInputShaders[i].getNativeInstance(filterFromPaint); return nativeCreateShader(mNativeInstanceRuntimeShaderBuilder, nativeMatrix, mIsOpaque); } return nativeCreate(mNativeInstanceRuntimeShaderFactory, nativeMatrix, mUniforms, nativeShaders, colorSpace().getNativeInstance(), mIsOpaque); public long getNativeShaderBuilder() { return mNativeInstanceRuntimeShaderBuilder; } public long getNativeShaderFactory() { return mNativeInstanceRuntimeShaderFactory; public boolean isOpaque() { return mIsOpaque; } private static native long nativeCreate(long shaderFactory, long matrix, byte[] inputs, long[] shaderInputs, long colorSpaceHandle, boolean isOpaque); private static native long nativeCreateShaderFactory(String sksl); private static native long nativeGetFinalizer(); private static native long nativeCreateBuilder(String sksl); private static native long nativeCreateShader( long shaderBuilder, long matrix, boolean isOpaque); private static native void nativeUpdateUniforms( long shaderBuilder, String uniformName, float[] uniforms); private static native void nativeUpdateShader( long shaderBuilder, String shaderName, long shader); } libs/hwui/SkiaCanvas.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -819,10 +819,10 @@ void SkiaCanvas::drawRipple(uirenderer::CanvasPropertyPrimitive* x, uirenderer::CanvasPropertyPrimitive* radius, uirenderer::CanvasPropertyPaint* paint, uirenderer::CanvasPropertyPrimitive* progress, sk_sp<SkRuntimeEffect> runtimeEffect) { const SkRuntimeShaderBuilder& effectBuilder) { sk_sp<uirenderer::skiapipeline::AnimatedRipple> drawable( new uirenderer::skiapipeline::AnimatedRipple(x, y, radius, paint, progress, runtimeEffect)); effectBuilder)); mCanvas->drawDrawable(drawable.get()); } Loading libs/hwui/SkiaCanvas.h +1 −1 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ public: uirenderer::CanvasPropertyPrimitive* radius, uirenderer::CanvasPropertyPaint* paint, uirenderer::CanvasPropertyPrimitive* progress, sk_sp<SkRuntimeEffect> runtimeEffect) override; const SkRuntimeShaderBuilder& effectBuilder) override; virtual void drawLayer(uirenderer::DeferredLayerUpdater* layerHandle) override; virtual void drawRenderNode(uirenderer::RenderNode* renderNode) override; Loading libs/hwui/canvas/CanvasOps.h +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ struct CanvasOp<CanvasOpType::DrawRippleProperty> { } SkRuntimeShaderBuilder::BuilderUniform radiusU = runtimeEffectBuilder.uniform("in_maxRadius"); runtimeEffectBuilder.uniform("in_radius"); if (radiusU.fVar != nullptr) { radiusU = radius->value; } Loading Loading
graphics/java/android/graphics/RecordingCanvas.java +1 −1 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ public final class RecordingCanvas extends BaseRecordingCanvas { CanvasProperty<Float> progress, RuntimeShader shader) { nDrawRipple(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), radius.getNativeContainer(), paint.getNativeContainer(), progress.getNativeContainer(), shader.getNativeShaderFactory()); progress.getNativeContainer(), shader.getNativeShaderBuilder()); } /** Loading
graphics/java/android/graphics/RuntimeShader.java +53 −50 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package android.graphics; import android.annotation.NonNull; import android.annotation.Nullable; import libcore.util.NativeAllocationRegistry; Loading @@ -33,14 +32,12 @@ public class RuntimeShader extends Shader { RuntimeShader.class.getClassLoader(), nativeGetFinalizer()); } private byte[] mUniforms; private Shader[] mInputShaders; private boolean mIsOpaque; /** * Current native shader factory instance. * Current native shader builder instance. */ private long mNativeInstanceRuntimeShaderFactory; private long mNativeInstanceRuntimeShaderBuilder; /** * Creates a new RuntimeShader. Loading @@ -50,80 +47,86 @@ public class RuntimeShader extends Shader { * on number of uniforms declared by sksl. * @param isOpaque True if all pixels have alpha 1.0f. */ public RuntimeShader(@NonNull String sksl, @Nullable byte[] uniforms, boolean isOpaque) { this(sksl, uniforms, null, isOpaque, ColorSpace.get(ColorSpace.Named.SRGB)); public RuntimeShader(@NonNull String sksl, boolean isOpaque) { super(ColorSpace.get(ColorSpace.Named.SRGB)); mIsOpaque = isOpaque; mNativeInstanceRuntimeShaderBuilder = nativeCreateBuilder(sksl); NoImagePreloadHolder.sRegistry.registerNativeAllocation( this, mNativeInstanceRuntimeShaderBuilder); } /** * Creates a new RuntimeShader. * Sets the uniform value corresponding to this shader. If the shader does not have a uniform * with that name or if the uniform is declared with a type other than float then an * IllegalArgumentException is thrown. * * @param sksl The text of SKSL program to run on the GPU. * @param uniforms Array of parameters passed by the SKSL shader. Array size depends * on number of uniforms declared by sksl. * @param shaderInputs Array of shaders passed to the SKSL shader. Array size depends * on the number of input shaders declared in the sksl * @param isOpaque True if all pixels have alpha 1.0f. * @param uniformName name matching the uniform declared in the SKSL shader * @param value */ public RuntimeShader(@NonNull String sksl, @Nullable byte[] uniforms, @Nullable Shader[] shaderInputs, boolean isOpaque) { this(sksl, uniforms, shaderInputs, isOpaque, ColorSpace.get(ColorSpace.Named.SRGB)); public void setUniform(@NonNull String uniformName, float value) { setUniform(uniformName, new float[] {value}); } private RuntimeShader(@NonNull String sksl, @Nullable byte[] uniforms, @Nullable Shader[] shaderInputs, boolean isOpaque, ColorSpace colorSpace) { super(colorSpace); mUniforms = uniforms; mInputShaders = shaderInputs; mIsOpaque = isOpaque; mNativeInstanceRuntimeShaderFactory = nativeCreateShaderFactory(sksl); NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, mNativeInstanceRuntimeShaderFactory); /** * Sets the uniform value corresponding to this shader. If the shader does not have a uniform * with that name or if the uniform is declared with a type other than float2/vec2 then an * IllegalArgumentException is thrown. * * @param uniformName name matching the uniform declared in the SKSL shader * @param value1 * @param value2 */ public void setUniform(@NonNull String uniformName, float value1, float value2) { setUniform(uniformName, new float[] {value1, value2}); } /** * Sets new value for shader parameters. * Sets the uniform value corresponding to this shader. If the shader does not have a uniform * with that name or if the uniform is declared with a type other than a vecN/floatN where N is * the size of the values array then an IllegalArgumentException is thrown. * * @param uniforms Array of parameters passed by the SKSL shader. Array size depends * on number of uniforms declared by mSksl. * @param uniformName name matching the uniform declared in the SKSL shader * @param values */ public void updateUniforms(@Nullable byte[] uniforms) { mUniforms = uniforms; public void setUniform(@NonNull String uniformName, float[] values) { nativeUpdateUniforms(mNativeInstanceRuntimeShaderBuilder, uniformName, values); discardNativeInstance(); } /** * Sets new values for the shaders that serve as inputs to this shader. * Sets the uniform shader that is declares as input to this shader. If the shader does not * have a uniform shader with that name then an IllegalArgumentException is thrown. * * @param shaderInputs Array of Shaders passed into the SKSL shader. Array size depends * on number of input shaders declared by sksl. * @param shaderName name matching the uniform declared in the SKSL shader * @param shader shader passed into the SKSL shader for sampling */ public void updateInputShaders(@Nullable Shader[] shaderInputs) { mInputShaders = shaderInputs; public void setInputShader(@NonNull String shaderName, @NonNull Shader shader) { nativeUpdateShader( mNativeInstanceRuntimeShaderBuilder, shaderName, shader.getNativeInstance()); discardNativeInstance(); } /** @hide */ @Override protected long createNativeInstance(long nativeMatrix, boolean filterFromPaint) { long[] nativeShaders = mInputShaders.length > 0 ? new long[mInputShaders.length] : null; for (int i = 0; i < mInputShaders.length; i++) { nativeShaders[i] = mInputShaders[i].getNativeInstance(filterFromPaint); return nativeCreateShader(mNativeInstanceRuntimeShaderBuilder, nativeMatrix, mIsOpaque); } return nativeCreate(mNativeInstanceRuntimeShaderFactory, nativeMatrix, mUniforms, nativeShaders, colorSpace().getNativeInstance(), mIsOpaque); public long getNativeShaderBuilder() { return mNativeInstanceRuntimeShaderBuilder; } public long getNativeShaderFactory() { return mNativeInstanceRuntimeShaderFactory; public boolean isOpaque() { return mIsOpaque; } private static native long nativeCreate(long shaderFactory, long matrix, byte[] inputs, long[] shaderInputs, long colorSpaceHandle, boolean isOpaque); private static native long nativeCreateShaderFactory(String sksl); private static native long nativeGetFinalizer(); private static native long nativeCreateBuilder(String sksl); private static native long nativeCreateShader( long shaderBuilder, long matrix, boolean isOpaque); private static native void nativeUpdateUniforms( long shaderBuilder, String uniformName, float[] uniforms); private static native void nativeUpdateShader( long shaderBuilder, String shaderName, long shader); }
libs/hwui/SkiaCanvas.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -819,10 +819,10 @@ void SkiaCanvas::drawRipple(uirenderer::CanvasPropertyPrimitive* x, uirenderer::CanvasPropertyPrimitive* radius, uirenderer::CanvasPropertyPaint* paint, uirenderer::CanvasPropertyPrimitive* progress, sk_sp<SkRuntimeEffect> runtimeEffect) { const SkRuntimeShaderBuilder& effectBuilder) { sk_sp<uirenderer::skiapipeline::AnimatedRipple> drawable( new uirenderer::skiapipeline::AnimatedRipple(x, y, radius, paint, progress, runtimeEffect)); effectBuilder)); mCanvas->drawDrawable(drawable.get()); } Loading
libs/hwui/SkiaCanvas.h +1 −1 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ public: uirenderer::CanvasPropertyPrimitive* radius, uirenderer::CanvasPropertyPaint* paint, uirenderer::CanvasPropertyPrimitive* progress, sk_sp<SkRuntimeEffect> runtimeEffect) override; const SkRuntimeShaderBuilder& effectBuilder) override; virtual void drawLayer(uirenderer::DeferredLayerUpdater* layerHandle) override; virtual void drawRenderNode(uirenderer::RenderNode* renderNode) override; Loading
libs/hwui/canvas/CanvasOps.h +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ struct CanvasOp<CanvasOpType::DrawRippleProperty> { } SkRuntimeShaderBuilder::BuilderUniform radiusU = runtimeEffectBuilder.uniform("in_maxRadius"); runtimeEffectBuilder.uniform("in_radius"); if (radiusU.fVar != nullptr) { radiusU = radius->value; } Loading