Unverified Commit 5d78bcc8 authored by Ivan Matkov's avatar Ivan Matkov Committed by GitHub

`Blender` fixes (#1162 followup) (#1175)

Fixes from #1168 extracted as a followup patch for #1162
parent e2abdf1a
......@@ -3,14 +3,23 @@ package org.jetbrains.skia
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.RefCnt
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.impl.interopScope
/**
* Blender represents a custom blend function in the Skia pipeline. A blender combines a source
* color (the result of our paint) and destination color (from the canvas) into a final color.
*/
*/
class Blender internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object {
init {
staticLoad()
}
fun makeMode(mode: BlendMode): Blender {
Stats.onNativeCall()
return Blender(_nMakeMode(mode.ordinal))
}
fun makeArithmetic(
k1: Float,
......@@ -19,20 +28,18 @@ class Blender internal constructor(ptr: NativePointer) : RefCnt(ptr) {
k4: Float,
enforcePMColor: Boolean,
): Blender {
return try {
Stats.onNativeCall()
interopScope {
return interopScope {
Blender(
_nMakeArithmetic(
k1,
k2,
k3,
k4,
enforcePMColor)
enforcePMColor,
),
)
}
} finally {
}
}
}
}
......@@ -45,3 +52,6 @@ private external fun _nMakeArithmetic(
k4: Float,
enforcePMColor: Boolean
): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Blender__1nMakeMode")
private external fun _nMakeMode(mode: Int): NativePointer
......@@ -448,14 +448,17 @@ class Paint : Managed {
}
/**
* @param blender how geometry is filled with color; if null, color is used instead
* Returns the user-supplied blend function, if one has been set.
*
* @see [https://fiddle.skia.org/c/@Color_Filter_Methods](https://fiddle.skia.org/c/@Color_Filter_Methods)
* A null blender signifies the default SrcOver behavior.
*
* @see [https://fiddle.skia.org/c/@Paint_setShader](https://fiddle.skia.org/c/@Paint_setShader)
* For convenience, you can call [blendMode] if the blend effect can be expressed
* as one of those values.
*
* @return [Shader] or null
* @see [https://fiddle.skia.org/c/@Paint_refShader](https://fiddle.skia.org/c/@Paint_refShader)
* @see [https://fiddle.skia.org/c/@Paint_setBlender](https://fiddle.skia.org/c/@Paint_setBlender)
* @see [https://fiddle.skia.org/c/@Paint_refBlender](https://fiddle.skia.org/c/@Paint_refBlender)
*
* @return the [Blender] assigned to this paint, otherwise null
*/
var blender: Blender?
get() = try {
......@@ -695,7 +698,7 @@ private external fun _nSetImageFilter(ptr: NativePointer, filterPtr: NativePoint
private external fun _nGetBlender(ptr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_Paint__1nSetBlender")
private external fun _nSetBlender(ptr: NativePointer, shaderPtr: NativePointer)
private external fun _nSetBlender(ptr: NativePointer, blenderPtr: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_Paint__1nHasNothingToDraw")
private external fun _nHasNothingToDraw(ptr: NativePointer): Boolean
......@@ -58,6 +58,7 @@ class RuntimeEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
}
} finally {
reachabilityBarrier(this)
reachabilityBarrier(uniforms)
}
}
}
......
......@@ -51,10 +51,15 @@ class BlenderTest {
runtimeEffect.makeBlender(null)
}
// @Test
// fun arithmetic() = blenderTest {
// Blender.makeArithmetic(
// k1 = 0.5f, k2 = 0.5f, k3 = 0.5f, k4 = 0.5f, enforcePMColor = true
// )
// }
@Test
fun arithmetic() = blenderTest {
Blender.makeArithmetic(
k1 = 0.5f, k2 = 0.5f, k3 = 0.5f, k4 = 0.5f, enforcePMColor = true
)
}
@Test
fun mode() = blenderTest {
Blender.makeMode(BlendMode.CLEAR)
}
}
#include <iostream>
#include <jni.h>
#include "interop.hh"
#include "SkBlender.h"
......@@ -10,3 +9,8 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_BlenderKt__1nMakeArit
return reinterpret_cast<jlong>(ptr);
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_BlenderKt__1nMakeMode
(JNIEnv* env, jclass jclass, jint mode) {
SkBlender* ptr = SkBlender::Mode(static_cast<SkBlendMode>(mode)).release();
return reinterpret_cast<jlong>(ptr);
}
......@@ -185,15 +185,15 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_PaintKt__1nSetImageFil
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PaintKt__1nGetBlender
(JNIEnv* env, jclass jclass, jlong ptr) {
SkPaint* instance = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(ptr));
return reinterpret_cast<jlong>(instance->refBlender().release());
SkPaint* instance = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(ptr));
return reinterpret_cast<jlong>(instance->refBlender().release());
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_PaintKt__1nSetBlender
(JNIEnv* env, jclass jclass, jlong ptr, jlong filterPtr) {
SkPaint* instance = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(ptr));
SkBlender* filter = reinterpret_cast<SkBlender*>(static_cast<uintptr_t>(filterPtr));
instance->setBlender(sk_ref_sp<SkBlender>(filter));
(JNIEnv* env, jclass jclass, jlong ptr, jlong blenderPtr) {
SkPaint* instance = reinterpret_cast<SkPaint*>(static_cast<uintptr_t>(ptr));
SkBlender* blender = reinterpret_cast<SkBlender*>(static_cast<uintptr_t>(blenderPtr));
instance->setBlender(sk_ref_sp<SkBlender>(blender));
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skia_PaintKt__1nGetBlendMode
......
#include <iostream>
#include "SkBlender.h"
#include "SkBlenders.h"
#include "common.h"
......@@ -8,3 +7,9 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Blender__1nMakeArithmetic
SkBlender* ptr = SkBlenders::Arithmetic(k1, k2, k3, k4, enforcePMColor).release();
return reinterpret_cast<KNativePointer>(ptr);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Blender__1nMakeMode
(KInt mode) {
SkBlender* ptr = SkBlender::Mode(static_cast<SkBlendMode>(mode)).release();
return reinterpret_cast<KNativePointer>(ptr);
}
......@@ -187,16 +187,16 @@ SKIKO_EXPORT void org_jetbrains_skia_Paint__1nSetImageFilter
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Paint__1nGetBlender
(KNativePointer ptr) {
SkPaint* instance = reinterpret_cast<SkPaint*>((ptr));
return reinterpret_cast<KNativePointer>(instance->refBlender().release());
(KNativePointer ptr) {
SkPaint* instance = reinterpret_cast<SkPaint*>((ptr));
return reinterpret_cast<KNativePointer>(instance->refBlender().release());
}
SKIKO_EXPORT void org_jetbrains_skia_Paint__1nSetBlender
(KNativePointer ptr, KNativePointer filterPtr) {
SkPaint* instance = reinterpret_cast<SkPaint*>((ptr));
SkBlender* filter = reinterpret_cast<SkBlender*>((filterPtr));
instance->setBlender(sk_ref_sp<SkBlender>(filter));
(KNativePointer ptr, KNativePointer blenderPtr) {
SkPaint* instance = reinterpret_cast<SkPaint*>((ptr));
SkBlender* blender = reinterpret_cast<SkBlender*>((blenderPtr));
instance->setBlender(sk_ref_sp<SkBlender>(blender));
}
SKIKO_EXPORT KInt org_jetbrains_skia_Paint__1nGetBlendMode
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment