Unverified Commit 574e3eee authored by Ivan Matkov's avatar Ivan Matkov Committed by GitHub

Expose `BBHFactory` to record bounds in `Picture` (#889)

parent 22d02e6b
package org.jetbrains.skia
import org.jetbrains.skia.impl.Managed
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.Stats
// TODO class BBoxHierarchy internal constructor(ptr: NativePointer) : RefCnt(ptr)
abstract class BBHFactory internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) {
private object _FinalizerHolder {
val PTR = BBHFactory_nGetFinalizer()
}
}
class RTreeFactory : BBHFactory {
@Suppress("ConvertSecondaryConstructorToPrimary")
constructor() : super(RTreeFactory_nMake()) {
Stats.onNativeCall()
}
}
@ExternalSymbolName("org_jetbrains_skia_RTreeFactory__1nMake")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_RTreeFactory__1nMake")
private external fun RTreeFactory_nMake(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_BBHFactory__1nGetFinalizer")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_BBHFactory_1nGetFinalizer")
private external fun BBHFactory_nGetFinalizer(): NativePointer
...@@ -2,9 +2,10 @@ package org.jetbrains.skia ...@@ -2,9 +2,10 @@ package org.jetbrains.skia
import org.jetbrains.skia.impl.Library.Companion.staticLoad import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.impl.Managed import org.jetbrains.skia.impl.Managed
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.Stats import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.reachabilityBarrier import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.impl.NativePointer
class PictureRecorder internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) { class PictureRecorder internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) {
companion object { companion object {
...@@ -44,9 +45,10 @@ class PictureRecorder internal constructor(ptr: NativePointer) : Managed(ptr, _F ...@@ -44,9 +45,10 @@ class PictureRecorder internal constructor(ptr: NativePointer) : Managed(ptr, _F
* *
* @param bounds the cull rect used when recording this picture. Any drawing the falls outside * @param bounds the cull rect used when recording this picture. Any drawing the falls outside
* of this rect is undefined, and may be drawn or it may not. * of this rect is undefined, and may be drawn or it may not.
* @param bbh optional acceleration structure
* @return the canvas. * @return the canvas.
*/ */
fun beginRecording(bounds: Rect): Canvas { fun beginRecording(bounds: Rect, bbh: BBHFactory? = null): Canvas {
return try { return try {
Stats.onNativeCall() Stats.onNativeCall()
Canvas( Canvas(
...@@ -55,7 +57,8 @@ class PictureRecorder internal constructor(ptr: NativePointer) : Managed(ptr, _F ...@@ -55,7 +57,8 @@ class PictureRecorder internal constructor(ptr: NativePointer) : Managed(ptr, _F
bounds.left, bounds.left,
bounds.top, bounds.top,
bounds.right, bounds.right,
bounds.bottom bounds.bottom,
getPtr(bbh)
), false, this ), false, this
) )
} finally { } finally {
...@@ -134,7 +137,14 @@ private external fun PictureRecorder_nGetFinalizer(): NativePointer ...@@ -134,7 +137,14 @@ private external fun PictureRecorder_nGetFinalizer(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PictureRecorder__1nBeginRecording") @ExternalSymbolName("org_jetbrains_skia_PictureRecorder__1nBeginRecording")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureRecorder__1nBeginRecording") @ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureRecorder__1nBeginRecording")
private external fun _nBeginRecording(ptr: NativePointer, left: Float, top: Float, right: Float, bottom: Float): NativePointer private external fun _nBeginRecording(
ptr: NativePointer,
left: Float,
top: Float,
right: Float,
bottom: Float,
bbh: NativePointer
): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PictureRecorder__1nGetRecordingCanvas") @ExternalSymbolName("org_jetbrains_skia_PictureRecorder__1nGetRecordingCanvas")
@ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureRecorder__1nGetRecordingCanvas") @ModuleImport("./skiko.mjs", "org_jetbrains_skia_PictureRecorder__1nGetRecordingCanvas")
......
#include <jni.h>
#include "interop.hh"
#include "SkBBHFactory.h"
static void deleteSkBBHFactory(SkBBHFactory* bbh) {
delete bbh;
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_BBHFactoryKt_RTreeFactory_1nMake
(JNIEnv* env, jclass jclass) {
SkRTreeFactory* instance = new SkRTreeFactory();
return reinterpret_cast<jlong>(instance);
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_BBHFactoryKt_BBHFactory_1nGetFinalizer
(JNIEnv* env, jclass jclass) {
return static_cast<jlong>(reinterpret_cast<uintptr_t>(&deleteSkBBHFactory));
}
...@@ -21,9 +21,10 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PictureRecorderKt_Pic ...@@ -21,9 +21,10 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PictureRecorderKt_Pic
} }
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PictureRecorderKt__1nBeginRecording extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PictureRecorderKt__1nBeginRecording
(JNIEnv* env, jclass jclass, jlong ptr, jfloat left, jfloat top, jfloat right, jfloat bottom) { (JNIEnv* env, jclass jclass, jlong ptr, jfloat left, jfloat top, jfloat right, jfloat bottom, jlong bbh) {
SkPictureRecorder* instance = reinterpret_cast<SkPictureRecorder*>(static_cast<uintptr_t>(ptr)); SkPictureRecorder* instance = reinterpret_cast<SkPictureRecorder*>(static_cast<uintptr_t>(ptr));
SkCanvas* canvas = instance->beginRecording(SkRect::MakeLTRB(left, top, right, bottom), nullptr); SkBBHFactory* factory = reinterpret_cast<SkBBHFactory*>(static_cast<uintptr_t>(bbh));
SkCanvas* canvas = instance->beginRecording(SkRect::MakeLTRB(left, top, right, bottom), factory);
return reinterpret_cast<jlong>(canvas); return reinterpret_cast<jlong>(canvas);
} }
......
#include "common.h"
#include "SkBBHFactory.h"
static void deleteSkBBHFactory(SkBBHFactory* bbh) {
delete bbh;
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_RTreeFactory__1nMake
() {
SkRTreeFactory* instance = new SkRTreeFactory();
return reinterpret_cast<KNativePointer>(instance);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_BBHFactory__1nGetFinalizer
() {
return reinterpret_cast<KNativePointer>((&deleteSkBBHFactory));
}
...@@ -20,9 +20,10 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureRecorder__1nGetFinalizer ...@@ -20,9 +20,10 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureRecorder__1nGetFinalizer
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureRecorder__1nBeginRecording SKIKO_EXPORT KNativePointer org_jetbrains_skia_PictureRecorder__1nBeginRecording
(KNativePointer ptr, KFloat left, KFloat top, KFloat right, KFloat bottom) { (KNativePointer ptr, KFloat left, KFloat top, KFloat right, KFloat bottom, KNativePointer bbh) {
SkPictureRecorder* instance = reinterpret_cast<SkPictureRecorder*>((ptr)); SkPictureRecorder* instance = reinterpret_cast<SkPictureRecorder*>((ptr));
SkCanvas* canvas = instance->beginRecording(SkRect::MakeLTRB(left, top, right, bottom), nullptr); SkBBHFactory* factory = reinterpret_cast<SkBBHFactory*>(bbh);
SkCanvas* canvas = instance->beginRecording(SkRect::MakeLTRB(left, top, right, bottom), factory);
return reinterpret_cast<KNativePointer>(canvas); return reinterpret_cast<KNativePointer>(canvas);
} }
......
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